DNS递归查询与迭代查询

DNS递归查询与迭代查询


summary

一直以来对于DNS查询的“递归”与“迭代”方式感到困惑。一般人就直接跟你说“DNS客户端向DNS服务器请求叫递归查询”,“DNS服务器之间的查询请求是迭代查询”,听了之后根本不知所谓。。。直到我看了《网络操作系统——windows server 2003配置与管理》(陈景亮主编)一书,明白了具体情况。以下主要是“摘抄”,包括附图。不自己整理,主要是因为它写得确实好,而且组织起来有一定的麻烦性。

递归查询

递归查询要求DNS服务器在任何情况下都要返回结果。一般DNS客户端向DNS服务器提出的查询请求属于递归查询。标准递归查询过程如下图:

递归查询

假设域名为test1.abc.com的主机要查询域名为www.info.xyz.com的服务器的IP。

    第一步:向本地DNS服务器abc.com查询;
    第二步:本地DNS服务器查询不到,则通过根提示文件向负责.com顶级域的根DNS服务器查询;
    第三第:根DNS服务器根据所查询域名中的“xyz.com”再向xyz.com DNS服务器查询;
    第四步:xyz.com DNS服务器直接解析域名www.info.xyz.com,将查询结果按照原路返回给请求查询客户端test1.abc.com

递归与迭代相结合的查询

采用上边的递归查询方法,根DNS服务器需要经过逐层查询才能获得查询结果,效率很低,而且还会增加根DNS服务器的负担。为了解决这个问题,实际上采用递归与迭代相结合的查询方式,如图:

递归+迭代查询

查询过程如下:

    第一步:向本地DNS服务器abc.com查询;
    第二步:本地DNS服务器查询不到,则通过根提示文件向负责.com顶级域的根DNS服务器查询;
    第三步:根DNS服务器直接将下属的DNS服务器IP地址返回给本地DNS服务器;
    第四步:本地DNS服务器直接向xyz.com DNS服务器查询。

这其中,迭代查询将对DNS服务器进行查询的任务交给DNS客户端,DNS服务器只是给客户端返回一个提示,告诉它到另一台DNS服务器继续查询,直到查到所需结果为止。如果最后一台DNS服务器也不能提供所需答案,则宣告查询失败。所以说“一般服务器之间的查询请求属于迭代查询”。

个人理解

单独地讲什么是递归查询什么是迭代查询是没有意义的,递归和迭代本身就是在一个群体(不是1也不是2的数量)中的行为方式,直接说“DNS客户端向DNS服务器请求叫递归查询”,“DNS服务器之间的查询请求是迭代查询”,从概念上来说就是错的。

那现在我们可以来讲讲,为什么叫它“递归查询”?“迭代查询”?

从第一个例子中,我们站在test1.abc.com的角度看,发出了查询请求后,这个请求通过一层一层递交,直到最后得到了一个明确的解析结果才把它返回给test1.abc.com。这过程就看出来它是递归的。

从第二个例子中,我们站在abc.com服务器的角度看,发出了查询请求后,查询结果直接返回来了,如果没有解析出来,那么我们就进行下一次查询(根据返回的指引),这样是一次次重复同样的操作的,这个叫做迭代。而我们上边说到的的“递归结合迭代”,这里的递归在于进行操作的并不直接是我们的test1.abc.com主机,而是abc.com,查询主机test1.abc.com也是在最后才收到一个最终的查询结果哦,就像递归例子讲的那样。

猜你喜欢

转载自blog.csdn.net/AlimSah/article/details/52931423