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

moh*_*ain 9 sockets dns

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

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

递归dns查找:

递归dns查找

迭代dns查找: 迭代dns查找

Aln*_*tak 6

任何DNS客户端(或"解析器")都可以执行迭代查询.

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

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

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


Cel*_*ada 5

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

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

DNSSEC引发了一个问题:使用DNSSEC,如果最终用户想要验证结果,则必须执行完整的迭代查询.目前尚未看到如何大规模部署支持DNSSEC的解析器.

  • 与转发器通信的验证存根需要发送带有"CD = 1"的查询,以确保它在没有被递归服务器预先验证的情况下获得链. (3认同)