traceroute 是什么
traceroute 通过逐步增大探测包的 TTL,收集沿途路由器返回的超时消息,从而描绘出从本机到目标的路径以及每一跳的往返延迟。它默认用 UDP 探测,很多网络会对这类流量限速或丢弃,所以 -I(改用 ICMP)与 -T(改用 TCP,通常需要 root)是常用的替代方案。它回答的是「路径长什么样」,与 ping 回答的「通不通、延迟多少」正好互补。
基本信息
| 用途 | 逐跳探测到目标的路由路径与时延 |
|---|---|
| 语法 | traceroute [选项] 目标 |
| 常用选项 | -n 不做域名反解、-I ICMP 探测、-T TCP 探测、-p 指定端口、-m 最大跳数、-q 每跳探测次数、-w 超时秒数 |
| 权限说明 | UDP 与 ICMP 模式普通用户可用;TCP 模式通常需要 root |
典型使用场景
- 跨网访问慢:确认请求走了哪条路径,是否绕行或落入异常的自治域
- 连不通的初判:ping 不通时用 traceroute 看停在哪一跳,区分是本机出口问题还是中间链路
- 云环境排查:确认流量是否按预期经过专线或 VPN 网关
- 路由变更验证:调整策略路由或静态路由后,用路径变化确认配置已生效
- 工单举证:向运营商或云厂商提单时,逐跳记录是最直接的证据
常用示例
常用示例
traceroute -n 8.8.8.8 # 不解析域名,输出更快
traceroute -T -p 443 -n example.com # 用 TCP 443 探测,更接近业务流量
traceroute -I -n -m 15 10.1.1.1 # ICMP 探测,最多 15 跳
traceroute -n -q 1 -w 1 app.internal # 每跳只发一个包,超时 1 秒,跑得快
traceroute -n -m 10 -w 2 203.0.113.10 # 限制跳数与等待时间与其他工具组合判断
与其他工具组合判断
ping -c 3 target # 先确认基本连通与延迟
ip route get 203.0.113.10 # 看本机走哪条路由、从哪个网卡出去
traceroute -T -p 443 -n target # 再看来回路径的跳点
mtr -rnc 20 target # 需要持续统计丢包率时换 mtr输出逐列读法
| 内容 | 含义 | 怎么看 |
|---|---|---|
| 跳数 | 从 1 开始累计的 TTL | 第几跳就是路径上的第几个三层设备 |
| 地址 | 该跳回应的路由器地址 | 配合 -n 关闭反解,避免等 DNS |
| 三个 RTT | 每跳发了几个探测包就有几个延迟值 | 差异大说明该跳负载不均或限速 |
| * | 该跳在超时时间内没有回应 | 不代表故障,很多设备不回应探测 |
| !H / !N / !P | 主机不可达 / 网络不可达 / 协议不可达 | 通常是最后一跳给出的明确错误 |
| !X / !F | 被管理策略禁止 / 需要分片 | 多与防火墙或 MTU 相关问题有关 |
中间跳出现星号是常态,很多路由器对探测流量限速甚至完全不理。判断故障位置看的是「从哪一跳开始,后续所有跳都持续无响应」,而不是某一行出现了星号。
中间跳的 RTT 偏高不代表业务慢:控制面处理探测包的优先级通常低于转发。真正要看的是终点延迟,以及是否存在从某一跳开始延迟阶跃上升。