我目前正在研究一个网络模块,一些课程涉及 ping 不同的网站以调查往返时间。我在做这件事时注意到一些有趣的事情,这让我感到困惑并寻求解释。如果我输入ping -4 google.com
,RTT 与我输入 时有显著不同ping -4 www.google.com
。我觉得特别奇怪的是,时间不是每次都更快或更慢;有时更快,有时更慢。为什么会这样?
答案1
答案其实很简单:同名 != 同主机。Google 使用基于 DNS 的负载平衡。只需使用合适的 DNS 客户端即可查看发生了什么:
$ dig www.google.com @8.8.4.4
; <<>> DiG 9.11.1-P3 <<>> www.google.com @8.8.4.4
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19808
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.google.com. IN A
;; ANSWER SECTION:
www.google.com. 45 IN A 172.217.21.228
;; Query time: 13 msec
;; SERVER: 8.8.4.4#53(8.8.4.4)
;; WHEN: Sat Oct 28 22:19:15 CEST 2017
;; MSG SIZE rcvd: 59
回复的生存时间 (TTL) 非常短:仅 45 秒。果然,过了这段时间,出现了一个不同的 IP 地址:
$ dig www.google.com @8.8.4.4
; <<>> DiG 9.11.1-P3 <<>> www.google.com @8.8.4.4
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47841
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.google.com. IN A
;; ANSWER SECTION:
www.google.com. 299 IN A 216.58.206.4
;; Query time: 14 msec
;; SERVER: 8.8.4.4#53(8.8.4.4)
;; WHEN: Sat Oct 28 22:19:40 CEST 2017
;; MSG SIZE rcvd: 59
再次强调,TTL 非常短:5 分钟。由于 TTL 如此短,您测试内容的时间可能比缓存的 DNS 回复过期所需的时间更长。
www.
当然,对于带有或不带有其他子域(例如maps.
或或其他)的查询也是如此mail.
。对于这些,您更有可能得到不同的答复,因为您询问的是不同的名称。