接受的DNS根服务器查询请求

4

我在任何地方都没有找到这个问题的答案,有点困惑...我想知道根DNS服务器是按循环查询还是递归查询的方式进行查询? 就我对该主题的理解来说,它们可以被递归地查询,因为它们是解决名称的“最后选择”,所以必须以IP地址/错误消息回答。我正确吗?请明确给我解释一下。谢谢。

2个回答

20

无论查询哪个 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,它在以下地址列表中。”
于是你会前往问.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

最后,我们有了一个愿意给我们真正答案的服务器。

然而请注意,我们依次向每个服务器发出请求,从根开始一步步往下走。在每一步中,有人要么说“我有答案”,要么说“我没有答案,但我知道你应该去找谁”。


6
递归服务器(即为终端用户客户端提供服务的服务器)对权威服务器执行迭代查询。
作为对这些迭代查询的响应,从根节点开始的每个权威服务器将返回答案(如果它对该域名有授权),或者是一个指向下一级可能有答案的服务器的引用。
根域名服务器不提供完全递归服务,只提供对每个顶级域名运行的名称服务器的引用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接