用 TTL 逐跳画出路径
traceroute(Windows 上是 tracert)利用 IP 头里的 TTL 字段做路径探测:先发 TTL 为 1 的探测包,第一台路由器把 TTL 减到 0 后丢弃该包并回一个 ICMP 超时报文,于是就知道第一跳是谁;把 TTL 加一重复一遍,就能逐跳把去程路径画出来。它依赖中间设备愿意回 ICMP,因此结果需要结合后续跳一起判断。
基本信息
| 适用平台 | Linux 用 traceroute/tracepath,Windows 用 tracert,macOS 用 traceroute |
|---|---|
| 默认探测包 | Linux traceroute 默认 UDP 高端口;Windows tracert 默认 ICMP Echo |
| 结束条件 | 目标回端口不可达或 Echo 应答,或达到最大跳数(默认 30 跳) |
| 权限要求 | 普通用户可跑;-T(TCP)与 -I(ICMP)模式在多数发行版需要 root |
常用组合
常用组合
traceroute -n 8.8.8.8 # -n 不做反向解析,输出更快更干净
traceroute -T -p 443 -n www.example.com # TCP 模式:穿透只放行 443 的网络
traceroute -I -n 8.8.8.8 # ICMP Echo 模式,贴近 ping 的路径
tracepath -n 8.8.8.8 # tracepath 会顺带探测路径 MTU
tracert -d 8.8.8.8 # Windows:-d 不解析域名输出逐列读法
| 列 | 含义 | 要注意什么 |
|---|---|---|
| 跳数序号 | 第几跳,从 1 开始递增 | 同一跳出现多次说明该跳做了负载均衡,可能返回多个地址 |
| 主机名或 IP | 该跳路由器的地址 | 加 -n 时只显示 IP,排障时更快也更准确 |
| 三次 RTT | 默认每跳探测 3 次,单位毫秒 | 三个值差距大说明该跳抖动明显 |
| 星号 * | 该跳没有回 ICMP 超时 | 限速或策略导致的常见现象,不代表该跳故障 |
| 末行目标地址 | 探测到达目标主机 | UDP 模式末行可能出现 !H、!N 等错误码,表示不可达原因 |
路径不对称是常态:去程与回程可能走完全不同的线路,traceroute 只反映去程,要对比反向结果才能看清另一半。中间跳出现星号但后续跳有正常响应,说明路径本身是通的。
TTL 递增探测在安全设备看来接近端口扫描特征,云环境与客户网络里使用前最好确认授权,必要时改用 -T 指定目标业务端口降低误报。