谁的锅?一个 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

本文作者:虞大胆

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

相关文章
|
SQL 分布式计算 运维
开源大数据 OLAP 引擎最佳实践 | 学习笔记(二)
快速学习开源大数据 OLAP 引擎最佳实践
开源大数据 OLAP 引擎最佳实践 | 学习笔记(二)
|
3月前
|
数据采集 缓存 监控
API使用全攻略:3步搞定跨境电商自动化,新手也能日省5小时!
2024年电商运营已进入自动化时代!告别手动搬砖,利用电商API实现商品信息抓取、订单同步、物流计算等自动化操作,零代码基础也能快速上手,每天节省5小时,利润提升30%。本文详解API使用三步法、高阶玩法如动态定价、物流优化及避坑指南,助你高效运营,轻松盈利。
|
Java Linux 开发工具
linux如何编译安装源码包软件
源码包软件是包含源代码的软件包,常见于Linux和BSD系统,如fcitx和Lumaqq。开源软件需满足源代码可见且有宽松许可,如GPL。安装源码包通常涉及解压、编译和安装步骤,使用`tar`命令解包,通过`./configure`, `make`, `make install`进行编译安装。软件源码允许定制和二次开发,但须遵循许可协议。安装前确保安装了必要的开发工具和库。对于perl和python程序,直接使用perl或python命令安装。推荐使用系统软件包管理工具如RPM、yum或apt进行管理,以简化流程。
373 0
|
缓存 Linux 调度
CPU 隔离:Nohz_full
SUSE Labs 团队探索了 Kernel CPU 隔离及其核心组件之一:Full Dynticks(或 Nohz Full),并撰写了本系列文章.
1779 0
CPU 隔离:Nohz_full
|
12月前
|
存储 人工智能 供应链
AI与能源系统:优化能源生产和消费
【10月更文挑战第9天】在当前全球能源转型的关键时期,人工智能(AI)正逐渐成为推动能源系统优化与升级的重要力量。本文探讨了AI在能源生产、分配、存储和消费等方面的应用。在能源生产中,AI通过智能预测与调度、故障预警及优化资源配置等方式提升效率;在能源分配与存储方面,AI推动智能电网管理和储能系统优化;在能源消费端,AI实现精细化管理,如智能家庭能源管理和工业节能。未来,AI将进一步融入能源系统的各个环节,促进能源的高效配置与可持续发展。然而,面对数据安全和算法透明度等挑战,需加强监管与伦理审查,确保AI技术健康发展。
|
人工智能 小程序 前端开发
小程序二手商城|使用Springboot+vue+微信小程序开发校园二手商城系统
本项目基于Springboot+vue+微信小程序实现了一个校园二手物品商城交易系统。系统的后台使用springboot+mybatis开发实现,后台管理页面使用Vue+ElementUI开发实现,用户端基于微信小程序开发实现。前端用户使用微信登录小程序后,可以在线浏览二手商品,并在线购买下单和评论等,同时自己也可以发布相应的二手商品,并管理自己的订单信息和销售信息。管理员登录后台管理系统可以管理人员、商品分类、商品、订单等相关信息。具体见下面展示。
508 0
|
Linux 调度 Docker
Linux中的cgroup技术
【8月更文挑战第2天】cgroup (control group) 是 Linux 内核提供的资源管理机制,用于控制进程资源使用。它包含多个子系统,如 CPU、cpuacct、cpuset、memory、blkio、devices、net_cls 和 freezer,分别用于限制 CPU 使用率、统计 CPU 使用、分配 CPU 或内存节点、限制内存使用、限制块设备 I/O、控制设备访问、标记网络数据包和挂起或恢复进程。
|
缓存
通过memcg触发oom
通过memcg触发oom
|
域名解析 编解码 负载均衡
【域名解析DNS专栏】域名解析中的EDNS扩展:提升DNS协议灵活性
【5月更文挑战第27天】EDNS(Extension Mechanisms for DNS)是为了解决传统DNS协议在复杂网络环境下的灵活性和扩展性问题而诞生的技术。它允许在DNS请求和响应中添加额外选项,提高查询效率,支持更大数据范围,增强安全性,并实现负载均衡和故障转移。通过在DNS消息中包含EDNS部分,客户端和服务器能交换更多信息,实现更复杂的逻辑。EDNS的使用示例代码展示了如何在Python中创建和处理EDNS选项。随着技术进步,EDNS将在域名解析领域扮演更重要角色。
457 1
|
消息中间件 Go API
Golang深入浅出之-Go语言中的微服务架构设计与实践
【5月更文挑战第4天】本文探讨了Go语言在微服务架构中的应用,强调了单一职责、标准化API、服务自治和容错设计等原则。同时,指出了过度拆分、服务通信复杂性、数据一致性和部署复杂性等常见问题,并提出了DDD拆分、使用成熟框架、事件驱动和配置管理与CI/CD的解决方案。文中还提供了使用Gin构建HTTP服务和gRPC进行服务间通信的示例。
792 0