免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 19920 | 回复: 23

[DNS] 关于DNS的递归查询和迭代查询 [复制链接]

论坛徽章:
0
发表于 2010-08-11 17:03 |显示全部楼层
DNS查询时何时使用递归查询,何时使用迭代查询?

对这个问题我的理解是
1.根域名服务器使用迭代查询,
2.凡是和客户端直接连接的查询都是递归查询。

其他情况下,要看dns服务器的配置决定。

不知道这样理解对吗?大家谈谈自己的看法吧。

另外还有个问题:如何决定发送的查询使用递归查询还是迭代查询。比如服务器 A 向 B 发送了查询报文P,

如何可以决定B用递归或者迭代的方法处理这个查询请求呢?
一路征程一路笑 该用户已被删除
发表于 2010-08-11 23:37 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2010-08-12 20:48 |显示全部楼层
我到现在没在技术文档中找到迭代查询的概念。最大的可能是递归查询另一个叫法

论坛徽章:
0
发表于 2010-08-12 21:42 |显示全部楼层
我到现在没在技术文档中找到迭代查询的概念。最大的可能是递归查询另一个叫法
llzqq 发表于 2010-08-12 20:48



    恩,我看到的是在RFC1034 4.3.1中有这样的描述:

•The simplest mode for the server is non-recursive, since it can answer queries using only local information:
  the response contains an error, the answer, or a referral to some other server "closer" to the answer.
  All name servers must implement non-recursive queries.
•The simplest mode for the client is recursive, since in this mode the name server acts in the role of a resolver
  and returns either an error or the answer, but never referrals. This service is optional in a name server, and
  the name server may also choose to restrict the clients which can use recursive mode.

我把这里说的non-recursive就称为迭代查询,把recursive称为递归查询。

论坛徽章:
0
发表于 2010-08-13 14:32 |显示全部楼层
non-recursive  应该翻译为非递归。

论坛徽章:
0
发表于 2010-08-13 15:30 |显示全部楼层
对服务器来说迭代最轻松,我解析不了就告诉你到哪能解析,剩下的跟我没关系。
递归就好比是电信运营商曾经搞过的首问负责制,只要找到你,你就别想跑,不管是肯定的还是否定的都得给个明确的答复。

论坛徽章:
0
发表于 2010-08-19 10:56 |显示全部楼层
我一直都是这样认为的,那就是只存在递归查询recursive与非递归查询non-recursive,而迭代只是递归的另一种叫法?迭代查询和递归查询是一样的吧?
看了这个帖子,搜索了一下之前的帖子,也是和楼主的说法一样,已经彻底的被搞晕了……
我始终还是认为迭代与递归是一样的概念,只是叫法不同而已……
希望高手能够具体分析一下!

论坛徽章:
0
发表于 2010-10-12 22:24 |显示全部楼层
这个问题有最终的结论了没?递归与迭代是否属于同一概念?
我个人一直都是认为只有递归查询与非递归查询,而迭代的看法与这条概念一致:
我到现在没在技术文档中找到迭代查询的概念。最大的可能是递归查询另一个叫法
llzqq 发表于 2010-08-12 20:48

希望有DNS版的达人能够对此种说法讨论出一个最终的结果,貌似目前还是不了了之啊,不能让问题的沉了,得有结论出来……
嘿嘿,于是我就顶了一贴,期待有官方的或者又说服力的答案……

论坛徽章:
0
发表于 2010-10-13 14:00 |显示全部楼层
本帖最后由 flyinweb_cu 于 2010-10-13 14:17 编辑

DNS 查询以各种不同的方式进行解析。有时,客户端也可使用从先前的查询获得的缓存信息就地应答查询。DNS 服务器可使用其自身的资源记录信息缓存来应答查询。DNS 服务器也可代表请求客户端查询或联系其他 DNS 服务器,以便完全解析该名称,并随后将应答返回至客户端。这个过程称为递归。

另外,客户端自己也可尝试联系其他的 DNS 服务器来解析名称。当客户端这么做的时候,它会根据来自服务器的参考答案,使用其他的独立查询。该过程称作迭代。

只要发出递归查询,服务器必需回答目标IP与域名的映射关系。
而迭代查询是,服务器收到一次迭代查询回复一次结果,这个结果不一定是目标IP与域名的映射关系,也可以是其它DNS服务器的地址。
如图所示:从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询。

dns查询

dns查询



总之,DNS 查询过程按两部分进行:

名称查询从客户端计算机开始,并传送至解析程序即 DNS 客户服务程序进行解析。
不能就地解析查询时,可根据需要查询 DNS 服务器来解析名称。
下面的部分将更加详细地解释这两个过程:

第一部分:本地解析程序
下图显示了完整的 DNS 查询过程的概况。
dnsq2.png
  
如查询过程的初始步骤所示,DNS 域名由本机的程序使用。该请求随后传送至 DNS 客户服务,以便使用本地缓存信息进行解析。如果可以解析查询的名称,则应答该查询,该处理完成。

