导读 | DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。 |
在讲解DNS之前,首先粗略的说一下域名这个东西,比如说我们在用浏览器访问网址的时候,我们输入的网站的地址就是一个域名,例如 www.google.com,但其实我们知道我们标志互联网中的每一个机器都是有一个IP地址的,我们若需要访问一个网站的服务器,实际上是需要输入该网站的IP地址来进行访问的,但是IP地址往往难以记忆,IPv4尚且难记,IPv6就更不用说了,所以我们就通过使用域名来对其进行管理,但是在访问的时候,系统底层还是通过ip地址来进行访问的,域名和IP地址直接的转换就是通过DNS服务器来完成的。
域名简单了解过了,再来说一说nsswitch框架这个东东。
nsswitch(name service switch configuration,名称服务切换配置),规定通过哪些途径以及按照什么顺序来查找特定类型的信息。还可以指定某个方法奏效或失效时系统将采取什么动作,是一种通用框架,与各种类型存储进行交互的公共模块化的实现。nsswitch是Linux中的一种解析框架,负责在程序跟存储方式之间做了一层对接。让用户可以更好地选择存储方式,如把用户名解析为UID,服务解析为PORT,域名解析为IP等。这些堆成映射解析的存储方式可以有多种,如nis,ldap,file,mysql等。而nsswitch这种框架就是提供给用户可以方便更换存储方式的;比如默认的用户名和密码等配置默认在/etc/passwd文件中,但是用户可以选项把用户和密码存储在ldap或mysql中,而上层只要通过nsswitch就框架编写的程序,在用到系统用户时就不需要关心这些账号密码存储在哪里了(不需要变动程序),由nsswitch这个中间层来搞定了。在nsswitch的配置文件/etc/nsswitch.conf中有这么一行语句,”hosts: files dns“,就表示域名解析时先找本机的/etc/hosts文件然后再找dns服务器。
需要详细了解可以看/etc/nsswitch.conf配置文件,nsswitch.conf中的每一行配置都指明了如何搜索信息,每行配置的格式如下:
Info: method[[action]] [method[[action]]…]
其中,info指定该行所描述的信息的类型,method为用来查找该信息的方法,action是对前面的method返回状态的响应。action要放在方括号里。当需要提供nsswitch.conf文件所描述的信息的时候,系统将检查含有适当info字段的配置行。它按照从左向右的顺序开始执行配置行中指定的方法。在默认情况下,如果找到期望的信息,系统将停止搜索。如果没有指定action,那么当某个方法未能返回结果时,系统就会尝试下一个动作。有可能搜索结束都没有找到想要的信息。
20世纪70年代末,域名解析刚开始使用的都是/etc/hosts文件来负责的,在60年代美国军方的一个项目ARPAnet,由电话交换网络转到TCP/IP数据交换网络(数据分组可以以多条路径发送且接收方收到数据并要发送确认)。那个时候接入互联网的只有四个主机美国加州大学的圣巴巴拉分校,洛杉矶大学,犹他州立,斯坦福研究所因为主机很少人们还是可以记住IP地址的,但是因为人最容易记忆的是字符串而不是数字也随着后来加入主机的越来越多人们发现已经记不住哪台主机是那个IP了;因此就出来了给主机命名的概念每一台主机起一个人们容易记忆的字符串,可以人们容易记忆了而主机却识别不了;因此域名解析出现了利用hosts文件就可以标明主机对应的IP是什么;人们访问主机名而主机负责在把主机名解析为IP地址即可。
但是后来随着互联网主机加入的越来越多,hosts文件已经不足以应对。因此美国就出现了一个机构IANA(现在由ICANN管理)负责管理IP和域名的转换;如果A想要接入网络中时就找IANA申请一个IP地址和一个主机名,如果B知道A的主机名想访问A就需要到IANA那里通过FTP下载hosts文件到本地更新自己的hosts文件里面就会有A主机主机名对应的IP地址;随着hosts文件越来越大IANA管理非常麻烦和用户定时就要去IANA哪里下载hosts文件。时间一长这总方法是行不通的。再后来IANA就建立起了DNS负责处理用户提交的请求帮用户解析域名对应的IP地址。
1)技术角度看
DNS解析是互联网绝大多数应用的实际寻址方式; 域名技术的再发展、以及基于域名技术的多种应用,丰富了互联网应用和协议。
2)资源角度看
域名是互联网上的身份标识,是不可重复的唯一标识资源; 互联网的全球化使得域名成为标识一国主权的国家战略资源。
DNS的分布式数据库是以域名为索引的,每个域名实际上就是一颗很大的逆向树中的路径,这棵逆向树称为域名空间。这棵树的层次结构如下图,和Linux文件系统的结构非常相似。在顶端,树有唯一的一个根域。在根下又可以有多个任意的分支,这些分支点称为“顶级域”。而在每个顶级域下又可以有多个相同的“二级域”,而树的深度不得超过127层。
FQDN:(Fully Qualified Domain Name)完全合格域名/全称域名,是指主机名加上全路径,全路径中列出了序列中所有域成员。全域名可以从逻辑上准确地表示出主机在什么地方,也可以说全域名是主机名的一种完全表示形式。从全域名中包含的信息可以看出主机在域名树中的位置。如www.baidu.com. 这个域名,分解后含义如下:
. #表示根域 .com #表示顶级域 baidu.com #表示二级域 www #表示主机名
根域:目前全世界只有13台根服务器,名字分别为“A”至“M”,其中10台设置在美国,另外3台设置于英国、瑞典和日本。
顶级域:有组织域和国家域,其中组织域有如:.com .org .net .edu .cc .info等等,国家域有:.cn .hk .jp等等。
二级域名:就是真正用于服务的,比如可以根据企业名称自行申请试用什么域名。
主机名:是用来标识这个域名对应的服务是什么,如www一般用于万维网,mail用于邮件,都可以随意设定。
下图是各个分支的表现形式:
1) 每一个主机都知道根域在哪里;
2) 上级必须知道下级;
3) 下级不知道上级;
4) 查询两段式递归查询和迭代查询;
5) 根域不迭代(根全球有13台a-m.root-servers.net);
6) 顶级域不迭代;
7) 二级域服务器可以只提供权威查询不提供迭代或转发;
1)递归查询
递归查询是最常见的是主机发送到本地域名服务器的请求。当本地域名服务器接受了客户机的查询请求时,本地域名服务器将力图代表客户机来找到答案,而在域名服务器执行所有工作的时候,客户机只是等待。如果本地域名服务器不能直接回答,则它将在域名树中的各分 支上下递归搜索来寻找答案。对于一个递归查询,DNS服务器将持续搜索直到收到回答。这种回答可以是主机的IP地址,也可以回答“主机不存在”。不论是哪种结果,递归域名服务器将把结果返回给客户机。
2)迭代查询(可能发出多次请求)
本地域名服务器向根域名服务器的查询通常是采用迭代查询。当根域名服务器收到本地域名服务器的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地域名服务器进行后续的查询。
如DNS客户端需要解析www.baidu.com.cn这个域名,过程如下图:
1、DNS客户端首先找本地DNS服务器进行域名解析,也就是自己设置的DNS地址;
2、本地DNS服务器收到请求后直接查找本服务器是否有此记录,如果有就直接返回域名对应的地址给客户端,那么这个域名的解析就完成了,这个就称为一次“递归查询”;
3、如果本地DNS没有查找到对应的记录,那么此DNS服务器就会请求根域找.cn服务器的地址(当然本地DNS服务器也可能不找根DNS而是直接转发到其他DNS服务器进行域名解析,但是如果被转发的那台DNS服务器不是www.baidu.com.cn的权威服务器还是需要进行找根服务器);
4、根服务器接收到请求后就会去找国际域名服务器列表,然后会返回.cn服务器的地址给本地DNS服务器;
5、本地DNS服务器收到.cn服务器地址后,就会找.cn服务器进行顶级域.com.cn服务器地址的解析,然后.cn服务器会返回.com.cn服务器的地址给本地DNS服务器;
6、本地DNS服务器收到.com.cn地址后,就会找.com.cn服务器解析baidu.com.cn服务器的地址;
7、本地DNS服务器收到baidu.com.cn的地址后,就会找baidu.com.cn服务器解析www.baidu.com.cn主机地址;
8、本地DNS服务器得到www.baidu.com.cn的IP地址后,会马上返回给客户端并缓存此域名;
9、客户端得到IP地址后缓存在本地,然后就可以通过IP地址访问百度服务器;
PS:在这个查询过程中,客户端发出的请求就是递归查询,而DNS服务器发出的请求就是迭代查询;另外,还有一个名词就是权威服务器(权威应答),意思就是真正负责你的域名记录解析的服务器称为权威服务器,其他解析都不能称为权威应答。
1)主DNS服务器
主DNS服务器就是创建了区域的DNS服务器。这里的区域数据是可读可修改的。主DNS服务器中的区域数据也称为正本区域数据。在一个DNS服务网络中,可以建立多个主DNS服务器,这样可以提供DNS服务的容错性。
2)辅助DNS服务器
辅助DNS服务器不创建区域,它的区域数据是从主DNS服务器复制来的,因此,区域数据只能读不能修改,也称为副本区域数据。当启动辅助DNS服务器时,辅助DNS服务器会和建立联系的主DNS服务器联系,并从主DNS服务器中复制数据。辅助DNS服务器在工作时,它会定期地更新副本区域数据,以尽可能地保证副本和正本区域数据的一致性。辅助DNS服务器除了可以从主DNS服务器复制数据外,还可以从其他辅助DNS服务器复制区域数据。
在一个区域中设置多个辅助DNS服务器可以提供容错,分担主DNS服务器的负担,同时可以加快DNS解析的速度。
3)主控DNS服务器
不论是主DNS服务器还是辅助DNS服务器,如果它向其他辅助DNS服务器提供区域数据的复制服务,就称为DNS服务器是主控DNS服务器。如DNS服务器A向DNS服务器B提供数据复制服务,则A就称为主控DNS服务器。
4)高速缓存服务器
高速缓存服务器上不存在任何区域数据,它只帮助DNS客户机向其他DNS服务器进行查询,然后将查询到的数据存储在一份高速缓存Cache中,响应客户机的查询请求。Cache-Only 服务器只负责查询数据,当客户机查询数据时,如果Cache中存在数据,则Cache可以将结果快速反馈给客户机。
5)DNS转发服务器
DNS转发服务器是一种特殊类型的DNS服务器。在一个DNS网络中,如果客户机向指定的DNS服务器解析的域名不成功,DNS服务器就可以将客户机的解析请求发送给一台DNS转发服务器,顾名思义,DNS转发服务器就是将域名请求转发给其他DNS服务器。
原文来自:
本文地址://lrxjmw.cn/dns-server-1.html编辑:向云艳,审核员:逄增宝
Linux大全:
Linux系统大全: