谁在递归 DNS 查找中真正“递归”?

Bry*_*mas 18 domain-name-system

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

但是在阅读网络上的文章,甚至对DNS recursive进行 Google 图片搜索时,我看到了更多类似这样的示例: 替代文字

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

所以我想我的问题是,“递归”DNS 查找是否真的只意味着首选 DNS 服务器代表客户端做某事的意义上的递归,但从现在开始真的是迭代的?我在谷歌图片搜索中看到的大多数结果都让我相信这一点,这就引出了一个问题,这篇文章中的第一张图片是完全错误的吗?

Aln*_*tak 18

你的最后一段是正确的。

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

该服务器然后反复询问名称服务器链以获得正确答案。这些查询本身不应设置 RD 位。

最终,递归服务器的响应将设置“递归可用”(RA) 标志,表明该答案确实已完全回答。相反,权威服务器不会设置 RA 标志。

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

就其价值而言,您发现的第一个图表从根本上是不正确的。根服务器不对任何其他服务器执行查询,它们只向其他服务器发出引用。


Vat*_*ine 5

据我了解,“递归查找”仅从原始查询器的角度来看。因此,如果它询问 DNS 服务器并得到一个完全解析的答案,那么它就是一个“递归查询”。如果该服务器反过来执行递归或迭代查找,那么原始查询器不必关心。