掌握 Linux 路由跟踪:traceroute vs tracepath 超全指南

1. 为什么需要路由跟踪?

网络一慢,八成是路径MTU出了问题。
通过跟踪数据包经过的每一跳路由器及其延迟/MTU,你能:

  • 定位哪一跳开始丢包或高延迟
  • 发现链路 MTU 不一致导致的分段
  • 判断防火墙/ACL 是否把流量掐断

2. traC++eroute:瑞士军刀级工具

需要 root 权限(部分系统) | 支持 ICMP/UDP/TCP | 功能最全

2.1 语法速览

traceroute [选项] <目标IP或域名>

2.2 5 个高频实战用法

需求
示例命令
说明
基本跟踪traceroute 8.8.8.8
默认 30 跳、UDP
限制最大跳数traceroute -m 15 8.8.8.8
避免无限循环
用 ICMP Echotraceroute -I 8.8.8.8
类似 ping,易被放行
跟踪 TCP 80traceroute -T -p 80 example.com
排查 Web 访问
指定源地址traceroute -s 192.168.1.100 8.8.8.8
多出口/多网卡场景

2.3 输出解读


 1  192.168.1.1    1.2 ms  0.8 ms  0.7 ms
 2  10.10.10.1    12.4 ms 11.5 ms 10.7 ms
 3  * * *          ← 这一跳无响应或丢弃
  • 每列 3 次延迟,丢包或高延迟一眼看出
  • * 星号 = 超时/丢包

3. tracepath:轻量级诊断利器

无需 root | 默认 ICMP | 自动显示 MTU

3.1 语法速览

tracepath [选项] <目标IP或域名>

3.2 一键排查 MTU 问题

tracepath 8.8.8.8

输出示例:

 1:  192.168.1.1      1.14 ms pmtu 1500
 2:  10.10.10.1      12.35 ms
 ...
 4:  216.58.202.202  29.74 ms reached
     MTU: 1500
  • pmtu 1500:路径最小 MTU 为 1500 字节
  • 若中途出现 asymm  2,提示非对称路由,可能是 MTU/路由故障

4. 一张表看懂区别

维度
traceroute
tracepath
所需权限
部分系统需 root
无需 root
支持协议
ICMP / UDP / TCP
仅 ICMP
输出亮点
每跳延迟、丢包统计
自动显示 MTU
适用场景
复杂诊断、多协议测试
快速路径/MTU 检查


5. 真实场景 3 连击

🎯 场景 1:网站打开慢

traceroute -T -p 443 example.com
  • 看哪一跳开始飙升

  • 对比 TCP 443 与 ICMP 结果,判断是否协议被限速

🎯 场景 2:VPN 隧道异常

tracepath -n 10.0.0.1
  • 观察 MTU 是否突然变小
  • 若 MTU < 1500,需调整 VPN MTU 或开启 TCP MSS Clamp

🎯 场景 3:跨国链路丢包

traceroute -q 10 1.1.1.1
  • -q 10 每跳发 10 包,统计丢包率
  • 结合 MTR 做长期监控

6. 一张图总结

flowchart TD
    A(网络慢?) --> B{用 traceroute}
    B -->|定位高延迟/丢包| C[调整路由/联系ISP]
    A --> D{用 tracepath}
    D -->|发现MTU问题| E[修改MTU/MSS]

7. 一键复制脚本

把以下函数贴进 ~/.bashrc,随时调用:

# 快速诊断函数
tracefast() {
    echo "=== tracepath (MTU) ==="
    tracepath "$1"
    echo -e "\n=== traceroute TCP/80 ==="
    traceroute -T -p 80 "$1"
}

用法:

 1  192.168.1.1    1.2 ms  0.8 ms  0.7 ms
 2  10.10.10.1    12.4 ms 11.5 ms 10.7 ms
 3  * * *          ← 这一跳无响应或丢弃
0

📌 结语

  • traceroute:功能最全,适合深度排障
  • tracepath:无需 root,一键看 MTU