我要入营,结交更多好友,开启更多功能,轻松玩转服务器大本营!
您需要 登录 才可以下载或查看,没有账号?我要入营
x
一、traceroute介绍
1、基本介绍
在网络故障排查中,快速定位数据包传输路径的异常节点至关重要。traceroute(或tracert在Windows中)是Linux系统中用于追踪数据包从源主机到目标主机经过的路由路径的核心工具。通过分析每一跳(Hop)的延迟和丢包情况,可精准诊断网络连接问题(如延迟高、路由环路、防火墙拦截等)。本文将从基础使用到高级技巧,全面解析traceroute的功能与实践。
2、核心原理
traceroute通过发送一系列探测包(默认使用UDP协议,端口从33434递增)并监控其路径,实现路由追踪。其核心逻辑基于TTL(Time-To-Live)机制:
1)发送第一个探测包时设置TTL=1,到达第一个路由器后TTL减为0,触发ICMP Time Exceeded响应。
2)逐步增加TTL值(TTL=2,3,...),直至探测包到达目标主机或达到最大跳数(默认30跳)。
3)通过分析每个路由节点的响应时间和IP地址,绘制完整路径。
二、安装与基本使用
1、安装traceroute
不同Linux发行版的安装方式:
- # Debian/Ubuntu
- apt install traceroute
- # CentOS/RHEL
- yum install traceroute
- # 或使用新版本dnf
- dnf install traceroute
- # Arch Linux
- pacman -S traceroute
复制代码
本机测试环境为Ubuntu 22.04.1 LTS,安装命令如下所示:
- apt install traceroute -y
复制代码
Linux系统常见命令之网络追踪traceroute命令详解
2、基础语法
traceroute 常用选项
| 选项 | 简写 | 描述 | | -4 | - | 强制使用IPv4 | | -6 | - | 强制使用IPv6 | | -d | --debug | 启用socket层调试 | | -F | --dont-fragment | 不分片数据包 | | -f first_ttl | --first=first_ttl | 指定起始TTL(默认从1开始) | | -g gate,... | --gateway=gate,... | 指定网关路由(最多8个IPv4或127个IPv6) | | -I | --icmp | 使用ICMP ECHO进行追踪 | | -T | --tcp | 使用TCP SYN进行追踪,默认端口为80 | | -i device | --interface=device | 指定使用的网络接口 | | -m max_ttl | --max-hops=max_ttl | 设置最大跳数(默认为30) | | -N squeries | --sim-queries=squeries | 设置同时探测的数量(默认为16) | | -n | - | 不进行DNS解析,直接显示IP地址 | | -p port | --port=port | 设置目标端口。根据方法不同,初始值分别为:UDP默认33434,ICMP默认从1开始增加,TCP默认80 | | -t tos | --tos=tos | 设置TOS(IPv4的Type of Service)或TC(IPv6的Traffic Class)值 | | -l flow_label | --flowlabel=flow_label | 为IPv6数据包指定Flow Label | | -w MAX,HERE,NEAR | --wait=MAX,HERE,NEAR | 设置等待响应的最大时间:
-HERE:同一跳响应时间的倍数(默认3)
-NEAR:下一跳响应时间的倍数(默认10)
-MAX:最大秒数(默认5.0) | | -q nqueries | --queries=nqueries | 每个跳点发送的探测次数(默认为3) | | -r | - | 绕过正常路由,直接发送到本地网络中的主机 | -s src_addr
| --source=src_addr | 指定发送数据包的源地址 |
| -e | --extensions | 显示ICMP扩展信息(如MPLS) | | -A | --as-path-look ups | 在路由注册表中查找AS路径,并在对应地址后打印结果 | | -M name | --module=name | 指定traceroute模块(内置或外部),例如-I 相当于 -M icmp | | -O OPTS,... | --options=OPTS,... | 为模块指定特定选项,多个选项用逗号分隔。使用help查看可用模块选项 | | --sport=num | - | 指定发送数据包的源端口,隐含-N 1 | | --fwmark=num | - | 为发送的数据包设置防火墙标记 | | -U | --udp | 使用UDP协议进行追踪(默认端口为53) | | -UL | - | 使用UDPLITE协议进行追踪(默认端口为53) | | -D | --dccp | 使用DCCP Request协议进行追踪(默认端口为33434) | | -P prot | --protocol=prot | 使用指定协议(prot)的原始数据包进行追踪 | | --mtu | - | 发现路径MTU,等价于-F -N 1 | | --back | - | 推测反向路径的跳数,并在有差异时打印 | | -V | --version | 显示版本信息并退出 | | --help | - | 显示帮助信息并退出 |
三、基本使用
PS:追踪到百度的路径traceroute www.baidu.com
Linux系统常见命令之网络追踪traceroute命令详解
简单解释:
第1列:跳数(Hop),从1开始递增。
第2列:路由节点的IP地址和域名(若可解析)。
后续列:每个探测包的往返时间(RTT),默认发送3个探测包。
*符号:表示该探测包未收到响应(可能被防火墙过滤或节点未回复)。
四、常用参数与场景
| 参数 | 说明 | 示例 | | -m 最大跳数 | 设置最大追踪跳数(默认30) | traceroute -m 20 google.com | | -q 探测次数 | 每跳发送的探测包数量(默认3) | traceroute -q 5 github.com | | -I | 使用ICMP协议(替代默认UDP) | traceroute -I 8.8.8.8 | | -T | 使用TCP SYN(端口80) | traceroute -T example.com | | -n | 不解析IP为域名(加速输出) | traceroute -n 1.1.1.1 | | -w 超时时间 | 设置等待响应的超时秒数(默认5秒) | traceroute -w 3 api.cloud.com |
五、典型应用场景
1、定位网络延迟问题
观察哪一跳的RTT突然增加,判断瓶颈节点(如跨国路由拥堵)。
2、检测防火墙拦截
若某跳后连续出现*,可能是防火墙丢弃ICMP/UDP包。traceroute -I -m 10 target.com
3、绕过DNS解析问题
直接使用IP地址,避免因DNS故障导致的追踪失败。traceroute -n 203.0.113.5
4、对比不同协议路径
某些网络可能对TCP/UDP/ICMP路径不同,需针对性测试。
- traceroute -T api.service.com # TCP SYN
- traceroute -I api.service.com # ICMP
复制代码
六、高级技巧与注意事项
1、权限要求
undefined使用ICMP或TCP探测时,可能需要root权限:
- sudo traceroute -I 10.20.30.40
复制代码
2、路径不对称问题
undefined网络中的往返路径可能不同,需结合反向追踪(从目标到源)分析。
3、替代工具
mtr:实时结合traceroute与ping,动态监控路径质量:mtr -n 8.8.8.8
tracepath:无需root权限,适合基础诊断:tracepath example.com
4、隐私与安全
部分企业网络会屏蔽traceroute探测,需遵守合规要求。
输出中暴露的IP可能泄露内网结构,分享时需脱敏。
七、常见问题解答
Q1:为什么某些跳显示*?
节点配置了防火墙丢弃探测包。
网络拥塞导致响应超时(尝试增加-w超时时间)。
Q2:如何追踪IPv6地址?
使用traceroute6命令:
- traceroute6 ipv6.google.com
复制代码
Q3:输出中的IP全是内网地址?
可能经过NAT网关,需检查网络架构。
八、总结
traceroute是Linux网络诊断的瑞士军刀,通过分析数据包路径,可快速定位路由异常、防火墙拦截及延迟瓶颈。掌握其核心参数与输出解读,结合mtr等工具,能显著提升网络故障排查效率。对于复杂场景,建议多次测试并交叉验证不同协议的结果,以获取准确结论。
感谢您的阅读,服务器大本营-技术文章内容集合站,助您成为更专业的服务器管理员!
|