谁实际上recursionDNS查找“recursion”?

我试图了解迭代和recursionDNS查找之间的区别。 从根本上说,我认为这就像打电话给百货公司寻找一种产品一样,当他们没有时,他们会给你另一个分支机构的号码打电话,然后你自己打电话给另一个分支机构。 与recursion相比,这就像调用百货公司,当他们没有什么后, 他们代表你的另一个分支寻找产品。 事情是,当涉及到DNS时,我对此有不同的看法。 当我想到recursion时,我想到了这样的东西: 替代文字

但是,当阅读networking上的文章,甚至做一个谷歌图像search的DNSrecursion ,我看到更多的例子,看起来像这样: 替代文字

对我来说,第二个例子看起来比迭代更迭代,因为每个“其他DNS服务器”都告诉“首选DNS服务器”要查找下一台机器的地址,而不是代表首选DNS服务器。 我看到的唯一recursion元素是首选的DNS服务器代表DNS客户端进行查找,但是从这里开始,它确实看起来是迭代的。

所以我想我的问题是,“recursion”的DNS查询真的只意味着recursion的意义上的首选DNS服务器代表客户端做的事情,但从这里真正迭代? 我在Google图片search中看到的大部分结果都让我相信这一点,然后引发这个问题,这是这篇文章中的第一张图片,显然是错误的?

你最后一段是正确的。

客户端在DNS请求头(见RFC 1035)中发送的“recursion期望”(RD)标志询问服务器“请给我这个问题的完整答案”。

该服务器比迭代地询问名称服务器的链是否有正确的答案。 这些查询本身不应该设置RD位。

最终,recursion服务器的响应将具有“recursion可用”(RA)标志设置,表示答案确实已经完全回答。 相反, 授权服务器不会设置RA标志。

恕我直言,这是一个糟糕的术语select。

对于它的价值,你发现的第一个图是根本不正确的。 根服务器不会执行任何其他服务器的查询,他们只会发送到其他服务器的引用。

据我所知,“recursion查询”完全是从原来查询者的angular度出发的。 所以,如果它询问一个DNS服务器并得到一个完全解决的答案,那么这是一个“recursion查询”。 如果该服务器反过来进行recursion或迭代查询,那么原来的查询者不必关心什么。

在你的问题中的两个图中的第一个是不正确的。 根服务器不会将查询发送到其他服务器。 如果根服务器事实上转发了如图中所示的查询,则DNS系统将比实际更容易受到DoS攻击。

第二个图大多是正确的,但是太简单了,不能显示查找的recursion性质。 虽然我们可以指出recursion发生的地方,但是图表仍然有足够的细节。

数字12旁边的DNS服务器表示Preferred DNS server是发生recursion的地方。 术语“ 首选DNS服务器”不是标准术语。 该服务器通常被称为cachingDNS recursor或其缩写。

在看networkingstream量时,确实看起来是迭代的。 recursion完全在DNS recursor内部。 如果你看一下DNS recursor的实现,你会发现如何处理请求的recursion结构。

如果实现对每个请求使用一个线程,并且使用recursion函数调用来实现查找,recursion可能很容易被发现。 但是更高效的devise不会为每个请求使用一个线程,而是在DNS recursor使用的数据结构中findrecursion。

需要recursion的原因是由于权威DNS服务器之间的引用是如何实现的。 举一个例子来说明这一点。 在该图中,您将看到microsoft.com的权威DNS服务器指向example.microsoft.com的授权DNS服务器。 这是使用指向主机名的NSlogging完成的。 因此,举例来说, microsoft.com的授权服务器可以告诉DNS recursor: ms.example.net对于example.microsoft.com是权威的。

此时,DNS recursor必须先parsingms.example.net然后才能继续执行example.microsoft.com的parsing。

为了parsing一个主机名,它首先需要parsing一个不同的主机名。 这是recursion。 为了不会导致无限recursion,DNS在某些情况下会粘贴与NSlogging一起发送的logging。