因特网的域名解析系统DNS是一个联机分布式数据库系统,并采用客户/服务器体系。TCP/IP应用程序使用它来完成主机名称和IP地址之间的映射。DNS使大多数名字都在本地解析,仅少量解析需要在因特网上通信,因此系统效率很高。由于DNS是分布式系统,即使单个计算机除了故障,也不会妨碍整个系统正常运行。
DNS采用了分布式数据系统。它作为互联网上的应用程序运行,它使用IP4或IP6。为了实现可扩展性,DNS名称是分层的,是支持名称解析的服务器。DNS提供了允许客户机和服务器相互通信的协议,并且也提供了服务器之间交互信息的协议。
域名服务器
名字空间的相关信息(其中最重要的就是域名和IP地址的映射关系)必须保存在计算机中,供所有其他应用查询。显然,不可以将这些信息存储在一台计算机中。DNS将域名信息分布到叫做域名服务器的许多计算机上。DNS将整个名字空间划分为许多区,每个区的域名信息由一个权限域名服务器负责管理。
域名服务器的四种类型:
(1)根域名服务器
最高层次的域名服务器。根域名服务器并不直接管辖某个区的域名信息,但每个域名服务器都知道所有的顶级域名服务器的域名及其IP地址。
(2)顶级域名服务器(即TLD服务器)
负责管理在该顶级域名服务器注册的所有二级域名。当收到DNS查询请求时就给出相应的回答(可能是最后的结果,也可能是下一级权限域名服务器的IP地址)
(3)权限域名服务器:
负责管理某个区的域名服务器。每个主机都必须在某个权限域名服务器下注册登记,因此权限域名服务器知道其管辖的域名与IP地址的映射关系。另外,权限域名服务器还知道其下一级域名服务器的地址。
当一个主机发出DNS查询报文时,这个查询报文就首先被送往该主机的本地域名服务器。每一个因特网服务器提供者(ISP),或者大学,甚至大学里的系都可以拥有一个本地域名服务器,它有时候也被称为默认域名服务器。若所要查询的主机处在本地ISP管辖范围,那么本地域名服务器就立即能把查询的主机名转换为IP地址。否则就要去查询其他域名服务器。本地域名服务器的IP地址需要直接配置在需要域名解析的主机中。
域名解析过程的简要归纳
当某一个应用进程需要将主机名解析为IP地址时(这个过程通常是自动进行的,用户对这个过程感受不到),该应用进程就成为域名系统DNS的一个客户,并把待解析的域名放在DNS请求报文中,以UDP数据报方式发送给本地域名服务器(使用UDP目的是为了减小开销)。本地的域名服务器在查找域名之后,把对应IP地址放在回答报文中返回。应用进程获得目的主机的IP地址后即可通信。
若本地域名服务器不能回答请求,则此域名服务器就暂时成为DNS中的另外一个客户,并向其他域名服务器发出查询请求。这种过程直至找到能够回答该请求的域名服务器为止。
主机向本地域名服务器的查询一般都是采用递归查询。
何谓递归查询?
就是如果本地域名服务器不知道被查询的域名的IP地址时,那么本地服务器就以DNS客户的身份向某个跟域名服务器继续发出查询请求报文(即替该主机继续查询),而不是让该主机自己进行下一步查询。
本地域名服务器向根域名服务器查询时,是优先采用迭代查询。所谓迭代查询就是本地域名服务器进行循环查询。当根域名服务器收到查询请求报文但并不知道被查询域名的IP地址时,这个根域名服务器就把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,就告诉本地域名服务器,下一步应当向哪一个权限域名服务器进行查询。这样查询下去,主机就知道了索=所要了解的域名的IP地址。理论上,任何DNS查询既可以采用递归查询也可以采用迭代查询,但由于递归查询对于被查询的域名服务器负担太大,通常采取的模式是:从请求主机到本地域名服务器的查询是递归查询,而其余的查询都是迭代查询。
高速缓存
为了提高DNS查询效率,并减轻根域名服务器的负荷和减少因特网上的DNS查询报文数量,在域名服务器终广泛使用了高速缓存(有时也称为高速缓存域名服务器)。高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录。
例如:如果前不久已经有用户查询域名为y.abc.com的IP地址,那么本地域名服务器就不必再向根域名服务器重新查询y.abc.com 的IP地址了。而是直接把高速缓存存放的上次查询结果(即y.abc.com的IP地址)告诉用户。
假定本地域名服务器的缓存中并没有y.abc.com的IP地址,而是存放着顶级域名服务器dns.com的IP地址,那么本地域名服务器就不必向根域名服务器进行查询,而可以直接向com顶级域名服务器发送查询请求报文。这样不仅可以大大减轻根域名服务器的负荷,而且也能够是因特网上的DNS查询请求报文和回答报文的数量大为减少。
由于域名到IP地址的绑定有可能发生变化 (但是不可能经常改变),为了保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器并处理超过合理时间的项目。当域名服务器已经从缓存中删去某项信息后又被请求查询该项目信息,就必须重新到授权管理该项目的域名服务器获取绑定信息。当权限域名服务器回答一个查询请求时,在响应中都有指明绑定有效存在的时间值。增加此时间值可减少网络开销,而减少此时间值可以提高域名解析的正确性。
不但在本地域名服务器需要高速缓存,在主机中也很需要。许多主机在启动时从本地域名服务器下载名字和地址的全部数据库,维护存放子最近使用的域名的高速缓存,并且只在从缓存中找不到欲解析的域名时才向本地域名服务器发送查询请求报文。维护本地域名服务器数据库的主机自然应该定期检查域名服务器以获取 新的映射信息,而且主机必须从缓存中删掉无效项。