Linux tracert命令使用详解 - 追踪数据包从源主机到目标主机的路径
tracert
(Windows)或 traceroute
(Linux/macOS)是一个网络诊断工具,用于追踪数据包从源主机到目标主机的路径,并显示途径的每一跳(路由器或节点)的延迟和状态。它通过发送 ICMP/UDP/TCP 探测包并分析响应时间,帮助排查网络延迟或路由问题。
基本语法
Windows (tracert
)
tracert [选项] 目标主机或IP
Linux/macOS (traceroute
)
traceroute [选项] 目标主机或IP
常用选项
-d
-n
-h 最大跳数
-m 最大跳数
-w 超时毫秒
-w 超时秒
-4
-4
-6
-6
-I
ping
)-T
-U
工作原理
- 发送探测包
- Windows:默认使用 ICMP 协议。
- Linux:默认使用 UDP 协议(可切换为
-I
或-T
)。
- TTL递增
- 首次发送TTL=1的包,途径的第一台路由器会返回
Time Exceeded
错误。 - 逐步增加TTL,直到到达目标主机或超过最大跳数。
- 首次发送TTL=1的包,途径的第一台路由器会返回
- 计算延迟
- 对每一跳发送3个探测包,显示往返时间(RTT)。
输出解析
以Windows tracert
为例:
tracert www.google.com 1 1 ms <1 ms <1 ms 192.168.1.1 # 第一跳:本地路由器 2 10 ms 10 ms 11 ms 100.64.0.1 # 第二跳:ISP网关 3 * * * 请求超时 # 可能被防火墙拦截 4 15 ms 14 ms 13 ms 203.0.113.45 # 第四跳:骨干网节点 ... 12 30 ms 31 ms 30 ms 172.217.160.110 # 目标服务器
- 每行格式:
跳数 RTT1 RTT2 RTT3 节点IP或主机名
*
:表示超时(可能因防火墙丢弃探测包)。- 延迟单位:毫秒(ms)。
常见用途
1. 诊断网络延迟
tracert www.baidu.com # 查看哪一跳延迟高
- 如果中间某跳延迟激增,可能是网络拥塞或故障节点。
2. 检测路由环路
traceroute -m 20 203.0.113.1 # 限制跳数,避免无限循环
- 如果出现重复的IP,可能存在路由环路。
3. 检查防火墙拦截
traceroute -I 8.8.8.8 # 使用ICMP协议(可能被防火墙放行)
- 如果
UDP
探测超时但ICMP
能通,说明目标屏蔽了UDP。
4. 对比路径(多运营商)
traceroute -T -p 443 www.github.com # 使用TCP 443端口
- 不同协议/端口可能走不同路径(如TCP 80 vs UDP 53)。
高级技巧
1. 绕过DNS解析(加快速度)
traceroute -n 8.8.8.8 # 不解析IP为主机名
2. 指定源接口(多网卡环境)
traceroute -i eth1 203.0.113.1 # Linux:从eth1网卡发送
3. 保存结果到文件
tracert www.example.com > C:\\path\\to\\log.txt
4. 检测MTU问题
如果某跳之后全部超时,可能是MTU不匹配(需配合ping -f
进一步检查)。
常见问题
Q1: 为什么某些跳显示*
?
- 节点配置了不响应ICMP/UDP(常见于防火墙或运营商设备)。
- 解决方法:尝试
traceroute -T
(TCP)或traceroute -I
(ICMP)。
Q2: 目标延迟高,如何定位问题?
- 对比多个探测点,如果从某一跳开始延迟增加,问题可能出在该节点或上游链路。
Q3: Windows和Linux的tracert
/traceroute
区别?
tracert
)traceroute
)-T -p 80
)-s 64
)替代工具
mtr
:结合ping
+traceroute
,实时监控每跳丢包率(Linux)。pathping
(Windows):类似mtr
,提供统计信息。
总结
- 基本命令:
tracert 目标
(Windows)或traceroute 目标
(Linux)。 - 关键场景:排查延迟、路由异常、防火墙拦截。
- 技巧:使用
-n
加速、-I
/-T
切换协议、-m
限制跳数。