根据域名获取其IP地址的过程称为域名解析。域名解析使用DNS协议,由域名服务器完成域名解析工作。DNS协议规范了域名解析请求数据报文和响应数据报文的格式,而服务器则负责保存域名映射表,为用户提供域名解析服务,把解析得到的IP地址告知用户。
1.域名服务器
目前,域名管理机构是ICANN,它负责顶级域名的管理以及授权其他区域的机构来管理域名。因此,当用户在互联网的主机商注册域名时,主机商只是授权机构,最终还是由ICANN来管理。
如前所述,域名系统的提出是为了解决域名与IP地址的映射问题,因此,需要一个专门的服务器来保存这些数据。互联网中完成域名解析的实体是名字服务器(又称为域名服务器)。互联网中存在大量名字服务器。当一个域名管理机构授权委派之后,那么它就需要建立名字服务器来保存这个域下面的所有IP地址和域名的映射表。如在Windows系统中,需要在网络连接属性的TCP/IP协议里填写DNS服务器IP地址,填写的就是这个域中的名字服务器地址,当然也可以填写其余域的名字服务器地址。
名字服务器通常分为主名字服务器和辅名字服务器。辅名字服务器一般不保存这种映射关系,主要负责向其余主名字服务器查询而返回结果。主名字服务器则在数据库里保存了这种映射关系。主名字服务器的信息更新主要由域管理员负责,而辅名字服务器的更新主要靠定时向主名字服务器查询来获取更新信息。
除了主名字服务器和辅名字服务器外,还存在一类名字服务器叫根名字服务器。根名字服务器知道所有二级域中的每个授权名字服务器的名字和IP地址,因此对于一个新建立的名字服务器,只要知道了根名字服务器的IP地址,那么它就可以通过根名字服务器获得其余域的名字服务器信息。这里需要强调的是:名字服务器必须知道根名字服务器的IP地址而不是域名。读者可以匿名登录ftp.rs.internic.net,访问domain文件夹下的named.root文件,named.root文件保存了当前互联网上所有根名字服务器的清单。全世界目前只有13台根服务器,其中1台为主根服务器,域名为a.root-servers.net,IPv4地址为198.41.0.4,IPv6地址为2001:503:BA3E::2:30。其余12台均为辅根服务器。中国有根域名镜像服务器。
2.递归查询和迭代查询
域名解析时存在两种查询方式:递归查询和迭代查询。客户和服务器之间属递归查询,域名服务器之间属迭代查询。即当客户向域名服务器发出递归查询请求后,若域名服务器本身不能解析,则会向另外的域名服务器发出迭代查询请求,得到结果后转交给客户。
递归查询是最常见的查询方式。当客户机申请域名解析时,若域名服务器不能直接回答,则域名服务器会在域名树的各分支中递归搜索,最终将返回查询结果给客户机。在域名服务器查询期间,客户机将完全处于等待状态。递归查询无论如何都要把结果送给客户机,即使结果是“主机不存在”。
迭代查询又称重指引,当域名服务器使用迭代查询时,能够使其他域名服务器返回一个最佳的查询点提示或主机地址。若此最佳的查询点中包含需要查询的主机地址,则返回主机地址信息。若域名服务器不能够直接查询到主机地址,则按照提示的指引继续查询,直到域名服务器给出的提示中包含所需查询的主机地址为止。一般每次指引都会更靠近根域名服务器,查寻到根域名服务器后,则会再次根据提示向下查找。迭代查询相当于“如果你不知道,告诉我该到哪里查?”。
3.高速缓存
高速缓存的目的是查询本地化。每个域名服务器都维护一个高速缓存,用于存放最近解析过的名字以及从何处获得名字的映射信息记录。当客户请求域名服务器进行域名解析时,域名服务器首先按标准过程检查它是否被授权管理该名字,若未被授权,则查看自己的高速缓存,检查该名字是否最近被转换过。域名服务器向客户报告缓存中有关名字和地址的绑定信息,并标志为非授权绑定,以及给出获得此绑定的服务器的名字。本地服务器同时也将服务器与IP地址的绑定告知客户。
主机本身也有一个高速缓存,存放有最近解析过的域名与IP地址的映射关系。
4.解析流程
当在浏览器地址栏输入域名或点击网页中的一个链接时,就进入下面的解析流程。
1)客户提出域名解析请求,并将该请求发送给本地域名服务器。(www.daowen.com)
2)本地域名服务器收到请求后,就先查询服务器上的高速缓存,如果有该记录项,则本地的名字服务器就直接把查询到的IP地址返回给客户。
3)如果本地域名服务器的高速缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根名字服务器再返回给本地域名服务器一个被查询域名所属的主名字服务器的地址。
4)本地域名服务器再向第3步返回的主名字服务器发送请求,然后接受请求的主名字服务器查询自己的高速缓存,如果没有该记录,则返回相关的上级的主名字服务器的地址。
5)重复第4步,直到找到正确的记录。
6)本地域名服务器把返回的结果保存到高速缓存,以备下一次查询使用,同时将结果返回给客户。
5.解析实例
假设用户要访问www.baidu.com,而用户所用的DNS域的域名服务器为dns.userdomain.com,根名字服务器为a.root-servers.net,而www.baidu.com所属DNS域的域名服务器为dns.baidu.com,则域名解析过程如图7-2所示。
图7-2 DNS解析过程
1)客户向dns.userdomain.com域名服务器发出请求解析域名www.baidu.com的DNS请求。
2)dns.userdomain.com域名服务器收到解析请求后,查询本地高速缓存,假设没有记录,则dns.userdomain.com向根域名服务器ns.internet.net发出解析域名www.baidu.com的请求。
3)根域名服务器a.root-servers.net收到请求后,查询本地记录得到如下结果:baidu.com NS dns.baidu.com(表示baidu.com域所属的域名服务器为dns.baidu.com,NS表示查询类型为授权的名名字服务器),同时给出dns.baidu.com的IP地址,并将结果返回给dns.userdomain.com域名服务器。
4)本地域名服务器dns.userdomain.com收到响应之后,再向dns.baidu.com发出域名解析请求。
5)dns.baidu.com收到来自dns.userdomai.com的域名解析请求之后,开始查询本地记录,找到一条记录www.baidu.com A 202.108.22.5,并将结果返回给dns.userdomain.com。记录中的A指A记录,表示该记录类型是一个主机名或域名对应的IP地址。
6)dns.userdomain.com收到响应之后,一方面将返回的结果保存到本地高速缓存中,同时将结果返回给客户机。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。