域名系统DNS

域名系统DNS

概述

域名系统DNS(Domain Name System) 是因特网使用的命名系统,用来把便于人们使用的机器名字转化为IP地址。

ARPANET时代,使用hosts文件,列出所有主机名字对应的IP地址。现在因特网的域名系统是一个联机分布式数据库系统,并采用客户-服务器方式。DNS使大多数名字都在本地进行解析( resolve ),仅少量解析需要在因特网上通信,因此DNS系统的效率很高。由于DNS是分布式系统,即使单个计算机出了故障,也不会妨碍整个DNS系统的正常运行。

域名到IP地址的解析是由分布在因特网上的许多 域名服务器程序(域名服务器) 共同完成的。域名服务器程序在专设的结点上运行。

域名到IP地址的解析过程如下:当一个应用程序需要把主机名解析为IP地址时,该应用程序就调用 解析程序(resolver) ,并成为DNS的一个客户,把待解析的域名放在DNS请求报文中,以 UDP用户数据报 方式发给本地域名服务器(使用UDP是为了减少开销)。本地域名服务器在查找域名后,把对应的 IP地址放在回答报文 中返回。应用程序获得目的主机的IP地址后即可进行通信。若本地域名服务器不能回答该请求,则此域名服务器就暂时成为DNS中的另一个客户,并向其它域名服务器发出查询请求,这种过程直到找到能够回答该请求的域名服务器为止。

层次结构的因特网域名

mail.cctv.com

  • 三级域名:mail
  • 二级域名: cctv
  • 顶级域名: com

域名服务器

概述

通常使用”域名服务器树”的结构。但是这样会得的域名服务器的数量太多,DNS采用划分区的办法解决这个问题。

一个服务器负责管辖的有权限的范围叫做区(zone)。一个区中所有节点必须是能够连通的。每个区设置相应的 权限域名服务器(authoritative name server) 用来保存该区中所有主机到IP地址的映射,即区是域的子集。

四种域名服务器

DNS域名服务器树状结构图可以准确的反应出DNS的分布式结构.域名服务器由上至下分为如下几类:

根域名服务器(root name server)

根域名服务器是最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器知道所有的顶级域名和IP地址。

不管哪个本地域名服务器,若要对因特网上任何一个域名进行解析(转化IP),只要自己无法解析,首先求助于根域名服务器,假定所有的根域名服务器都瘫痪了,则整个DNS就无法工作。在因特网上有13个不同的根域名服务器(a.rootservers.net ~ m.rootservers.net)。在每个地点的根域名服务器由多台机器组成,大部分本地域名服务器能就近找到一个根域名服务器。

根域名服务器才用任播(angcast)技术,因此当DNS客户向某个根域名服务器进行查询时,因特网上的路由器就能找到离这个DNS客户最近的一个根域名服务器。

根域名服务器通常不直接把待查询的域名转化为IP地址,而是告诉本地域名服务器下一步应当找哪一个顶级域名服务器进行查询。

顶级域名服务器(TLD服务器)

这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名。当收到DNS查询请求时,就给出相应的回答(可能是最终的结果也可能是下一步应当找的的域名服务器IP地址)

权限域名服务器

负责一个区域的域名服务器。当一个权限域名服务器还不能给出最终查询结果时,则会告诉DNS请求客户,下一步找哪个权限服务器。

本地域名服务器(local name server)

本地域名服务器不属于域名服务器层次结构,但是对域名系统非常重要。每一个因特网ISP(Internet Service Provider)都可以拥有一个本地域名服务器。当所查询的主机也同时属于一个本地ISP时,该本地域名服务器就直接转化IP,而不去询问其它的域名服务器。

可靠性

为了提高域名服务器的可靠性,DNS域名服务器都把数据复制到几个域名服务器来保存,其中一个是主域名服务器(master name server),其它的是辅助域名服务器(secondary name server)。主域名定期将数据复制到辅助域名服务器上面,更新数据只能在主域名服务器上,辅助域名服务器负责当主域名服务器出现故障时正常的运作。

DNS域名解析过程

递归查询

主机向本地域名服务器的查询一般采用递归查询( recursive query )的方式。所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其他根域名服务器继续发送查询请求报文(即替代主机继续查询),而不是让该主机进行下一步查询。因此,递归查询返回查询结果IP,或报错。

迭代查询

本地域名服务器向根域名服务器的查询方式为迭代查询( iterative query )。当根域名服务器收到本地域名服务器的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器后续查询哪一个域名服务器。根域名服务器通常把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器查询顶级域名服务器,同样顶级域名服务器收到请求之后返回IP结果,或让本地域名服务器查询哪一个权限域名服务器。

本地域名服务器向根域名服务器查询方式也可以使用递归查询,这取决于最初查询报文设置是要求使用哪一种查询方式。

举例

主机m.xyz.com向y.xyz.com发送邮件,则必须先知道y.xyz.com的IP

  • 主机m.xyz.com向其本地域名服务器dns.xyz.com进行递归查询
  • 本地域名服务器采用迭代查询。先向一个根域名服务器查询
  • 根域名服务器告诉本地域名服务器,下一次应查询的顶级域名服务器dns.com的IP地址
  • 顶级域名服务器dns.com告诉本地域名服务器,所查询的主机的IP地址
  • 本地域名服务器最后把查询结果告诉主机

上述步骤总共使用8个UDP用户数据报的报文。

提高DNS查询效率

使用高速缓存来存放最近查询过的域名以及从何处获得域名映射信息的记录。主机中也需要高速缓存来存放最近访问的域名,而不是每次启动主机时从本地域名服务器下载数据器。

Reference

《计算机网络:谢希仁 DNS章》

你可能感兴趣的:(计算机网络)