原理与选择逻辑
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 | 发包数与最近、平均 RTT | Avg 应逐跳缓慢增长而非突变 |
| Best / Wrst / StDev | 最小、最大 RTT 与标准差 | Wrst 远大于 Avg 表示抖动大,实时业务会受影响 |
云环境的 overlay 网络(VXLAN 等)会让 traceroute 显示虚拟跳,看到的地址未必是物理路由器;要拿真实物理路径得靠平台自带工具或抓包。
中间跳的丢包率经常是假象:路由器对需要上送 CPU 的「TTL 超时」报文做了限速,转发流量却照常处理。判断链路质量要看最后一跳与端到端 TCP 重传。
traceroute 第一跳输出本机网关,若整条路径全是星号且第一跳就丢,问题通常在本机防火墙或安全组挡了回包,而不是远端断了。