本地解析程序的缓存可包括从两个可能的来源获取的名称信息:

如果本地配置主机文件,则来自该文件的任何主机名称到地址的映射,在 DNS 客户服务启动时将预先加载到缓存中。
从以前的 DNS 查询应答的响应中获取的资源记录,将被添加至缓存并保留一段时间。
如果此查询与缓存中的项目不匹配,则解析过程继续进行,客户端查询 DNS 服务器来解析名称。

第二部分:查询 DNS 服务器
如前面的图中所示,客户端将查询首选 DNS 服务器。在此过程的初始客户/服务器查询部分中使用的实际服务器,选自全局列表。有关如何编译和更新该全局列表的详细信息,请参阅客户端功能。

当 DNS 服务器接收到查询时,首先检查它能否根据在服务器的本地配置区域中获取的资源记录信息作出权威性的应答。如果查询的名称与本地区域信息中的相应资源记录匹配,则使用该信息来解析查询的名称,服务器作出权威性的应答,。

如果区域信息中没有查询的名称,则服务器检查它能否通过来自先前查询的本地缓存信息来解析该名称。如果从中发现匹配的信息,则服务器使用该信息应答查询。接着,如果首选服务器可使用来自其缓存的肯定匹配响应来应答发出请求的客户端,则此次查询完成。

如果无论从缓存还是从区域信息,查询的名称在首选服务器中都未发现匹配的应答,那么查询过程可继续进行,使用递归来完全解析名称。这涉及来自其他 DNS 服务器的支持,以便帮助解析名称。在默认情况下,DNS 客户端服务要求服务器,在返回应答前使用递归过程来代表客户端完全解析名称。在大多数情况下,DNS 服务器被默认配置为支持递归过程,如下图所示。

dnsq2.png
  
为了使 DNS 服务器正确执行递归过程,首先需要在 DNS 域名空间内有关于其他 DNS 服务器的一些有用的联系信息。该信息以根提示的形式提供,它是一张初始资源记录列表,DNS 服务可利用这些记录定位其他 DNS 服务器,它们对 DNS 域名空间树的根具有绝对控制权。根服务器对于 DNS 域名空间树中的根域和顶级域具有绝对控制权。详细信息,请参阅更新根提示。

使用根提示查找根服务器,DNS 服务器可完成递归的使用。理论上,该过程启用 DNS 服务器,以便那些对域名空间树的任何级别使用的任何其他 DNS 域名具有绝对控制权的服务器。

例如,当客户端查询单个 DNS 服务器时,请考虑使用递归过程来定位名称“host-b.example.microsoft.com”。在 DNS 服务器和客户端首次启动,并且没有本地缓存信息可帮助解析名称查询,就会进行上述过程。根据其配置的区域,它假定由客户端查询的名称是域名,该服务器对该域名没有本地知识。

首先,首选服务器分析全名,并确定它需要对顶级域“com”具有权威性控制的服务器的位置。随后,对“com”DNS 服务器使用迭代查询,以便获取“microsoft.com”服务器的参考信息。接着,来自“microsoft.com”服务器的参考性应答,传送到“example.microsoft.com”的 DNS 服务器。

最后,与服务器“example.microsoft.com”联系上。因为该服务器包括作为其配置区域一部分的查询名称,所以它向启动递归的源服务器作出权威性地应答。当源服务器接收到表明已获得对请求查询的权威性应答的响应时,它将此应答转发给发出请求的客户端,这样递归查询过程就完成了。

尽管执行上述递归查询过程可能需要占用大量资源,但对于 DNS 服务器来说它仍然具有一些性能上的优势。例如,在递归过程中,执行递归查询的 DNS 服务器,获得有关 DNS 域名称空间的信息。该信息由服务器缓存起来并可再次使用,以便提高使用此信息或与之匹配的后续查询的应答速度。虽然打开与关闭 DNS 服务时,这些缓存信息将被清除,但是随着时间的推移,它们会不断增加并占据大量的服务器内存资源。
dnsq2.png

论坛徽章:
0
发表于 2010-10-14 12:57 |显示全部楼层
9楼的朋友你理解错误了吧?
请告诉我DNS查询中的递归与迭代在哪里有定义?RFC文档?或者ISC的Document中?
你画那么多图在解析递归与迭代,而你真正是从哪篇官方文档或正式的标准中对这二个概念进行定义过?
因此只是希望能找出证明迭代查询这个概念存在的官方文档资料而已,请不要转载网络中的文章,或者说根据个人的意见与理解来解释这二个概念!
我根本不相信你的解释……我需要的是类似RFC之类的这种定义
(当然RFC也是个人定义,但终归需要有一个统一的、官方的说法)

我个人真是从没在任何官方文档或RFC中看到存迭代查询这一概念,但我确实看到了递归查询与非递归查询这二个概念……
因此,我们讨论的目的主要是确定是否存在迭代查询这个概念,这个概念从何而来?以及这个概念如果存在,与递归查询的区别在哪里?
谢谢

PS:
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP