ArcLibrary

mtr 与 tcptraceroute

穿透 ICMP 屏蔽的现代路径诊断 —— 看一眼就知道丢在哪一跳。

mtrtraceroute诊断
核心 · Key Idea

一句话:传统 traceroute 靠 ICMP 容易被中间设备屏蔽。mtr 持续多次探测得稳定丢包率;tcptraceroute / mtr -T 改走 TCP 端口,能穿透更多防火墙。

是什么#

  • mtr(My Traceroute)= ping + traceroute 持续刷新版;
  • tcptraceroute:用 TCP SYN 而不是 ICMP / UDP 探测路径;
  • 两者结合 = 能稳定看出「长时间观测下哪一跳丢包 / 抖动」。
mtr -wbz -i 1 -c 100 example.com
mtr -T -P 443 example.com
tcptraceroute example.com 443

打个比方#

打个比方 · Analogy

单次 ping 像瞄一眼路况,可能这一刻正好绿灯;mtr 像装了一整天的交通摄像头,看出哪个路段一直堵

关键概念#

ICMP TTL ExceededTTL 报错
传统 traceroute 依赖中间路由器返回这个 ICMP;很多 ISP 限速或屏蔽。
TCP tracerouteTCP 探路
改发 TCP SYN 到目标端口;中间路由器仍回 ICMP,目标会回 SYN-ACK / RST。
持续探测Continuous Probe
mtr 不停发,得每跳的丢包率 / 平均 / 最差延迟。
不对称路由Asymmetric Path
去和回路径不同 —— traceroute 只看去程,回程问题需对端 mtr。
JSON / Report 模式结构化输出
`mtr --json` / `--report` 适合批量自动化采集。

怎么工作#

mtr 里 Loss% 列才是最该看的 —— 单次出问题不算事。

实操要点#

  • mtr -T -P 443 host:对 HTTPS 服务最实用,不被 ICMP 限速误导。
  • 看丢包要看「最后一跳:中间跳丢包是路由器优先级低(ICMP 限速)造成的,不一定真丢;最后一跳还在丢才说明真不通。
  • 跨国诊断:从不同 PoP 跑 mtr 看哪一段最差,常用工具有 BestTrace / 公开 looking-glass。
  • 结合源端口mtr -P 443 --tcp -p 12345 固定源端口,便于路上等价路径不会变(避免诊断时每跳都跳到不同 ECMP 路径)。
  • 输出 JSON 接告警mtr -j --report-cycles 30 用脚本判定某跳丢包率连续 N 次 > 5% 就告警。

易混点#

mtr / traceroute
每跳延迟 + 丢包,**定位段**。
多次累计统计可信。
ping
端到端延迟 + 丢包,**定位有无**。
单点视角。

延伸阅读#