我在任何地方都没有找到这个问题的答案,有点困惑...我想知道根DNS服务器是按循环查询还是递归查询的方式进行查询? 就我对该主题的理解来说,它们可以被递归地查询,因为它们是解决名称的“最后选择”,所以必须以IP地址/错误消息回答。我正确吗?请明确给我解释一下。谢谢。
无论查询哪个 DNS 服务器,无论它是不是根服务器,都会得到该服务器允许提供关于已知名称的信息。这意味着如果您查询一个服务器所不知道的名称,但它知道某些信息,则它会将您引荐到下一个可以询问的地方。
假设您需要找出 www.example.com
的位置。 如果您使用 bind 包中的 dig 实用程序查询根服务器以获取答案并查看其将告诉您什么:
# dig @b.root-servers.net. www.example.com a
;; QUESTION SECTION:
;www.example.com. IN A
;; AUTHORITY SECTION:
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
; [...11 more authority servers for .com not shown...]
;; ADDITIONAL SECTION:
h.gtld-servers.net. 172800 IN A 192.54.112.30
d.gtld-servers.net. 172800 IN A 192.31.80.30
; [...11 more IP addresses for .com not shown...]
上述响应的效果是根服务器告诉你,“我不知道www.exmaple.com在哪里。接下来,您需要去问.com,它在以下地址列表中。” # dig @h.gtld-servers.net. www.example.com a
;; QUESTION SECTION:
;www.example.com. IN A
;; AUTHORITY SECTION:
example.com. 172800 IN NS a.iana-servers.net.
example.com. 172800 IN NS b.iana-servers.net.
;; ADDITIONAL SECTION:
a.iana-servers.net. 172800 IN A 199.43.132.53
a.iana-servers.net. 172800 IN AAAA 2001:500:8c::53
b.iana-servers.net. 172800 IN A 193.0.0.236
b.iana-servers.net. 172800 IN AAAA 2001:610:240:2::c100:ec
这个答案进一步帮助你,建议你去问example.com的所有者。向他们提问最终会得到你正在寻找的真正答案:
# dig @a.iana-servers.net. www.example.com a
;; ANSWER SECTION:
www.example.com. 172800 IN A 192.0.32.10
最后,我们有了一个愿意给我们真正答案的服务器。
然而请注意,我们依次向每个服务器发出请求,从根开始一步步往下走。在每一步中,有人要么说“我有答案”,要么说“我没有答案,但我知道你应该去找谁”。