traceroute 是什么
traceroute 利用 IP 头的生存时间字段做文章:先发一个生存时间为 1 的探测包,第一台路由器把它丢掉并回一个超时差错,于是这台设备的位置被探明;接着把生存时间加到 2,下一跳现身,如此递增直到目标。它回答的是『到目的地经过哪些设备、卡在第几跳』,与 ping 只回答『能不能到』形成互补。Linux 常见实现默认用高端口做探测,目标不可达时靠差错报文收尾。
基本信息
| 适用平台 | Linux、macOS,多数发行版需自行安装该工具包 |
|---|---|
| 默认探测方式 | UDP 高端口,每跳发三个探针,最多三十跳 |
| 替代模式 | -I 用 ICMP、-T 用 TCP、-U 用 UDP,穿透不同过滤策略 |
| 权限 | 普通用户可用;部分模式与选项需要 root |
常用参数
| 参数 | 作用 | 使用建议 |
|---|---|---|
| -n | 不做反向名称解析,输出更快更稳定 | 现场排障一律加上,避免解析拖慢 |
| -m 20 | 设置最大跳数 | 跨省跨运营商常用 15 到 20,够用且省时间 |
| -q 2 | 设置每跳探针数量 | 链路抖动大的时候减少探针,先看路径形状 |
| -w 2 | 设置每跳等待秒数 | 弱网或跨洋链路上适当加大 |
| -f 5 | 从第几跳开始探测 | 已确认前几跳正常时跳过,节省时间 |
| -p 8888 | 指定探测使用的目标端口 | UDP 模式下便于匹配防火墙放行的端口 |
| -s 地址 | 指定源地址 | 多网卡主机上确认走哪条路径 |
| -i 接口 | 指定出接口 | 多出口主机验证路径选择 |
| -I / -T / -U | 切换 ICMP、TCP、UDP 探测模式 | 被封 ICMP 时优先试 TCP 加 443 |
典型使用场景
- 判断卡在第几跳:某个目标访问慢,先看时延在哪一跳突然上升
- 验证路由改动:切换线路或调整策略路由后,用输出确认路径确实变了
- 穿透只放行特定端口的网络:用 TCP 模式指定 443,绕开被拦的探测方式
- 区分内网与外网问题:前几跳正常、出口后异常,责任范围立刻清晰
- 给运营商提供证据:逐跳时延与丢包记录比一句『很慢』更能推动处理
基本用法
基本用法
traceroute -n 8.8.8.8 # 不解析名称,最快看到路径
traceroute -n -m 20 -q 2 -w 2 8.8.8.8 # 限 20 跳、每跳 2 个探针、等待 2 秒
traceroute -T -p 443 -n www.example.com # TCP 探测 443,适合只放行 443 的网络
traceroute -I -n 10.0.0.5 # 改用 ICMP 探测
traceroute -n -f 5 10.0.0.5 # 前 4 跳已确认,从第 5 跳开始看输出逐列读法
| 列 | 含义 | 异常表现 |
|---|---|---|
| 第一列序号 | 第几跳,也就是经过的第几台三层设备 | 跳数突然变多说明路径绕行 |
| 地址列 | 该跳设备的接口地址 | 出现新地址说明路由发生变化 |
| 三个时间值 | 三个探针各自的往返时延 | 某一跳后数值整体抬升,说明瓶颈在其之后 |
| 星号 | 该探针未收到差错报文 | 连续星号但最后一跳正常,通常是设备不回应 |
| 感叹号标记 | 目标端的特殊响应,如端口不可达 | 看到它说明探测已到达目标,属正常收尾 |
中间设备不回应是常态:不少路由器对探测类报文限速或直接忽略,表现为中间全是星号而最后一跳正常,这不代表路径断了。
与 Windows 的 tracert 对比时注意探测方式不同:Linux 默认 UDP,Windows 默认 ICMP,两者在同一网络里可能给出不同的中间跳结果,不能直接当作矛盾。
ICMP 与 UDP 探测常被安全设备拦截:先试 TCP 模式,若 TCP 能贯通说明业务可用,前两者的星号只是探测方式被拦。