谁的锅?一个 ping 案例

简介:

昨天一个同事向我反馈了一个问题,虽然最后分析出和我们服务没关系,但我觉得特别有意义,特此分享给大家。当时反馈电信用户连接我们的 pop 服务有异常,听到问题后,在我的阿里云 ECS 上ping了下,正好发现连接到电信 vip,如下图:

106d0f6da36be9d3b8fef988d9faa91e1db18d7b

奇怪的是第一帧到第二帧之间特别慢(大概有15秒),但是 ping 命令整体显示的连接速度却很快,平均每一个ping的响应只有15ms,开始猜测是不是 ping 工具的内部工作机制导致的,ping 了下其他网站却非常快,不管三七二十一,先使用 tcpdump 抓个包,打算排除到 vip 的网络问题:

$ tcpdump -s 0 -i eth1 host 49.7.36.125 -w 11-17-ping1.pcap

关键输出如下:

886e50ac8ec161984134e3f7506d4ab7534843b5

可见每一对icmp包(ping背后就是icmp协议)的请求和响应非常快,基本排除了网络问题,但第2个包后15秒后才有第三个包,这让人感觉非常奇怪。

为了进一步寻找灵感,我运行了一个 strace 命令,如下:

$ strace -e trace=network -o 11-17-1.log -Tt ping pop3.sina.net -c 2

其中输出截图:

19bee48c5ccf9b2ae71b1559259674fab95e4e86

进一步验证每一对的icmp包请求响应是非常快的。但发现了一些奇怪的输出,如下图:

3849d49523a07a81fe447c0b32698df3f61bbd3c

虽然输出很多,但可以看出主要是 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 包

第二条命令输出很简单,如下图:

544e37d7db17edfeb602c79e8554ef18d549d3e9

说明 dig 解析 pop3.sina.net 非常快。

第一条命令输出很复杂,ping 内部在进行域名解析的时候遇到了很多问题。最后我将local dns 改为了 8.8.8.8,不管是ping还是dig,速度都非常快。

到底是谁的锅呢?阿里云local dns?公司 dns 服务器?ping 内部dns解析机制?可以一起讨论讨论。


原文发布时间为:2018-11-27

本文作者:虞大胆

本文来自云栖社区合作伙伴“高效运维”,了解相关信息可以关注“高效运维”。

相关文章
|
3月前
|
运维 网络协议 网络架构
百度搜索:蓝易云【比ping还好用的排障命令有哪些?】
这些命令可以提供更多详细的网络排障信息,帮助您诊断和解决网络问题。根据具体情况,您可以选择适当的命令来进行故障排查。请注意,使用这些命令可能需要适当的权限和网络访问权限。
46 0
|
8月前
|
网络协议 应用服务中间件 Linux
硬核图解!断网了,还能ping通 127.0.0.1 吗?为什么?
硬核图解!断网了,还能ping通 127.0.0.1 吗?为什么?
111 0
硬核图解!断网了,还能ping通 127.0.0.1 吗?为什么?
|
11月前
|
消息中间件 网络协议 JavaScript
面试官:断网了,还能 ping 通 127.0.0.1 吗? 上
面试官:断网了,还能 ping 通 127.0.0.1 吗? 上
|
11月前
|
网络协议 应用服务中间件 nginx
面试官:断网了,还能 ping 通 127.0.0.1 吗? 下
面试官:断网了,还能 ping 通 127.0.0.1 吗? 下
|
缓存 网络协议 Unix
【网络篇】第十八篇——ping的工作原理
【网络篇】第十八篇——ping的工作原理
【网络篇】第十八篇——ping的工作原理
热饭的测开成果盘点第二十三期:wqrfproxy自动抓包断言库
本期介绍的是一个组件,身为python的第三方库,已经被pypi收录,且国内镜像源也早已复制。也就是说可以通过pip install 来下载。这个组件就是:wqrfproxy ,它的作用是可以在正常的unittest脚本中,对app发出的请求进行断言。
热饭的测开成果盘点第二十三期:wqrfproxy自动抓包断言库
|
网络协议 网络架构
ICMP 是个啥破玩意?(三)
ICMP 的全称是 Internet Control Message Protocol(互联网控制协议),它是一种互联网套件,它用于IP 协议中发送控制消息。也就是说,ICMP 是依靠 IP 协议来完成信息发送的,它是 IP 的主要部分,但是从体系结构上来讲,它位于 IP 之上,因为 ICMP 报文是承载在 IP 分组中的,就和 TCP 与 UDP 报文段作为 IP 有效载荷被承载那样。
ICMP 是个啥破玩意?(三)
|
网络协议 网络架构
ICMP 是个啥破玩意?(一)
ICMP 的全称是 Internet Control Message Protocol(互联网控制协议),它是一种互联网套件,它用于IP 协议中发送控制消息。也就是说,ICMP 是依靠 IP 协议来完成信息发送的,它是 IP 的主要部分,但是从体系结构上来讲,它位于 IP 之上,因为 ICMP 报文是承载在 IP 分组中的,就和 TCP 与 UDP 报文段作为 IP 有效载荷被承载那样。
ICMP 是个啥破玩意?(一)
|
缓存 网络协议 网络架构
ICMP 是个啥破玩意?(二)
ICMP 的全称是 Internet Control Message Protocol(互联网控制协议),它是一种互联网套件,它用于IP 协议中发送控制消息。也就是说,ICMP 是依靠 IP 协议来完成信息发送的,它是 IP 的主要部分,但是从体系结构上来讲,它位于 IP 之上,因为 ICMP 报文是承载在 IP 分组中的,就和 TCP 与 UDP 报文段作为 IP 有效载荷被承载那样。
ICMP 是个啥破玩意?(二)