递归和迭代dns查找之间的区别

时间:2012-04-01 16:56:35

标签: sockets dns

我正在制作一个解析器和一个名称服务器程序,不使用dns库(例如netdb.h)直接发送dns消息。但我几乎没有问题。据我发现递送请求时,查询的名称服务器为我们找到了记录。 nameserver用于查询其他服务器的查询是否与迭代查询类似?至少这些图像暗示了这一点。

如果客户端可以执行迭代查询或只有名称服务器可以执行迭代查询,我也很困惑?

递归dns查找:

Recursive dns lookup

迭代dns查找: Iterative dns lookup

3 个答案:

答案 0 :(得分:6)

任何DNS客户端(或“解析程序”)可能执行迭代查询。

但是,根据定义,执行迭代查询的解析程序是递归解析程序,而不是存根解析程序。

存根解析器通常实现为,直接链接到您的可执行文件。

但是,也可以将完整的递归解析器构建为独立库。 libunbound是一个特别好的例子。

答案 1 :(得分:5)

客户端当然可以自己进行迭代查询而无需咨询递归解析器,但有很多理由不这样做:

  • 简化每个主机上存根解析程序库(例如libresolv或内置于libc)中需要存在的软件的复杂性
  • 委托迭代查询到ISP网络中的服务器或更接近“骨干”,这将具有更好的Internet连接(最重要的是,更低的延迟),并且可以更快地完成迭代查询。
  • 将许多最终用户的DNS查询聚合到少量缓存解析器上。大多数情况下,解析器不必执行完整的迭代查询:它们将部分或全部结果已缓存。
  • 减少必须部署“提示”文件(根名称服务器及其IP地址列表)的位置数,这是引导递归解析程序所必需的。

DNSSEC引发了一个问题:使用DNSSEC,如果最终用户想要验证结果,则必须执行完整的迭代查询。还有待观察如何大规模部署支持DNSSEC的解析器。

答案 2 :(得分:1)

递归查询: - DNS服务器可能代表您在互联网上发送查询其他DNS服务器,以获得答案。代理服务器将查询发送到主服务器以获得答案。

在迭代查询中,名称服务器不会去查询您的查询的完整答案,但会返回对其他DNS服务器的引用,这可能有答案。 代理服务器为您提供答案,除非它提供在其他服务器中搜索