DNS递归与迭代查询次数计算
@(计算机网络)
设计缘由
理论上说,整个因特网可以只用一个域名服务器。使它装入因特网上所有的主机域名,并回答所有对IP地址的查询。
但是这么做,这个服务器肯定扛不住,因为因特网太大了。而且一旦这个服务器宕机了,整个因特网就要崩溃,瘫痪。
由此,引入的是层次树状结构,用的是分布式域名系统。
在域名服务器的层次结构中要仔细体会分布式从哪里得到保证。
因特网的域名系统时联机分布式数据库系统,是C/S架构。
DNS**大多数域名在本地解析**,只有少量的解析需要在因特网上通信。
域名的解析由分布在因特网上的许多域名服务程序来共同完成。有专门的结点来运行,这些专门的结点叫域名服务器。
解析过程
某个应用进程,需要把主机名解析为IP地址,该进程就调用解析程序。称为DNS系统的客户,委托DNS为其服务。把待解析的域名放在DNS请求报文里,用UDP协议快速发给本地域名服务器。本地域名服务器查找域名,把对应的IP地址放在回答报文中返回给进程。这样进程拿到IP就可以继续与外部世界通信了。
但是本地域名服务器并不是万能的,没有能力回答该请求时,它不想让下面的主机失望,于是自己要想办法。它把自己变成DNS系统的另一个客户,并向其他域名服务器发出查询请求。直到找到该IP地址为止。
这个本地域名服务器去查询的过程还分为两种:
- 迭代查询
- 递归查询
总之,这个过程非常像底层百姓去求直接领导办事,领导能办的就办,百姓回家。如果领导办不了,不能说让百姓自己想办法,百姓能想到的就是求自己领导啊。于是领导往上级查询。。。
域名服务器层次结构
域名分为:
- 根域名:管理*域名
- *域名 .com .cn .edu .gov等
- 二级域名
- 三级域名
- 四级域名
可以考虑把每一级的所有域名对应一个域名服务器,但是这样会使得域名服务器的数量太多,系统运行效率低。DNS采用的思路是:划分区的办法。
一个服务器管辖的(有权限)范围叫区。一个区中的所有结点必须能够连通。每一个区设置相应的权限域名服务器,用于保存该区中所有主机的域名到IP地址的映射。即,DNS服务器的管辖范围不是以域为单位,而是DNS实际管辖的范围。区不大于域。
简单理解就是域是域名对应的区域。对这个域名进行更细致的划分,比如申请了一个abc.com,买回来你就拥有了这个域的空间。你可以再配置一个mail.abc.com,这样就有了一个用于邮件的子域名等。图上第一个abc.com只划分了一个区,因此域的范围等于区的范围。第二个图中,abc.com和y.abc.com都属于域abc.com,但是在这两个区中配置了自己的权限域名服务器。属于不同的区。
服务器类型
- 根服务器–最高层次的域名服务器,最重要的域名服务器。所有的根域名服务器都知道所有的*域名服务器的域名和IP地址。
当本地域名服务器无法解析域名时,不是逐级查询,这样是很盲目的。而是马上就自顶向下,求助于根域名服务器,如果是递归的查询,则根域名服务器会发报文到*域名服务器,如果是二级域名,*域名服务器还要去发报文查找二级域名的映射。直到权限域名服务器,因为映射关系存储在权限域名服务器中。找到往上返回,直到根,根在返回给本地域名服务器。这样的设计已经被抛弃了,作为高贵的根服务器,居然被本地域名服务器驱使,这是管理学上的猴子爬到你的背上了!
改进这点,引入了迭代式查询,即根只告诉你去找谁,不帮你找。比如根告诉你怎么去找到*域名,如果*域名是你的权限域名服务器,那么直接告诉你答案即可。否则*域名服务器也是告诉你怎么去找二级,不是帮你找到为止。
- *域名服务器
管理在该*域名注册的所有二级域名。收到DNS请求,可能是最后的结果,也可能是下一步应该找的域名服务器的IP地址。
+ 权限域名服务器
权限域名服务器如果还不能给出最后的查询,就会告诉客户下一步要去哪一个权限域名服务器找。比如我注册了一个域名,网站内容托管在阿里万网,邮箱托管在腾讯。域名是abc.com,邮箱是mail.abc.com,插到abc时是一个权限域名服务器,但是不是mail.abc.com的,因此权限域名服务器会指示下一步应该往哪找。
本地域名服务器:对域名系统非常重要。当一个主机发出DNS查询请求时,这个查询报文就发送给该主机的本地域名服务器。比如我们在配置系统配置本地连接时,需要填写DNS服务器地址,这个就是DNS本地域名服务器的地址。
域名服务器整体的架构设计和人类的政治体系相对应。
迭代查询和递归查询
- 递归:本地域名服务器只发一个请求到根,然后就赖上根服务器了,不给它最终结果它就赖着不走了。
- 迭代:根只会告诉本地域名服务器去*,但是要自己发请求报文。*只会告诉本地域名服务器该去二级查,也需要自己去发报文,依次类推。所以本地域名服务器要查询多次。
–参考谢希仁版网络教材