路由追踪traceroute vs tracepath

traceroutetracepath 都用于追踪数据包从本机到目标主机的路径(逐跳路由路径)


一、基本对比

对比项 traceroute tracepath
工具来源 传统工具(早期BSD/Linux通用) Linux 特有(iputils 套件)
运行权限 通常需要 root(使用原始套接字 ICMP 或 UDP) 普通用户即可运行(使用 UDP + 内核自动设置)
协议类型 默认使用 UDP(也可用 ICMP 或 TCP) 只使用 UDP
TTL 机制 手动设置每个包 TTL,观察中间节点返回的 ICMP 超时报文 同样通过 TTL 递增机制实现
输出信息 详细,可指定端口、超时、协议等参数 简化输出,自动选择端口与参数
可移植性 几乎所有类 Unix 系统都有 仅 Linux 内核支持
主要用途 精确诊断路由问题、适合脚本化分析 用户态快速查看路由路径

二、工作机制差异

sequenceDiagram
    participant A as 源主机
    participant R1 as 路由器1
    participant R2 as 路由器2
    participant B as 目标主机

    Note over A: traceroute
发送UDP(或ICMP),TTL=1 A->>R1: UDP包 (TTL=1) R1-->>A: ICMP Time Exceeded Note over A: 增加TTL=2 A->>R2: UDP包 (TTL=2) R2-->>A: ICMP Time Exceeded Note over A: TTL逐步增加直到目标主机 A->>B: UDP包 (TTL=n) B-->>A: ICMP Port Unreachable (到达目标)
  • traceroute 通过发送不同 TTL 的包,等待 ICMP 超时报文响应。
  • tracepath 机制相似,但它通过 Linux 内核自动处理 socket 行为,不需要手动 root 或手动构造包。

三、实际使用例

1
2
3
4
5
6
7
# traceroute 示例
sudo traceroute -I www.google.com # 使用 ICMP Echo
sudo traceroute -T www.google.com # 使用 TCP SYN
sudo traceroute -p 80 www.google.com # 指定端口

# tracepath 示例
tracepath www.google.com

输出差异:

  • traceroute 通常会显示「每跳 RTT 三次尝试结果」。
  • tracepath 还会在输出里提示 MTU(路径MTU探测)。

例:

1
2
3
4
5
$ tracepath www.google.com
1?: [LOCALHOST] pmtu 1500
1: router.local 1.0ms****
2: 10.10.0.1 2.5ms
3: ...

四、总结

维度 traceroute tracepath
权限 需 root(或 CAP_NET_RAW) 普通用户可用
协议 UDP / ICMP / TCP 可选 UDP 固定
输出 更详细、可调 更简单、含MTU
兼容性 通用 Linux 专属
场景 专业排障、脚本分析 快速测试路径