我已经与 BIND 打交道多年了,这个问题总是困扰着我。
$ dig google.com ns
;; QUESTION SECTION:
;google.com. IN NS
;; ANSWER SECTION:
google.com. 87046 IN NS ns3.google.com.
etc...
;; ADDITIONAL SECTION:
ns1.google.com. 87274 IN A 216.239.32.10
etc.
我明白,至少在理论上,根服务器处理 .,并将 .com.、.gov. 等移交给正确的服务器(尽管实际上所有这些都缓存在几级以下),但在某个时候,有人必须知道向 216.239.32.10 的服务器询问 whatever.google.com 的 A 记录。但是解析器首先是如何解决这个问题的,因为您需要知道 NS 的 A 才能做到这一点?(而且,既然我们知道它是 Internet NS,而不是 Chaos 之类的,为什么您必须使用名称而不是地址作为 NS 记录?)
我的名称服务器一直具有上游某人可以找到的名称(例如,我在 foo.com 上托管了 bar.com 的 DNS,而我的上游处理 foo.com),但我从未完全理解像 Google 这样的公司如何解决以 google.com 名称托管 google.com 的 DNS 的“先有鸡还是先有蛋”的问题。
答案1
我认为你正在努力理解的概念是胶水记录。
来自上面链接的文章:
例如,如果 example.org 的权威名称服务器是 ns1.example.org,则尝试解析 www.example.org 的计算机首先解析 ns1.example.org。由于 ns1 包含在 example.org 中,因此需要先解析 example.org,这会产生循环依赖关系。为了打破这种依赖关系,顶级域 org 的名称服务器除了 example.org 的委托外,还包含 glue。glue 记录是提供 ns1.example.org IP 地址的地址记录。解析器使用其中一个或多个 IP 地址来查询域的权威服务器之一,从而完成 DNS 查询。