我正在制作一个解析器和一个名称服务器程序,不使用dns库(例如netdb.h)直接发送dns消息。但我几乎没有问题。据我发现递送请求时,查询的名称服务器为我们找到了记录。 nameserver用于查询其他服务器的查询是否与迭代查询类似?至少这些图像暗示了这一点。
如果客户端可以执行迭代查询或只有名称服务器可以执行迭代查询,我也很困惑?
递归dns查找:
迭代dns查找:
答案 0 :(得分:6)
任何DNS客户端(或“解析程序”)可能执行迭代查询。
但是,根据定义,执行迭代查询的解析程序是递归解析程序,而不是存根解析程序。
存根解析器通常实现为库,直接链接到您的可执行文件。
但是,也可以将完整的递归解析器构建为独立库。 libunbound
是一个特别好的例子。
答案 1 :(得分:5)
客户端当然可以自己进行迭代查询而无需咨询递归解析器,但有很多理由不这样做:
DNSSEC引发了一个问题:使用DNSSEC,如果最终用户想要验证结果,则必须执行完整的迭代查询。还有待观察如何大规模部署支持DNSSEC的解析器。
答案 2 :(得分:1)
递归查询: - DNS服务器可能代表您在互联网上发送查询其他DNS服务器,以获得答案。代理服务器将查询发送到主服务器以获得答案。
在迭代查询中,名称服务器不会去查询您的查询的完整答案,但会返回对其他DNS服务器的引用,这可能有答案。 代理服务器为您提供答案,除非它提供在其他服务器中搜索