昨天一个同事向我反馈了一个问题, 虽然最后分析出和我们服务没关系, 但我觉得特别有意义, 特此分享给大家. 当时反馈电信用户连接我们的 pop 服务有异常, 听到问题后, 在我的阿里云 ECS 上 ping 了下, 正好发现连接到电信 vip, 如下图:
图 1
奇怪的是第一帧到第二帧之间特别慢(大概有 15 秒), 但是 ping 命令整体显示的连接速度却很快, 平均每一个 ping 的响应只有 15ms, 开始猜测是不是 ping 工具的内部工作机制导致的, ping 了下其他网站却非常快, 不管三七二十一, 先使用 tcpdump 抓个包, 打算排除到 vip 的网络问题:
$ tcpdump -s 0 -i eth1 host 49.7.36.125 -w 11-17-ping1.pcap
关键输出如下:
图 2
可见每一对 icmp 包 (ping 背后就是 icmp 协议) 的请求和响应非常快, 基本排除了网络问题, 但第 2 个包后 15 秒后才有第三个包, 这让人感觉非常奇怪.
为了进一步寻找灵感, 我运行了一个 strace 命令, 如下:
$ strace -e trace=network -o 11-17-1.log -Tt ping pop3.sina.NET -c 2
其中输出截图:
图 3
进一步验证每一对的 icmp 包请求响应是非常快的. 但发现了一些奇怪的输出, 如下图:
图 4
虽然输出很多, 但可以看出主要是 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 包
第二条命令输出很简单, 如下图:
图 5
说明 dig 解析 pop3.sina.NET 非常快.
第一条命令输出很复杂, ping 内部在进行域名解析的时候遇到了很多问题. 最后我将 local dns 改为了 8.8.8.8, 不管是 ping 还是 dig, 速度都非常快.
到底是谁的锅呢? 阿里云 local dns? 公司 dns 服务器? ping 内部 dns 解析机制?
来源: http://www.jianshu.com/p/39a2576ae47d