关于 DNS 协议的快速问题,我不太理解。我们以一个网站为例,比如 google.com。我在浏览器中输入地址。
DNS 解析器将检查根服务器,即 GTLD 服务器。如果我理解正确的话,它会说“嘿,检查 nsX.google.com 以获取答案”。
但是在这种情况下,如果答案由 nsX.google.com 服务器自己掌握,解析器如何知道 nsX.google.com 的 IP 呢?
disco:~ Disco$ dig +trace ns1.google.com
; <<>> DiG 9.6.0-APPLE-P2 <<>> +trace ns1.google.com
;; global options: +cmd
. 50181 IN NS j.root-servers.net.
[...]
. 50181 IN NS a.root-servers.net.
;; Received 449 bytes from 192.168.1.1#53(192.168.1.1) in 55 ms
com. 172800 IN NS a.gtld-servers.net.
[...]
com. 172800 IN NS m.gtld-servers.net.
;; Received 495 bytes from 199.7.83.42#53(l.root-servers.net) in 165 ms
google.com. 172800 IN NS ns2.google.com.
google.com. 172800 IN NS ns1.google.com.
google.com. 172800 IN NS ns3.google.com.
google.com. 172800 IN NS ns4.google.com.
;; Received 164 bytes from 192.31.80.30#53(d.gtld-servers.net) in 219 ms
ns1.google.com. 345600 IN A 216.239.32.10
;; Received 48 bytes from 216.239.32.10#53(ns1.google.com) in 70 ms
谢谢。
答案1
这种明显的循环依赖性可以通过使用所谓的“粘合”记录来解决。
看这个答案。
答案2
您有权威服务器(在其上定义区域),但根服务器知道哪些域在哪些服务器上注册。
简而言之,您从 a.gtld-servers.net 获得“ns1.google.com 在哪里”:
$ dig @a.gtld-servers.net.ns1.google.com ;<<>> DiG 9.6.1 <<>> @a.gtld-servers.net.ns1.google.com ;(找到 2 个服务器) ;; 全局选项: +cmd ;; 得到答案: ;; ->>HEADER<<- 操作码:QUERY,状态:NOERROR,id:19654 ;; 标志:qr rd;查询:1,答案:0,权限:4,附加:4 ;; 警告:请求递归但不可用 ;; 问题部分: ;ns1.google.com。在 ;; 权威部分: google.com。172800 IN NS ns2.google.com。 google.com。172800 IN NS ns1.google.com。 google.com。172800 IN NS ns3.google.com。 google.com。172800 IN NS ns4.google.com。 ;; 附加部分: ns2.google.com.172800 在 216.239.34.10 ns1.google.com.172800 IN A 216.239.32.10 ns3.google.com.172800 在 216.239.36.10 ns4.google.com.172800 在 216.239.38.10 ;; 查询时间:139 毫秒 ;; 服务器:192.5.6.30#53(192.5.6.30) ;; 时间:2010 年 10 月 19 日星期二 09:39:25 ;; 收到的消息大小: 164