首页/网络/协议速查/traceroute 家族工具对比

traceroute 家族工具对比

traceroute/tracert 看路径,mtr 持续统计,tcptraceroute 穿透防火墙,tracepath 看 PMTU:按场景选择。

协议速查网络更新于 2026-10-13

原理与选择逻辑

traceroute 类工具靠逐次加大 TTL,让路径上每台路由器回送 ICMP 超时(类型 11),由此把逐跳地址拼出来;tracert 是 Windows 上的同名实现,mtr 把 traceroute 与 ping 统计合为一体并持续跑,tcptraceroute 改用 TCP SYN 发包以穿透只放行 443 的过滤,tracepath 顺带做路径 MTU 探测。选工具本质是选两件事:用什么协议探测,以及要不要统计。

基本信息

适用平台Linux(traceroute / mtr / tracepath)、Windows(tracert)、macOS(自带 traceroute)
权限要求UDP/ICMP 模式普通用户即可;TCP 模式与 mtr 的原始套接字需要 root 或 cap_net_raw
安装traceroute 与 mtr 多数发行版不预装:Debian 系 apt install,RHEL 系 dnf install
默认差异Linux traceroute 默认 UDP 高端口,Windows tracert 默认 ICMP Echo

典型使用场景

  • 判断跨运营商链路在哪一跳开始变慢:用 mtr 跑 50 到 100 个包看逐跳丢包与 RTT 曲线
  • 目标禁 ICMP/UDP 时用 tcptraceroute 打 443 或 80,绕开中间设备的过滤策略
  • 怀疑路径 MTU 变小(PPPoE、GRE/IPsec 隧道)时用 tracepath,一次拿到整条路径的 PMTU
  • 给工单附证据:加 -n 关闭反向解析,输出更干净也更快,避免卡在 DNS 查询上

常用组合

常用组合
mtr -rwzc 50 --tcp --port 443 target   # -r 报告 -w 宽屏 -z 显示 AS 号 -c 50 跑 50 轮
sudo traceroute -T -p 443 -n target    # TCP SYN 探测 443,-n 不做反向解析
tracepath -m 20 target                 # 最多 20 跳,同时报告路径 MTU
ping -M do -s 1400 target              # 配合验证 1400 字节载荷是否被丢(禁分片)

mtr 输出逐列读法

列含义正常与异常
Hop跳号(跳数序号)序号即 TTL 值
Loss%该跳的回包丢失比例中间跳高但末跳为 0 属正常,多是 ICMP 限速
Snt / Last / Avg发包数与最近、平均 RTTAvg 应逐跳缓慢增长而非突变
Best / Wrst / StDev最小、最大 RTT 与标准差Wrst 远大于 Avg 表示抖动大,实时业务会受影响
云环境的 overlay 网络(VXLAN 等)会让 traceroute 显示虚拟跳,看到的地址未必是物理路由器;要拿真实物理路径得靠平台自带工具或抓包。
中间跳的丢包率经常是假象:路由器对需要上送 CPU 的「TTL 超时」报文做了限速,转发流量却照常处理。判断链路质量要看最后一跳与端到端 TCP 重传。
traceroute 第一跳输出本机网关,若整条路径全是星号且第一跳就丢,问题通常在本机防火墙或安全组挡了回包,而不是远端断了。

易错点

  • TCP 模式探测需要 root,且目标端口必须真的有服务:打一个没人监听的端口收到 RST,traceroute 会直接判定到达终点,看起来「路径只有一跳」
  • mtr 默认 UDP 探测在部分运营商设备上被静默丢弃,中间出现大量问号时换 -T(TCP)或 -I(ICMP)模式重跑再下结论
  • 拿中间跳的丢包率去投诉运营商往往得不到有效结论,先看末跳丢包与业务侧重传率,再定位丢包区段
  • tracepath 与 mtr 都是单向视角:只能看到去程路径,回程不对称要靠对端配合或双向抓包确认

数据来源与参考

  • man 8 traceroute
  • mtr 项目文档

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