在网络故障排查中,快速定位数据包传输路径的异常节点至关重要。traceroute(或tracert在Windows中)是Linux系统中用于追踪数据包从源主机到目标主机经过的路由路径的核心工具。通过分析每一跳(Hop)的延迟和丢包情况,可精准诊断网络连接问题(如延迟高、路由环路、防火墙拦截等)。本文将从基础使用到高级技巧,全面解析traceroute的功能与实践。
traceroute通过发送一系列探测包(默认使用UDP协议,端口从33434递增)并监控其路径,实现路由追踪。其核心逻辑基于TTL(Time-To-Live)机制:
traceroute不同Linux发行版的安装方式:
# Debian/Ubuntu
apt install traceroute
# CentOS/RHEL
yum install traceroute
# 或使用新版本dnf
dnf install traceroute
# Arch Linux
pacman -S tracerouteapt install traceroute -y
traceroute [选项] 目标主机或IPtraceroute 常用选项选项 | 简写 | 描述 |
|---|---|---|
| - | 强制使用 IPv4 |
| - | 强制使用 IPv6 |
|
| 启用 socket 层调试 |
|
| 不分片数据包 |
|
| 指定起始 TTL(默认从 1 开始) |
|
| 指定网关路由(最多 8 个 IPv4 或 127 个 IPv6) |
|
| 使用 ICMP ECHO 进行追踪 |
|
| 使用 TCP SYN 进行追踪,默认端口为 80 |
|
| 指定使用的网络接口 |
|
| 设置最大跳数(默认为 30) |
|
| 设置同时探测的数量(默认为 16) |
| - | 不进行 DNS 解析,直接显示 IP 地址 |
|
| 设置目标端口。根据方法不同,初始值分别为:UDP 默认 33434,ICMP 默认从 1 开始增加,TCP 默认 80 |
|
| 设置 TOS(IPv4 的 Type of Service)或 TC(IPv6 的 Traffic Class)值 |
|
| 为 IPv6 数据包指定 Flow Label |
|
| 设置等待响应的最大时间: - HERE: 同一跳响应时间的倍数(默认 3) - NEAR: 下一跳响应时间的倍数(默认 10) - MAX: 最大秒数(默认 5.0) |
|
| 每个跳点发送的探测次数(默认为 3) |
| - | 绕过正常路由,直接发送到本地网络中的主机 |
|
| 指定发送数据包的源地址 |
|
| 探测之间的最小间隔时间(默认为 0)。如果大于 10,则单位为毫秒;否则为秒(支持浮点数) |
|
| 显示 ICMP 扩展信息(如 MPLS) |
|
| 在路由注册表中查找 AS 路径,并在对应地址后打印结果 |
|
| 指定 traceroute 模块(内置或外部),例如 |
|
| 为模块指定特定选项,多个选项用逗号分隔。使用 |
| - | 指定发送数据包的源端口,隐含 |
| - | 为发送的数据包设置防火墙标记 |
|
| 使用 UDP 协议进行追踪(默认端口为 53) |
| - | 使用 UDPLITE 协议进行追踪(默认端口为 53) |
|
| 使用 DCCP Request 协议进行追踪(默认端口为 33434) |
|
| 使用指定协议(prot)的原始数据包进行追踪 |
| - | 发现路径 MTU,等价于 |
| - | 推测反向路径的跳数,并在有差异时打印 |
|
| 显示版本信息并退出 |
| - | 显示帮助信息并退出 |

*符号:表示该探测包未收到响应(可能被防火墙过滤或节点未回复)。参数 | 说明 | 示例 |
|---|---|---|
| 设置最大追踪跳数(默认30) |
|
| 每跳发送的探测包数量(默认3) |
|
| 使用ICMP协议(替代默认UDP) |
|
| 使用TCP SYN(端口80) |
|
| 不解析IP为域名(加速输出) |
|
| 设置等待响应的超时秒数(默认5秒) |
|
traceroute -n 8.8.8.8*,可能是防火墙丢弃ICMP/UDP包。traceroute -I -m 10 target.comtraceroute -T api.service.com # TCP SYN
traceroute -I api.service.com # ICMProot权限:sudo traceroute -I 10.20.30.40mtr:实时结合traceroute与ping,动态监控路径质量:mtr -n 8.8.8.8tracepath:无需root权限,适合基础诊断:tracepath example.comtraceroute探测,需遵守合规要求。Q1:为什么某些跳显示*?
-w超时时间)。Q2:如何追踪IPv6地址?
traceroute6命令:traceroute6 ipv6.google.comQ3:输出中的IP全是内网地址?
可能经过NAT网关,需检查网络架构。
traceroute是Linux网络诊断的瑞士军刀,通过分析数据包路径,可快速定位路由异常、防火墙拦截及延迟瓶颈。掌握其核心参数与输出解读,结合mtr等工具,能显著提升网络故障排查效率。对于复杂场景,建议多次测试并交叉验证不同协议的结果,以获取准确结论。