简洁版本:
在哪里可以host -t ns github.com
得到答案?
长版本:
在幻灯片 7 中这是谷歌幻灯片,最后两站:如果“x.root-servers.net”不知道域名,它会向“权威名称服务器”询问。问题是谁将“权威名称服务器”(信息,又名 IP)告知根服务器?
我确实读过相关文章,但我还是不知道答案。
我知道whois
查找将获取域名的信息(包括名称服务器),这是路由器获取“权威名称服务器”信息的方式吗?
哪个服务器存储着权威名称服务器的信息?域名注册商的服务器吗?
已编辑:
我不明白你们(专家)为什么认为这是题外话。我读过(又读了一遍)Serverfault的FAQ,并不认为这是题外话。它确实说你可以问有关“网络路由、交换机和防火墙”的问题。
我不需要有关整个 dns-loopup 路由的所有教育内容,但只是不明白一个步骤 - 权威服务器信息保存在哪里。如果这不是询问这个问题的地方,我应该去哪里?SO.com?
编辑2:
- 更新了标题
- 已从 oo 获得答案:gTLD 服务器保存数据。
答案1
希望这对你来说会更清楚一些,尽管它有点冗长。
幻灯片的这一部分略有错误——根服务器不会代表您向任何其他服务器请求记录。在该示例中,所有繁重的工作均由 Google 的 8.8.8.8 服务器完成
为了更好地解释这一点,您首先需要了解权威 DNS 服务器和递归 DNS 服务器之间的区别。
权威 DNS 与递归 DNS
权威 DNS 服务器只会针对其托管的记录做出响应。如果您尝试向权威服务器请求不属于其负责的记录,它会告诉您“否”(拒绝)或告诉您查找位置(无错误,以及 DNS 数据包的 AUTHORITY 部分中的服务器列表)。
递归 DNS 服务器(例如您的 Linksys、您的 ISP、Google 的 8.8.8.8 等)将尽最大努力遵循 DNS 服务器引用链,直到它能够到达权威服务器以获取答案。这也称为“DNS 递归”。
根服务器和引荐
根服务器(x.root-servers.net)充当 DNS 树顶端的权威 DNS 服务器(.),它告诉请求者应该寻找的下一个 DNS 服务器是什么。
通常,根服务器会将您引导至相关 TLD 的 gTLD 服务器(.com、.net、.org 等)。
域名注册商和 gTLD 服务器
当您注册域名时,您需要输入一组 DNS 服务器(或使用您的注册商自己的服务器)。
在域名注册(或更新)时,您的域名注册商会向相应的通用顶级域名服务器(或 gTLD 服务器)发送更新,这些服务器负责提供相关 TLD 的推荐(.com、.net、.org、.uk 等)。
更新内容基本上是说“嘿,将来,每当有人询问 github.com 时,请让他们参考 ns1.p16.dynect.net、ns2.p16.dynect.net、ns3.p16.dynect.net 和 ns4.p16.dynect.net”。
gTLD 服务器将保留此信息,直到注册商对其进行更改。
查询:从根域名到 gTLD,再到 Github
当你向 a.root-servers.net 询问“www.github.com”(“dig www.github.com @a.root-servers.net”)时,它的响应是:
“我对 github.com 的具体情况不太了解,但我可以告诉你,这些 .com 的 DNS 服务器中的任何一个都可以给你更好的答案”。
$ dig www.github.com @a.root-servers.net
; <<>> DiG 9.8.3-P1 <<>> www.github.com @a.root-servers.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52400
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 13, ADDITIONAL: 14
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;www.github.com. IN A
;; AUTHORITY SECTION:
com. 172800 IN NS m.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS a.gtld-servers.net.
;; ADDITIONAL SECTION:
m.gtld-servers.net. 172800 IN A 192.55.83.30
l.gtld-servers.net. 172800 IN A 192.41.162.30
k.gtld-servers.net. 172800 IN A 192.52.178.30
j.gtld-servers.net. 172800 IN A 192.48.79.30
i.gtld-servers.net. 172800 IN A 192.43.172.30
h.gtld-servers.net. 172800 IN A 192.54.112.30
g.gtld-servers.net. 172800 IN A 192.42.93.30
f.gtld-servers.net. 172800 IN A 192.35.51.30
e.gtld-servers.net. 172800 IN A 192.12.94.30
d.gtld-servers.net. 172800 IN A 192.31.80.30
c.gtld-servers.net. 172800 IN A 192.26.92.30
b.gtld-servers.net. 172800 IN A 192.33.14.30
b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30
a.gtld-servers.net. 172800 IN A 192.5.6.30
;; Query time: 17 msec
;; SERVER: 198.41.0.4#53(198.41.0.4)
;; WHEN: Sun Sep 28 05:38:56 2014
;; MSG SIZE rcvd: 492
现在,您有了一个可以告诉您有关 .com 域名的服务器列表。接下来,当您询问其中一个被引荐的 gTLD 服务器(“dig www.github.com @a.gtld-servers.net”)时,它的响应是:
“我对 www.github.com 不太了解,但我可以告诉你,github.com 的任何一个服务器都可以给你更好的答案”。
$ dig www.github.com @a.gtld-servers.net
; <<>> DiG 9.8.3-P1 <<>> www.github.com @a.gtld-servers.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9895
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 4
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;www.github.com. IN A
;; AUTHORITY SECTION:
github.com. 172800 IN NS ns1.p16.dynect.net.
github.com. 172800 IN NS ns3.p16.dynect.net.
github.com. 172800 IN NS ns2.p16.dynect.net.
github.com. 172800 IN NS ns4.p16.dynect.net.
;; ADDITIONAL SECTION:
ns1.p16.dynect.net. 172800 IN A 208.78.70.16
ns3.p16.dynect.net. 172800 IN A 208.78.71.16
ns2.p16.dynect.net. 172800 IN A 204.13.250.16
ns4.p16.dynect.net. 172800 IN A 204.13.251.16
;; Query time: 43 msec
;; SERVER: 192.5.6.30#53(192.5.6.30)
;; WHEN: Sun Sep 28 05:40:14 2014
;; MSG SIZE rcvd: 182
最后,当你询问你被引导到的指定服务器之一(“dig www.github.com @ns1.p20.dynect.net”)时,它的响应是:
“哦,是的!我知道这个,www.github.com 是 github.com 的昵称,github.com 的 IP 地址是 192.30.252.129”。
dig www.github.com @ns1.p16.dynect.net
; <<>> DiG 9.8.3-P1 <<>> www.github.com @ns1.p16.dynect.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35620
;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 4, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;www.github.com. IN A
;; ANSWER SECTION:
www.github.com. 3600 IN CNAME github.com.
github.com. 30 IN A 192.30.252.128
;; AUTHORITY SECTION:
github.com. 86400 IN NS ns3.p16.dynect.net.
github.com. 86400 IN NS ns1.p16.dynect.net.
github.com. 86400 IN NS ns4.p16.dynect.net.
github.com. 86400 IN NS ns2.p16.dynect.net.
;; Query time: 25 msec
;; SERVER: 208.78.70.16#53(208.78.70.16)
;; WHEN: Sun Sep 28 05:57:19 2014
;; MSG SIZE rcvd: 148
递归 DNS 服务器负责遍历此引用链,直到得到答案并返回给您。这通常是您的 ISP 的 DNS 服务器为您执行的操作。
您的浏览器(或您正在使用的任何应用程序)会等待递归 DNS 服务器完成所有繁重的工作并向您返回单个答案。所有这一切往往在很短的时间内发生,以毫秒为单位 - 如果递归 DNS 服务器的缓存中已有答案,则速度会更快。