我正在使用 nslookup 并试图找出权威和非权威响应之间的区别。这两个响应似乎是一致的(如果您多次运行该命令,它们会给出相同的答案)。
正常 nslookup 调用
$ nslookup google.com
Server: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
Name: google.com
Address: 72.14.213.104
Name: google.com
Address: 72.14.213.105
Name: google.com
Address: 72.14.213.106
Name: google.com
Address: 72.14.213.147
Name: google.com
Address: 72.14.213.99
Name: google.com
Address: 72.14.213.103
Nslookup 使用 google 权威服务器
$ nslookup google.com ns1.google.com
Server: ns1.google.com
Address: 216.239.32.10#53
Name: google.com
Address: 74.125.225.19
Name: google.com
Address: 74.125.225.20
Name: google.com
Address: 74.125.225.16
Name: google.com
Address: 74.125.225.17
Name: google.com
Address: 74.125.225.18
知道为什么这些不同吗?这些应该给出不同的响应吗?
当我 ping google.com 时,它显示 72.14.213.104,并且 RTT 是 ping 74.125.225.19 的 RTT 的 1/3。
有人能解释一下吗?
答案1
Google 会尝试返回距离请求者最近的服务器的 IP 地址。在第一种情况下,您的名称服务器正在发出请求。在第二种情况下,您的 PC 正在发出请求。
权威与非权威的信息与此无关。
答案2
- 标记为“非权威”的回复只是名称服务器通知您,结果不是为您的请求唯一检索的,而是作为先前请求的一部分缓存的(为您或另一个客户端)。此外,由于您的第一个示例直接命中 192.168.1.1 而不是您的 ISP 的名称服务器,因此您的路由器可能还实现了另一层缓存。
- Google.com 由数百个不同数据中心的数千台服务器提供服务。他们的 DNS 服务器试图为您提供地理定位地址。无法保证它会是延迟最低、吞吐量最高或响应速度最快的服务器,只能是将这三者考虑在内的最佳猜测。此外,由于 ns1.google.com 并非设计为面向客户的 DNS 名称服务器(如您的 ISP 的 DNS 或Google 公共 DNS) 谁知道回复您的请求时使用的逻辑。
基本上,除非您的网络连接异常(高延迟/低吞吐量/高数据包丢失)或 ISP 的 DNS 响应非常慢,否则我建议您不要对 DNS 进行微观管理;这不值得付出努力。在这种情况下,ISP 的 DNS 服务器无论如何都会为您提供更好(最佳?)的结果。
答案3
权威答案应直接来自域的名称服务器之一。非权威答案可以来自任何有答案的服务器。除非配置最近发生更改,否则答案将保持不变。
请求可以指定它们需要权威答案。这些可能需要额外的查找,因为必须联系权威服务器。进行更改时,可能会从不同的权威服务器获得不同的答案。序列号最高的答案应该是最新的答案。(在极少数情况下,序列号被重置,情况并非如此。)
非权威性答案应由第一个联系的有答案的服务器回答。这是最快的响应。这些答案对于大多数用途来说已经足够了。
像 Google 这样的服务是一个特殊情况。它们使用特殊服务器,根据您的位置提供不同的答案。它们还可能进行负载平衡。这两种方式都会随着时间的推移产生不同的答案。缓存的(非权威)答案可能会更旧,并反映缓存结果时的首选服务器。
Google 会尝试将您引导至与您所在位置连接性最好的服务器。这些服务器的 RTT 应低于其他位置的其他 Google 服务器。
答案4
这维基百科条目DNS 上的解释很好:
权威名称服务器是提供由原始来源(例如域管理员)或动态 DNS 方法配置的答案的名称服务器,与通过对另一个名称服务器的常规 DNS 查询获得的答案不同。
至于 ping 差异,这就像你说“当我从纽约去华盛顿特区时,它只花费去波特兰所需时间的十分之一”。这些地址完全不同,因此它们可能相距很远。
这适用于 IP 地址和地理地址。