今天早上,我的笔记本电脑出现了一个奇怪的网络问题。如果我ping
从命令行(Xubuntu 19.04)使用,则名称查找阶段会异常缓慢,而实际的 ICMP 数据包 ping 工作正常。
$ ping cnn.com # nothing happens for 5 seconds after hitting ENTER
PING cnn.com (151.101.193.67) 56(84) bytes of data.
64 bytes from 151.101.193.67 (151.101.193.67): icmp_seq=1 ttl=55 time=27.6 ms
64 bytes from 151.101.193.67 (151.101.193.67): icmp_seq=2 ttl=55 time=40.1 ms
如果我直接 ping IP 地址,那么一切都会很快。
我的/etc/resolv.conf
已nameserver 8.8.8.8
作为第一项。
如果我这样做,dig @8.8.8.8 cnn.com
我会很快得到答复!
tcpdump
当我尝试这样做时,我发现了一个令人费解的现象ping cnn.com
:
$ sudo tcpdump -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlp1s0, link-type EN10MB (Ethernet), capture size 262144 bytes
08:04:54.005650 IP 192.168.43.147.54944 > 8.8.8.8.53: 9634+ A? cnn.com. (25)
08:04:54.005669 IP 192.168.43.147.54944 > 8.8.8.8.53: 9387+ AAAA? cnn.com. (25)
08:04:54.130322 IP 8.8.8.8.53 > 192.168.43.147.54944: 9387 4/0/0 AAAA 2a04:4e42:200::323, AAAA 2a04:4e42::323, AAAA 2a04:4e42:600::323, AAAA 2a04:4e42:400::323 (137)
08:04:59.010696 IP 192.168.43.147.54944 > 8.8.8.8.53: 9634+ A? cnn.com. (25)
08:04:59.197233 IP 8.8.8.8.53 > 192.168.43.147.54944: 9634 4/0/0 A 151.101.193.67, A 151.101.65.67, A 151.101.129.67, A 151.101.1.67 (89)
08:04:59.197424 IP 192.168.43.147.54944 > 8.8.8.8.53: 9387+ AAAA? cnn.com. (25)
08:04:59.250245 IP 8.8.8.8.53 > 192.168.43.147.54944: 9387 4/0/0 AAAA 2a04:4e42:600::323, AAAA 2a04:4e42:400::323, AAAA 2a04:4e42::323, AAAA 2a04:4e42:200::323 (137)
08:04:59.251266 IP 192.168.43.147 > 151.101.193.67: ICMP echo request, id 21287, seq 1, length 64
08:04:59.286265 IP 151.101.193.67 > 192.168.43.147: ICMP echo reply, id 21287, seq 1, length 64
因此看起来 DNS 查询大约需要 5 秒,第一个查询返回 IPv6,显然被忽略了,然后是另一个请求,这次带有 IPv4 答案,另一个请求,再次是 IPv6,最后是用于实际 ping 的 ICMP 数据包。
有人知道这里发生了什么事吗?