Networking 为什么dig命令只返回google.com的一个IP地址?

Networking 为什么dig命令只返回google.com的一个IP地址?,networking,dns,nslookup,dig,Networking,Dns,Nslookup,Dig,正如我们所知,谷歌有不止一个IP地址。如果我们使用该网站,它会产生一个以上的谷歌IP地址 如果我运行以下命令,则场景不同: gyan@localhost:~/codes/java/net$ dig google.com ; <<>> DiG 9.10.3-P4-Ubuntu <<>> google.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opco

正如我们所知,谷歌有不止一个IP地址。如果我们使用该网站,它会产生一个以上的谷歌IP地址

如果我运行以下命令,则场景不同:

gyan@localhost:~/codes/java/net$ dig google.com

; <<>> DiG 9.10.3-P4-Ubuntu <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11777
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;google.com.            IN  A

;; ANSWER SECTION:
google.com.     269 IN  A   216.58.220.46

;; Query time: 0 msec
;; SERVER: 10.100.171.1#53(10.100.171.1)
;; WHEN: Fri Nov 04 16:18:07 IST 2016
;; MSG SIZE  rcvd: 55

gyan@localhost:~/codes/java/net$ 
gyan@localhost:~/codes/java/net$dig google.com
;  挖掘9.10.3-P4-Ubuntu google.com
;; 全局选项:+cmd
;; 得到答案:
;; ->>领班
正如我们所知,谷歌有不止一个IP地址

对。但这并不意味着客户需要了解其中的一个以上

在过去,为了执行负载平衡,服务使用多个IP地址响应DNS查询是很常见的。回复通常是随机的,这意味着客户机将从行为相同的服务器的大量地址池中获得几个地址的随机子集

基于DNS的负载平衡一直是个难题。由于缓存,它会出现问题:如果ISP的DNS解析器正在缓存回复,大量用户都会连接到这几个IP地址,从而降低负载平衡的效率。解决方法是降低记录的TTL,确保条目在缓存中停留一小段时间,然后执行新的查询。例如,对于您发布的挖掘输出中的amazon.com A记录,TTL设置为34秒

这种方法不太管用。减少TTL会进一步增加小型HTTP请求的延迟。DNS负载平衡的结果也有点不可预测,因为它不能保证服务器将统一处理负载

但是,如果您有一个在网络级别工作的负载平衡器(将其视为反向NAT箱:一个IP面向internet,将流量多路传输到其后面的大量服务器),它可以处理大量连接,并且具有良好的正常运行时间,那么就不需要在DNS级别进行负载平衡

因此,您连接的谷歌数据中心很可能不使用DNS负载平衡,而亚马逊数据中心则使用DNS负载平衡

另一个问题是,如果从工具箱中查询8.8.8.8,为什么会得到多个地址,而从机器中查询时只得到一个地址

首先,了解从工具箱进行查询时,发送DNS查询的是web服务器,而不是您的计算机,这一点很重要

DNS服务器不必向不同的客户端返回相同的回复。实际上,根据客户的地理位置返回不同的答复是很常见的:例如,如果欧洲的用户查询google.com,它将获得欧洲数据中心的IP地址,而不是美国

在这种情况下,我认为DNS地理定位用于某些客户端,而不用于其他客户端。这可能与发送查询的网络的大小以及网络负载平衡器的容量有关。例如,如果负载平衡器可以同时处理1000000个连接,并且您发送查询的网络具有100000个IP,则无需进行DNS负载平衡。但是,如果网络很大(在您的示例中,是运行工具箱的数据中心的大小),则网络负载平衡器可能无法处理它,因此启用DNS负载平衡,您可以从池中获得多个随机IP地址

注意:“网络”是指所有使用相同DNS解析程序的机器集


返回多个IP地址的另一个原因是执行基于DNS的故障切换。当其中一台机器停止工作时,客户端会尝试连接到另一台机器。但这不是执行故障切换的好方法,因为某些应用程序不存储所有IP地址(尽管我认为大多数浏览器都存储)同样,DNS缓存也会成为阻碍。

对两个不同域的DNS查找肯定会有所不同;不过,这可能是您正在寻找的:)我不知道他们的工具箱。非常有用!您确定Web服务器发送的是DNS查询,而不是您的计算机。通常我们在书中阅读。这台计算机需要请求DNS服务器解析ip地址。
gyan@localhost:~/codes/java/net$ dig amazon.com

; <<>> DiG 9.10.3-P4-Ubuntu <<>> amazon.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55090
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;amazon.com.            IN  A

;; ANSWER SECTION:
amazon.com.     34  IN  A   54.239.26.128
amazon.com.     34  IN  A   54.239.17.7
amazon.com.     34  IN  A   54.239.25.192
amazon.com.     34  IN  A   54.239.25.208
amazon.com.     34  IN  A   54.239.25.200
amazon.com.     34  IN  A   54.239.17.6

;; Query time: 74 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Fri Nov 04 16:23:17 IST 2016
;; MSG SIZE  rcvd: 135

gyan@localhost:~/codes/java/net$