-
-
[求助]DNS客户端什么情况下使用迭代查询
-
发表于:
2010-11-17 17:10
9376
-
最近在看dns,我想知道dns客户端怎么进行迭代查询。
相关资料中说dns有两种查询方式,递归查询和迭代查询,
1.递归查询是指dns服务器帮客户端查出最终结果(dns服务器如果不知道答案,它会向其他dns服务器请求,直到得出最终结果为止);
2.迭代查询是指dns服务器如果不知道结果就返回一个能够查出结果的dns服务器地址列表,然后让客户端自己去向这些dns服务器去查。
很多资料都说,满足迭代查询的两个条件是:
1.dns服务器配置为不支持递归查询。
2.客户端dns请求中的递归标志位为0.
于是我从这两个条件入手(满足一个条件即可),
1.设置一个不支持递归查询的dns服务器。(这一点dns服务器bind9的配置文件中加入recurse no;就可以了)。
我在本地虚拟机搭建了一个dns服务器,然后设置不递归,并将该dns服务器设为本机的dns服务器。按照我的理解,应该是当我使用浏览器去访问一个dns服务器不知道的网址的时候(比如访问abcd.baidu.com),它会告诉我知道答案的其他dns服务器的ip,我虚拟机里的dns不知道这个域名的答案,所以他返回了一个dns服务器的ip列表让客户端自己去查,但是实际上浏览器并没有向这些dns服务器列表请求,也就是没有执行迭代查询。
2.发送请求时将递归标志位置为0。(dns请求报文中有一个递归选项标识位,置1表示使用递归,0表示不递归)。
使用nslookup命令,set norecurse,然后查询abcd.baidu.com,wireshark抓包的时候确实看到递归标志为0,而且服务器也没有进行递归查询,而是返回了baidu.cm的dns认证服务器的ip。但是查询到此就结束了,客户端并没有向baidu.com的认证dns发出请求,也就是没有进行迭代查询。
我很困惑,到底在什么情况下dns会使用迭代查询?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课