← 返回题目列表

网络延迟高、丢包严重,怎么定位问题出在哪一段?

高频 中等 第 8 / 26 题 更新于 2026/07/28
延迟丢包mtrtraceroute

简化版

定位延迟/丢包的核心思路是**「逐跳分段,找出是哪一段变差的」。最好用的工具是 mtr(= ping + traceroute 合体)——它持续对路径上每一跳发包并统计,实时显示每一跳的丢包率和延迟**,一眼就能看出「从第几跳开始丢包/延迟飙升」。基本判断:丢包/高延迟从中间某一跳开始并持续到终点 → 那一段链路有问题(常是运营商骨干或跨网);只有中间某一跳丢包、但终点不丢 → 那跳路由器只是限制了 ICMP 回复,不是真丢包(常见误判)。先用 ping 看总体延迟和丢包率,再用 mtr 逐跳定位。

详细版

第一步·ping 看总体情况

ping -c 100 example.com        # 发 100 个包,看统计

关注结尾统计:

  • packet loss(丢包率):0% 正常;持续几 % 以上就有丢包问题。
  • rtt min/avg/max/mdev:延迟的最小/平均/最大/抖动。max 和 avg 差距大、mdev 大 = 抖动严重(延迟不稳定,比单纯高延迟更影响体验)。

第二步·mtr 逐跳定位(关键)

mtr example.com                # 交互式,持续刷新
mtr -r -c 100 example.com      # 报告模式,发 100 个包后输出报告

mtr 每一行是一跳,关键列:

