拓冰建站拓冰建站
首页 / 资讯中心 / 正文

网络丢包排查实战:ping命令从入门到精通

1. 从一次真实的网络故障说起上周三下午同事突然在群里喊了一句“网又卡了视频会议一直转圈”。我随手在终端敲了一行ping 192.168.1.1返回的结果里夹杂着几个Request timeout丢包率显示 8%。再ping一下公网地址丢包率飙到 20% 以上。问题基本锁定在本地链路或者出口这一段而不是对方服务器的问题。整个过程不到两分钟靠的就是ping这一个命令。很多人对ping的印象还停留在“测试网络通不通”实际上它能做的事情远比想象中多。网络丢包和ping 命令这两个词几乎是每个接触网络的人绕不开的基础。丢包是现象ping是诊断这个现象最直接、最轻量的工具。这篇文章我会从丢包的本质讲起把ping的每一个常用参数、每一种典型输出、每一类排查思路都拆开揉碎讲清楚。不管你是刚入行的运维、写代码时被网络问题卡住的开发还是只想搞明白家里 Wi-Fi 为什么老掉线的普通用户看完都能上手实操。我尽量不写成手册式的罗列而是按照我平时排查问题的真实顺序来组织先理解丢包是怎么回事再掌握ping的用法然后看怎么用ping定位问题最后是那些只有踩过坑才知道的细节。2. 网络丢包到底是什么为什么它比“断网”更烦人2.1 丢包的本质数据包在旅途中“失踪”了网络通信的本质是数据包从一台设备跳到另一台设备中间可能经过路由器、交换机、防火墙等一堆节点。每个数据包都带着源地址和目的地址像快递包裹一样被一站站转发。丢包就是这些包裹在某个环节被丢弃了没能到达终点。丢包和“断网”是两回事。断网是路彻底断了一个包都过不去丢包是路还在但时不时有包掉进沟里。这种“时通时不通”的状态最折磨人因为很多应用有重传机制少量丢包你可能只是感觉“卡了一下”但丢包率一高视频会议糊成马赛克、游戏人物瞬移、文件传输反复失败全都来了。从技术上说丢包发生在 OSI 模型的各个层都有可能。物理层可能是网线接触不良、光纤衰减过大数据链路层可能是交换机端口错误、VLAN 配置问题网络层可能是路由表错误、TTL 耗尽传输层可能是拥塞控制触发丢包。ping工作在网络层用的是 ICMP 协议所以它主要帮我们判断三层及以下的连通性和丢包情况。2.2 丢包的常见原因分类我把平时遇到的丢包原因归成几大类方便你对照排查物理链路问题网线水晶头氧化、网线过长超过 100 米、光纤弯折、无线信号干扰。这类问题往往表现为持续性的中高丢包率。网络拥塞出口带宽跑满路由器队列溢出只能丢包。典型特征是高峰期丢包、闲时正常。设备性能瓶颈老旧的交换机、路由器 CPU 跑满转发能力跟不上。表现为大流量时丢包。配置错误MTU 不匹配、双工模式不一致一端全双工一端半双工、ACL 误拦截。无线特有因素信号弱、信道冲突、漫游切换。Wi-Fi 丢包通常伴随延迟抖动。对端问题目标服务器限速、防火墙丢弃 ICMP、服务过载。理解这些分类很重要因为ping的结果要结合场景解读。同样是 10% 丢包有线环境大概率是链路或拥塞无线环境则优先怀疑信号。2.3 丢包对实际业务的影响很多人觉得“丢一点点包没关系”这是个误区。不同应用对丢包的容忍度差别极大应用类型可接受丢包率超过后的表现网页浏览5% 以内加载变慢偶尔重试文件下载1% 以内速度下降TCP 重传视频会议1% 以内画面卡顿、马赛克在线游戏0.5% 以内延迟抖动、瞬移VoIP 语音1% 以内声音断续、机械音金融交易接近 0超时、订单失败TCP 协议有重传机制少量丢包会被“掩盖”代价是延迟增加。UDP 没有重传丢包直接体现为业务异常。所以排查时不能只看“通不通”一定要看丢包率和延迟抖动。3. ping 命令的核心原理与基础用法3.1 ping 的工作原理ICMP 回显请求与应答ping的底层是ICMP 协议Internet Control Message Protocol。它发送一个ICMP Echo Request类型 8给目标目标收到后回一个ICMP Echo Reply类型 0。发送方记录发出时间和收到回复的时间差值就是RTT往返时延。这里有个关键点ping不需要目标开放任何端口它工作在网络层。所以它能测通不代表对方的 Web 服务、数据库服务是好的它测不通也不代表服务一定挂了可能是对方防火墙禁了 ICMP。这个认知能帮你避免很多误判。ping默认发送的数据包大小在 Linux 上是 56 字节数据 8 字节 ICMP 头 20 字节 IP 头 84 字节Windows 上默认 32 字节数据。这个大小可以调整后面讲 MTU 探测时会用到。3.2 最基础的 ping 用法与输出解读最简单的用法就是直接跟目标地址ping 8.8.8.8 ping www.example.comLinux 下默认会一直 ping 下去按CtrlC停止并输出统计。Windows 下默认发 4 个包就停。输出大概长这样PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq1 ttl115 time12.3 ms 64 bytes from 8.8.8.8: icmp_seq2 ttl115 time11.8 ms 64 bytes from 8.8.8.8: icmp_seq3 ttl115 time45.6 ms ^C --- 8.8.8.8 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev 11.812/23.257/45.612/15.842 ms逐字段解读icmp_seq序列号用来发现丢包和乱序。如果 seq 不连续中间就丢了包。ttlTime To Live每经过一个路由器减 1可以用来粗略判断经过了多少跳。timeRTT往返延迟。这个值波动大说明链路不稳定。packet loss丢包率最关键的指标。mdev延迟抖动平均值偏差。这个值比 avg 更能反映链路质量。我特别想强调mdev。很多人只看平均延迟觉得 20ms 挺好但 mdev 如果是 30ms说明延迟在 0 到 50ms 之间乱跳这种链路对实时应用是灾难。稳定的 50ms 远好过抖动的 20ms。3.3 常用参数速查与实战组合ping的参数不多但组合起来很灵活。我把最常用的整理成表参数LinuxWindows作用指定次数-c 10-n 10发 10 个包后停止指定间隔-i 0.2不支持每 0.2 秒发一个指定包大小-s 1472-l 1472发送指定字节数据超时时间-W 2-w 2000等待回复的超时秒/毫秒不分片-M do-f禁止分片用于 MTU 探测记录路由-R不支持记录经过的路由指定源地址-I eth0-S IP从指定接口/源 IP 发出洪泛模式-f不支持快速发包需 root时间戳-D不支持每行显示时间戳几个我常用的组合# 持续压测每 0.2 秒一个包观察稳定性 ping -i 0.2 192.168.1.1 # 发 100 个包统计丢包率 ping -c 100 8.8.8.8 # 带时间戳方便和日志对照 ping -D -c 50 10.0.0.1 # 指定源接口多网卡环境必备 ping -I eth1 192.168.2.1注意-i参数在 Linux 下普通用户最小只能设 0.2 秒设更小需要 root 权限。这是为了防止 ICMP 洪泛攻击。4. 带源地址 ping 与多网卡环境排查4.1 为什么需要指定源地址服务器通常有多块网卡或者一块网卡配了多个 IP。默认情况下ping会根据路由表自动选择源地址。但路由表选的不一定是你想要的那个。比如你有内网网卡eth0192.168.1.10和管理网卡eth110.0.0.10想测试从管理网到某台设备的连通性如果不指定源系统可能走默认路由从eth0出去测出来的结果就不是你想要的。带源地址 ping就是强制从指定的接口或 IP 发出 ICMP 包这在多网卡、多线路、策略路由的环境里是必备技能。4.2 Linux 下指定源接口或源 IPLinux 用-I参数后面可以跟接口名或 IP# 指定接口名 ping -I eth1 10.0.0.1 # 指定源 IP ping -I 10.0.0.10 10.0.0.1 # 结合次数和间隔 ping -I eth1 -c 20 -i 0.5 10.0.0.1实测下来用接口名和用 IP 有一点区别用接口名时系统会用该接口的主 IP 作为源用 IP 时如果该 IP 不在任何接口上会直接报错。我一般优先用接口名更直观。4.3 Windows 下指定源地址Windows 用-S参数指定源 IPping -S 10.0.0.10 10.0.0.1Windows 不支持按接口名指定只能按 IP。而且如果源 IP 不属于任何活动接口会提示“传输失败常见故障”。4.4 多网卡环境的排查思路多网卡服务器排查网络问题时我的习惯是逐接口验证先ping本机各接口的网关确认每个接口到各自网关都通。再用-I指定接口ping目标确认特定路径通。对比不同接口的结果如果某个接口丢包严重问题就锁定在那条链路。这里有个容易踩的坑回程路由不对称。你从eth1发出去的包对方可能从另一条路回你导致ping不通但实际业务是好的。遇到这种情况要在对端也做抓包确认不能只凭ping结果下结论。实操心得指定源地址 ping 时如果一直Request timeout先别急着怀疑链路用ip route get 目标IP from 源IP确认一下路由是否存在。路由不对包根本发不出去。5. 用 ping 定位丢包从现象到根因的完整流程5.1 第一步确认丢包范围和方向拿到“网络卡”的反馈我第一件事是分段 ping把问题范围缩小。假设拓扑是本机 → 网关 → 出口路由器 → 公网目标。ping -c 50 网关IP ping -c 50 出口路由器IP ping -c 50 公网目标IP三段结果对比能快速定位网关就丢包问题在本地链路或本机。网关不丢、出口丢问题在网关到出口之间。前两段不丢、公网丢问题在出口之外可能是运营商或目标侧。这个方法我用了无数次基本五分钟内能把范围锁定到某一段。5.2 第二步区分“真丢包”和“假丢包”不是所有Request timeout都是真丢包。有几种情况会造成“假丢包”目标禁 ICMP很多服务器和防火墙默认丢弃 ICMPping不通但服务正常。这时要换tcping或直接测端口。限速 ICMP有些设备对 ICMP 做了速率限制高频 ping 会丢低频就正常。用-i 1放慢再测。QoS 策略ICMP 被标记为低优先级拥塞时优先丢弃。这种丢包不代表业务流量也丢。判断方法换协议验证。用curl测 HTTP、用nc测端口如果业务正常只有 ICMP 丢那大概率是 ICMP 被特殊对待了。5.3 第三步结合 mtr 做逐跳分析ping只能告诉你“到目标丢了多少”但不知道“在哪一跳丢的”。这时候要上mtrMy Traceroute它结合了ping和traceroute的能力逐跳统计丢包mtr -r -c 100 8.8.8.8输出会列出每一跳的丢包率和延迟。关键技巧中间某一跳丢包但后续跳不丢说明那一跳只是不响应 ICMP不是真丢包如果从某一跳开始后续都丢那问题就在那一跳附近。我遇到过好几次“中间跳 50% 丢包但目标 0% 丢包”的情况新手容易误判。记住只有持续到目标的丢包才是真问题。5.4 第四步大包与小包对比测试有时候小包正常、大包丢包这通常是MTU 问题。测试方法# 小包 ping -c 10 -s 56 目标IP # 大包不分片 ping -c 10 -s 1472 -M do 目标IP如果小包 0% 丢包、大包全丢基本可以确定路径 MTU 小于 1500。1472 是 1500 减去 20 字节 IP 头再减 8 字节 ICMP 头的结果。逐步减小-s值找到能通的最大值就能算出实际 MTU。这个场景在跨运营商、走隧道如 GRE、IPsec的网络里特别常见。MTU 不匹配会导致大包被静默丢弃表现为“网页能开但下载卡死”“SSH 能连但传文件断”。5.5 第五步延迟抖动与丢包的关联分析丢包往往伴随延迟抖动。我会用高频 ping 观察一段时间ping -i 0.2 -c 500 目标IP | tee ping.log然后看统计里的mdev。如果 mdev 很大比如 avg 20ms、mdev 40ms说明链路质量差即使丢包率不高实时业务也会受影响。这种链路通常是无线或者拥塞链路。6. 常见问题与排查技巧实录6.1 ping 不通的排查顺序ping不通是最常见的问题我按这个顺序排查基本不会漏本机网络是否正常ping 127.0.0.1确认协议栈没问题ping 本机IP确认网卡配置正常。网关是否可达ping 网关不通就是本地链路问题。DNS 是否正常如果ping IP通但ping 域名不通是 DNS 问题。目标是否禁 ICMP换端口测试工具验证。路由是否正确ip route get 目标IP看走哪条路。防火墙是否拦截本机和对端都要查。6.2 常见问题速查表现象可能原因排查方法100% 丢包链路断、IP 错、防火墙拦截逐段 ping查路由和 ACL部分丢包链路质量差、拥塞、MTU 问题大小包对比mtr 逐跳延迟忽高忽低无线干扰、拥塞、路由抖动高频 ping 看 mdev域名 ping 不通DNS 故障nslookup验证换 DNS指定源 ping 失败路由缺失、源 IP 无效ip route get确认大包丢小包通MTU 不匹配逐步减小 -s 找临界值间歇性丢包双工不匹配、硬件故障查接口错误计数6.3 那些只有踩过坑才知道的细节坑一双工模式不匹配。一端全双工一端半双工小流量正常大流量丢包严重。用ethtool eth0看双工状态两端必须一致。这个坑我在机房遇到过换了三根网线才想到查双工。坑二网线质量。劣质网线或者水晶头没压好表现为高丢包。用ethtool -S eth0看rx_errors、crc_errors计数持续增长就是物理层问题。坑三无线信道干扰。2.4G 频段拥挤丢包和抖动都大。换 5G 频段或者用工具扫一下信道占用选个干净的信道。坑四ICMP 被限速。有些云厂商对 ICMP 做了限速高频 ping 丢包但业务正常。别被误导用业务流量验证。坑五NAT 会话超时。长时间空闲后第一个包可能丢这是 NAT 表项过期导致的属于正常现象重发即可。实操心得排查丢包时永远先怀疑物理层。我统计过自己处理过的案例超过一半的丢包最终都追溯到网线、光模块、接口这些物理问题。软件配置问题反而少。6.4 ping 之外的必要补充工具ping很强但不是万能。这几个工具配合使用效果更好mtr逐跳丢包分析排查必用。traceroute / tracert看路径配合 mtr 用。tcping / nc测端口连通性绕过 ICMP 限制。tcpdump / wireshark抓包看真实流量终极手段。iperf3测带宽和丢包比 ping 更贴近业务。我一般的组合是ping初筛 →mtr定位跳数 →tcpdump抓包确认。三步下来绝大多数丢包问题都能找到根因。7. 把 ping 用成肌肉记忆ping这个命令简单到几乎所有人都会敲但真正把它用透的人不多。我见过太多人只会ping 一下看看通不通遇到丢包就束手无策。其实只要掌握分段测试、大小包对比、指定源地址、结合 mtr 这几个套路大部分网络问题都能自己定位。我个人在实际操作中的体会是排查网络问题顺序比工具更重要。先分层、再分段、后抓包这个思路比记住多少参数都管用。ping只是这个思路里最轻便的一把刀用顺手了很多问题在敲下回车的那一刻心里就有数了。最后再分享一个小技巧把常用的 ping 组合做成 alias比如alias p100ping -c 100 -i 0.2排查时直接p100 目标IP省去每次敲参数的功夫。这种小积累时间长了就是效率差距。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门