首页/网络/协议速查/traceroute 原理:TTL 逐跳探测

traceroute 原理:TTL 逐跳探测

发送 TTL 从 1 递增的探测包:第 N 台路由器丢弃 TTL=0 的包并回 ICMP 超时,据此画出路径;默认 UDP 高端口,也可用 ICMP/TCP。

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

用 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 指定目标业务端口降低误报。

易错点

  • 看到某跳是星号就断定该跳故障:中间路由器对 ICMP 限速非常普遍,只要后续跳与目标可达就说明链路正常
  • 在只放行 TCP 443 的网络里用默认 UDP 探测,结果整条路径全是星号,误判为链路故障,应改用 -T -p 443
  • 用中间跳的丢包率评估链路质量:只有最后一跳的丢包才有参考价值,中间跳限速会制造假丢包
  • 把 traceroute 的 RTT 与业务时延直接等同:探测包优先级低,路径慢不必然等于业务慢

数据来源与参考

  • RFC 1393(Traceroute 用 ICMP 扩展)
  • man 8 traceroute

相关工具

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