网络栈调优98 条

mtr 逐跳丢包与延迟

持续探测路径上每一跳的丢包与延迟; 判定丢包要观察从哪一跳开始且持续到终点。

mtr 是什么

mtr 把 ping 与 traceroute 合在一起:持续向目标发送探测包,统计路径上每一跳的丢包率与延迟分布。判定的关键在于「从哪一跳开始丢、是否一直持续到终点」:中间某一跳单独丢包,多数是该设备对 ICMP 做了限速,不能作为故障依据;只有从某跳开始丢包并延续到终点,才说明这一段路径存在问题。

基本信息

报告模式mtr -rwzc 20 203.0.113.10
TCP 探测mtr -T -rwzc 20 -P 443 203.0.113.10
采样次数-c 指定,次数越多结论越稳
输出形式-j 输出 JSON,便于前后对比
解析地址-z 显示主机名,排查时更直观

典型使用场景

  • 跨地域访问慢,定位是哪一段路径引入延迟
  • 间歇性丢包,判断是否固定在某一跳之后
  • 确认某个网段的可达性与路由走向是否符合预期
  • 业务变更前后对比同一目标的路径与延迟
  • 向运营商报障前准备逐跳证据

常用命令

常用命令
mtr -rwzc 20 203.0.113.10              # 报告模式,20 次采样后输出
mtr -T -rwzc 20 -P 443 203.0.113.10    # 用 TCP 443 探测,绕开 ICMP 限制
mtr -rwzc 100 203.0.113.10             # 拉长采样再下结论
mtr -j -c 20 203.0.113.10 > path.json  # 保存 JSON,便于与后续结果对比

现象与结论

现象含义能否作为故障依据
中间跳单独丢包该设备对 ICMP 限速不能,属正常现象
某跳起持续丢到终点该段路径存在丢包可以作为依据
末跳丢包率非零目标主机或最后一段有问题结合目标侧检查
各跳延迟均匀升高链路时延本身较长不是丢包问题

判读顺序

  • 先看末跳结果,确认目标是否整体可达
  • 再看丢包从哪一跳开始,是否持续到终点
  • 中间单跳丢包直接忽略,不要写进结论
  • 换一种探测方式复核,例如用 TCP 端口探测替代 ICMP
ICMP 与应用流量可能走不同路径,也可能被中间设备区别对待。业务是 HTTPS 时用 -T -P 443 探测,得到的结论更贴近真实流量。
单次结果受瞬时波动影响很大,延迟与丢包结论都应基于足够多次的采样,并记录采样时间窗口。

易错点

  • 把中间跳的 ICMP 限速当成链路故障,向运营商误报
  • 只看一次结果就下结论,忽略不同时间段的波动
  • 只用 ICMP 探测,而业务流量走 TCP,路径与限速策略都可能不同
  • 没有保存历史结果,无法判断问题是长期存在还是刚刚出现

数据来源与参考

  • man mtr
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