我有一个假设情况,但一直找不到真正的答案。假设我们有一台从未上网过的计算机。该计算机还处于没有提供 DNS 服务的网络上。让我们假设谷歌公共 DNS 之类的东西不存在。
现在我们假设这台计算机唯一拥有的是根 DNS 服务器的名称和解析地址,就像这样。
现在这台计算机想知道 superuser.com 的 IP 地址。如果只拥有根服务器的 IP 地址,计算机如何查询根服务器以最终获得 superuser.com 的已解析 A 记录?
我尝试过,但总是会遇到一个需要使用我所知道的现有 DNS 服务器来解析 A 记录。例如,如果我打开命令提示符并开始尝试解析 google.ca(针对根服务器),我最终会得到:
服务方:
ns1.google.com
google.ca
ns2.google.com
google.ca
... 等等等等。所以基本上在这一点上,我必须解析 nsX.google.com 才能查询它以获取 google.ca 的 A 记录,但是,考虑到这种情况,我没有可以查询 nsX.google.com 地址的服务器。如果我尝试从根服务器解析 ns1.google.com,我最终会回到同一个地方。
简短版本:除了根服务器提供的信息外,我该如何解析域名的 A 记录而不使用任何其他信息?提前致谢。:)
答案1
你的情况一点也不罕见;每次启动一个功能齐全的递归解析器 - 例如 BIND9 或 Unbound,甚至是我在笔记本电脑上运行的副本 - 它都只从根区域“提示”列表开始,然后自行从那里下降。
(您说“想象一个没有 Google 公共 DNS 的世界”。有没有想过 Google 公共 DNS本身解析所有域名?
但对 DNS 查询的回复可能不仅仅是直接回答。具体来说,如果域的权威名称服务器在同一个域名,那么它们的地址副本(又称粘合记录)也将由父域名保存。
com.
因此,当您向名称服务器查询 时www.google.com
,它们不仅会说它由 托管,还会在同一回复消息中ns1.google.com
为您提供 的 IP 地址!ns1.google.com
事实上,你应该早就知道这一点了,使用com.
顶级域名。当你查询根域名服务器时,它们会告诉你,所有的域名com.
都托管在m.gtld-servers.net.
和他们会给你它的 IP 地址。你可以自己看看根区域文件保存此信息。
例如:
$ dig@198.41.0.4 www.google.com. A ;; 操作码:QUERY,状态:NOERROR,id:61096 ;; 标志: qr rd; 查询: 1,答案: 0,授权:13,附加:16 ;; 问题部分: ;www.google.com。在 ;; 权威部分: com. 172800 IN NS m.gtld-servers.net。 com. 172800 IN NS l.gtld-servers.net。 com. 172800 IN NS k.gtld-servers.net。 ... ;; 附加部分: m.gtld-servers.net.172800 位于 192.55.83.30 l.gtld-servers.net.172800 位于 192.41.162.30 k.gtld-servers.net.172800 位于 192.52.178.30 ...
继续使用其中一个com.
名称服务器:
$ dig@192.55.83.30 www.google.com. A ;; 操作码:QUERY,状态:NOERROR,id:46406 ;; 标志: qr rd; 查询: 1,答案: 0,权限:4,附加:5 ;; 问题部分: ;www.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
继续使用其中一个google.com.
名称服务器:
$ dig@216.239.34.10 www.google.com. A ;; 操作码:QUERY,状态:NOERROR,id:7744 ;; 标志: qr氨基酸第 rd;查询:1,答案:5,权限:0, 附加:0 ;; 问题部分: ;www.google.com。在 ;; 答案部分: www.google.com.300 IN A 173.194.32.50 www.google.com.300 IN A 173.194.32.49 www.google.com.300 IN A 173.194.32.52 www.google.com.300 IN A 173.194.32.48 www.google.com.300 IN A 173.194.32.51
aa
我们最终收到了针对我们要求的同一名称的权威答复( )。