我没有在任何地方找到这个问题的答案,我有点困惑..我想知道是否迭代地或递归地查询根DNS服务器? 就我对该主题的理解而言,它们可以递归地查询,因为它们是恢复名称的“最后一个选项”,因此它们必须回答IP地址/错误消息。我对么?请为我说清楚。感谢。
答案 0 :(得分:17)
对任何DNS服务器的查询,无论它们是否是根服务器,都会收到服务器可以提供的有关他们所知道的名称的信息。这意味着如果你在服务器上查询一个它不知道的名字,但它确实知道谁拥有它的一部分,它会引导你到下一个要问的地方。
让我们说你需要找出www.example.com
的位置。如果您使用绑定包中的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 它位于以下地址列表中。
所以关闭你要求.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
最后我们有一台愿意给我们真实的服务器 答案。
但是,请注意,我们从根开始依次询问每个服务器 然后往下走在每一步,有人说“我有答案” 或者“我没有答案,但我知道你应该和谁谈谈”。
答案 1 :(得分:5)
递归服务器(即为最终用户客户端提供服务的服务器)对权威服务器执行迭代查询。
对于这些迭代查询,从根目录开始链中的每个权威服务器将返回答案如果它对该域具有权威性,或者引用 可能的链中的下一个服务器有答案。
根名称服务器不提供完全递归服务,只引用每个TLD运行的名称服务器。