含义
Loss%该跳丢包率
Snt发送包数
Last/Avg/Best/Wrst最近/平均/最好/最差延迟
StDev延迟标准差(抖动

读 mtr 的黄金法则:

  • 丢包从中间某跳开始,一路持续到最后一跳那一段真有问题
  • 只有中间某跳丢包,后面的跳(含终点)不丢假丢包:那台路由器只是限速回复 ICMP(优先转发、不爱回诊断包),数据实际正常通过,不用管。
  • 某跳开始延迟陡增并持续到终点 → 那一段是延迟瓶颈(常是跨运营商、跨地域的长距离链路)。

完整版教学

一、先分清:延迟高、丢包、抖动是三件事

「网络卡」笼统,排查前要先分清三种不同的病:

  • 延迟高(高 RTT):包一来一回耗时长。距离远(跨国)会天然高延迟,但异常的高延迟往往是某段链路拥塞或绕路
  • 丢包(Packet Loss):一部分包根本没到。丢包会触发 TCP 重传,表现为「时快时慢、偶发失败、下载卡顿」,危害往往比稳定的高延迟更大。
  • 抖动(Jitter):延迟忽高忽低不稳定。对实时应用(语音、视频、游戏)致命——即使平均延迟不高,剧烈抖动也会卡顿。

排查时要先用 ping 看清是哪一种、有多严重,再用 mtr 定位是哪一段造成的。

二、第一步:ping 摸清整体

ping -c 100(发够多的包才有统计意义)看结尾汇总:

100 packets transmitted, 97 received, 3% packet loss
rtt min/avg/max/mdev = 20.1/35.2/210.8/28.4 ms
  • 3% packet loss → 有丢包,需要进一步定位。
  • avg 35ms 但 max 210ms、mdev 28ms抖动严重(大部分包 35ms,偶尔飙到 210ms),延迟不稳定。

ping 能告诉你「端到端有多差」,但不能告诉你差在哪一段——它只测你和终点之间的总体情况。要定位到具体链路,得靠逐跳工具。

三、第二步:mtr——定位的主力

traceroute 能列出路径每一跳,但它每跳只发几个包,看不出持续的丢包率mtrpingtraceroute 合二为一:它持续不断地对路径上每一跳发包并统计,动态显示每跳的丢包率和延迟。这正是定位「哪一段变差」需要的。

              Loss%  Snt  Last  Avg  Best  Wrst StDev
1. 网关         0.0%  100   1.2  1.1   0.9   2.0   0.2
2. 运营商接入    0.0%  100   8.3  9.1   7.5  15.2   1.1
3. 城域网        0.0%  100  12.0 13.5  11.0  40.1   3.2
4. 骨干节点     15.0%  100  85.0 92.3  80.0 210.5  28.0   ← 从这跳开始丢包+延迟飙升
5. 跨省骨干     14.0%  100  88.0 95.1  82.0 205.0  27.5
6. 目标网络     13.0%  100  90.0 96.0  85.0 208.0  26.0
7. 目标服务器   13.0%  100  91.0 97.2  86.0 209.0  25.8   ← 一路持续到终点

上例中,从第 4 跳开始丢包 15%、延迟从 13ms 飙到 92ms,且一路持续到第 7 跳(终点) → 判定第 3 跳到第 4 跳之间那段链路出了问题(拥塞/故障),且它归属运营商骨干,往往不是你能修的(可反馈运营商或换线路)。

四、最大的坑:中间跳丢包≠真丢包

这是延迟/丢包排查最容易误判的点,务必牢记:

mtr 里某个中间跳显示丢包,但它后面的跳(尤其终点)不丢包 → 这是「假丢包」,不用管。

原因:mtr/traceroute 靠让中间路由器回 ICMP 超时包来测量每一跳。但路由器的首要任务是转发数据,回诊断用的 ICMP 是「顺手的活儿」,很多路由器故意限速或低优先级处理 ICMP 回复(甚至遇忙就不回)。于是那一跳的 ICMP 回复丢了、显示「丢包」,但真正过境的数据包一切正常——证据就是它后面的跳都不丢(数据明明顺利通过了)。

判据:只看丢包是否一路持续到终点

  • 持续到终点 → 真丢包,那段链路有问题。
  • 只中间某跳丢、终点不丢 → 假象,是路由器限制 ICMP,忽略。

记住这条能避免大量「看到某跳红了就慌」的误判。

五、把丢包点和「归属」对上

定位到「第几跳这段」后,还要看这一跳属于谁,才知道找谁解决:

  • 前几跳(网关、你的接入)丢包/高延迟你自己这端的问题:本地网络、路由器、宽带线路、WiFi 信号。这是你能处理的。
  • 中间骨干跳开始且持续到终点运营商 / 跨网链路问题:跨省、跨国、跨运营商互联点(如电信↔联通互联)拥塞。多数只能反馈运营商、或用 CDN/多线路规避。
  • 最后一两跳(目标网络内)丢包目标服务器侧问题:对方带宽打满、服务器过载、对方机房网络。

通过跳的 IP 归属(whois、看域名)能大致判断是哪一段的责任方。

六、其他辅助手段

  • ping 不同大小的包ping -s 1472(大包)对比小包,若大包丢小包不丢,可能是 MTU/分片问题
  • 换目标对比:同时 mtr 到多个不同目标,如果只有到某个目标差、其他都好 → 问题在那条特定路径;如果到哪都差 → 问题在你本地出口
  • 双向都测:网络问题可能是回程路由差。条件允许时让对端也 mtr 回来,因为去程和回程路径可能不同。

七、常见误区与追问

考点正确口径
延迟RTT 增大,来源可能是距离、排队、拥塞、处理慢
丢包包未到达或未响应,来源可能是拥塞、无线质量、限速、设备故障
排查ping/mtr/traceroute/tcpdump 分段定位
ping target
mtr target
compare:
client -> gateway
client -> public DNS
client -> service VIP
server logs and tcp retransmissions

延迟和丢包要分段看:本机到网关、出口到公网、公网到目标、目标内部,哪段变差查哪段。

  • 误区:看到中间跳丢包就说明业务一定丢包。 路由器可能只限制 ICMP 回复,对转发流量不丢。
  • 误区:平均延迟正常就没有问题。 P95/P99 抖动、偶发重传和队列拥塞也会影响用户体验。
  • 误区:丢包只能是网络设备坏了。 拥塞、无线干扰、限速策略、CPU 忙、缓冲区溢出都可能导致丢包。
  • 追问:mtr 比 ping 多什么? mtr 持续展示每一跳的延迟和丢包趋势,便于定位异常段。
  • 追问:TCP 重传能说明什么? 重传说明发送端未及时收到 ACK,可能有丢包、乱序或严重延迟。
  • 追问:Bufferbloat 是什么? 过大的队列缓冲导致拥塞时排队延迟暴涨,吞吐看似高但交互变慢。

八、加强记忆

定位延迟/丢包逐跳分段找变差的那一段:先 ping -c 100 看端到端丢包率 + 延迟 + 抖动(mdev),再用 mtr(ping+traceroute 合体)每一跳的 Loss% 和延迟。黄金判据:丢包/高延迟从某跳开始并持续到终点 = 那段真有问题只中间某跳丢、终点不丢 = 假丢包(路由器限速 ICMP),忽略。再按跳的归属分清是本地(前几跳)/ 运营商骨干(中间持续)/ 对端(最后几跳)。注意抖动比高延迟更伤实时应用,去程回程都要测。