昨天一个同事向我反馈了一个问题,虽然最后分析出和我们服务没关系,但我觉得特别有意义,特此分享给大家。当时反馈电信用户连接我们的 pop 服务有异常,听到问题后,在我的阿里云 ECS 上ping了下,正好发现连接到电信 vip,如下图:
奇怪的是第一帧到第二帧之间特别慢(大概有15秒),但是 ping 命令整体显示的连接速度却很快,平均每一个ping的响应只有15ms,开始猜测是不是 ping 工具的内部工作机制导致的,ping 了下其他网站却非常快,不管三七二十一,先使用 tcpdump 抓个包,打算排除到 vip 的网络问题:
$ tcpdump -s 0 -i eth1 host 49.7.36.125 -w 11-17-ping1.pcap
关键输出如下:
可见每一对icmp包(ping背后就是icmp协议)的请求和响应非常快,基本排除了网络问题,但第2个包后15秒后才有第三个包,这让人感觉非常奇怪。
为了进一步寻找灵感,我运行了一个 strace 命令,如下:
$ strace -e trace=network -o 11-17-1.log -Tt ping pop3.sina.net -c 2
其中输出截图:
进一步验证每一对的icmp包请求响应是非常快的。但发现了一些奇怪的输出,如下图:
虽然输出很多,但可以看出主要是 DNS 解析花了很长时间,其中 10.202.72.118 和 10.202.72.116 是阿里云的 local DNS,也就是说 ping pop3.sina.net 的时候,需要通过 local DNS 解析出它的 ip 地址 49.7.36.125。
为了进一步验证是 DNS 解析的问题,我又运行了下列命令:
$ strace -e trace=network -o 11-17-2.log -Tt ping 49.7.36.125 -c 2
输出非常快速,而且输出的内容也非常少(去除了很多 DNS 网络调用),从而进一步确认了 DNS 解析的问题,那是阿里云 local DNS 的问题还是我们公司 DNS 域名服务器的问题?我又测试了下:
$ strace -e trace=network -o 11-17-3.log -Tt ping www.baidu.com -c 2
运行非常快速,说明是公司 DNS 域名服务器的问题?还是 ping 内部工作机制的问题?我又单独运行了两个命令,主要抓取 DNS 解析:
$ tcpdump -s 0 -i eth0 port 53 -w 11-17-dns2.pcap #抓 ping pop3.sina.net 包
$ tcpdump -s 0 -i eth0 port 53 -w 11-17-dns3.pcap #抓 dig -t a pop3.sina.net 包
第二条命令输出很简单,如下图:
说明 dig 解析 pop3.sina.net 非常快。
第一条命令输出很复杂,ping 内部在进行域名解析的时候遇到了很多问题。最后我将local dns 改为了 8.8.8.8,不管是ping还是dig,速度都非常快。
到底是谁的锅呢?阿里云local dns?公司 dns 服务器?ping 内部dns解析机制?可以一起讨论讨论。
原文发布时间为:2018-11-27
本文作者:虞大胆