traceroute命令

traceroute 命令 #

traceroute命令用于显示数据包从源主机到目标主机所经过的路由路径。它通过发送具有递增TTL(生存时间)值的数据包,并记录每个路由器的响应,从而绘制出网络路径图。这对于网络故障排除、路由分析和网络延迟诊断非常有用。

语法 #

traceroute [选项] 主机名或IP地址 [数据包长度]

常用选项 #

选项 描述
-4 强制使用IPv4
-6 强制使用IPv6
-F 设置"不分片"标志
-f 第一跳 设置初始TTL值
-g 网关 指定松散源路由网关(最多8个)
-I 使用ICMP ECHO代替UDP
-T 使用TCP SYN代替UDP
-m 最大跳数 设置最大跳数(默认30)
-N 并发查询数 设置并发查询的数量
-n 不解析IP地址为主机名
-p 端口 设置目标端口(默认33434)
-q 查询数 设置每跳发送的探测数(默认3)
-r 绕过正常的路由表,直接发送到连接的网络主机
-s 源地址 使用指定的源IP地址
-t 服务类型 设置IP服务类型(TOS)
-w 等待时间 设置响应超时时间(秒)
-z 暂停时间 设置探测之间的暂停时间(毫秒)
--help 显示帮助信息
-V, --version 显示版本信息

输出说明 #

traceroute的输出通常包含以下信息:

  1. 跳数:从源主机到当前路由器的跳数
  2. 路由器信息:路由器的主机名和IP地址
  3. 响应时间:通常显示三个探测包的往返时间(RTT),单位为毫秒
  4. 特殊标记
    • *:表示探测超时,没有收到响应
    • !H:主机不可达
    • !N:网络不可达
    • !P:协议不可达
    • !X:通信被管理性禁止
    • !A:管理性禁止
    • !S:源路由失败
    • !F:需要分片但设置了DF(不分片)标志

常见用法 #

1. 基本用法 #

traceroute example.com

这将显示从本地主机到example.com的路由路径。

2. 使用IPv4 #

traceroute -4 example.com

3. 使用IPv6 #

traceroute -6 ipv6.example.com

4. 不解析主机名 #

traceroute -n example.com

这将显示IP地址而不是主机名,加快查询速度。

5. 使用ICMP ECHO请求 #

traceroute -I example.com

这在某些只允许ICMP流量的防火墙环境中很有用。

6. 使用TCP SYN请求 #

traceroute -T -p 80 example.com

这将使用TCP SYN包到目标的80端口,对于只允许TCP流量的环境很有用。

7. 设置最大跳数 #

traceroute -m 15 example.com

这将限制最大跳数为15(默认为30)。

8. 增加每跳的查询次数 #

traceroute -q 5 example.com

这将每跳发送5个探测包(默认为3)。

9. 设置源IP地址 #

traceroute -s 192.168.1.100 example.com

这在多网卡系统中很有用,可以指定使用哪个网络接口。

10. 设置超时时间 #

traceroute -w 2 example.com

这将设置响应超时时间为2秒(默认为5秒)。

实用示例 #

1. 排查网络连接问题 #

traceroute -n -w 1 -q 1 8.8.8.8

这将快速检查到Google DNS服务器的路由路径,使用数字IP地址,每跳只发送一个探测包,超时时间为1秒。

2. 比较不同目标的路由路径 #

traceroute google.com > google.txt
traceroute bing.com > bing.txt
diff google.txt bing.txt

这将比较到Google和Bing的路由路径差异。

3. 检测网络瓶颈 #

traceroute -n -q 10 example.com

通过发送更多探测包并分析响应时间,可以帮助识别网络瓶颈。

4. 使用不同协议进行比较 #

# 使用UDP(默认)
traceroute example.com > trace_udp.txt
# 使用ICMP
traceroute -I example.com > trace_icmp.txt
# 使用TCP
traceroute -T -p 80 example.com > trace_tcp.txt

这将比较使用不同协议时的路由路径差异。

5. 检查MTU问题 #

traceroute -F -I example.com

使用"不分片"标志可以帮助检测MTU问题。

6. 从特定接口发送探测 #

traceroute -i eth0 example.com

这将从指定的网络接口发送探测包。

7. 结合ping进行全面分析 #

ping -c 5 example.com && traceroute example.com

先使用ping检查连通性,再使用traceroute分析路由路径。

8. 持续监控路由变化 #

while true; do
    date
    traceroute -n -q 1 example.com
    echo "-----------------------------------"
    sleep 300  # 每5分钟执行一次
done > route_monitoring.log

这将每5分钟检查一次路由路径,并记录到日志文件中。

9. 分析国际路由 #

traceroute -n -w 2 international-site.com

对于国际网站,可能需要更长的超时时间来分析跨国路由。

10. 检查IPv4和IPv6路由差异 #

traceroute -4 dual-stack-site.com > ipv4_route.txt
traceroute -6 dual-stack-site.com > ipv6_route.txt

这将比较IPv4和IPv6的路由路径差异。

高级用法 #

1. 使用松散源路由 #

traceroute -g 192.168.1.1 example.com

这将强制数据包通过指定的网关。

2. 设置服务类型 #

traceroute -t 16 example.com  # 最小延迟

这将设置IP包头的TOS字段,影响路由决策。

3. 使用并发查询 #

traceroute -N 16 -q 1 example.com

这将使用16个并发查询,加快大型网络的跟踪速度。

4. 结合其他工具进行分析 #

traceroute example.com | grep -E '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | awk '{print $2}' | xargs -I{} whois {} | grep -E 'Organization|OrgName'

这将提取路由路径中的IP地址,并查询每个IP的组织信息。

5. 可视化路由路径 #

使用mtr工具(结合了tracerouteping的功能):

mtr example.com

或者使用图形化工具:

mtr --report --report-cycles 10 example.com > mtr_report.txt

与其他网络诊断工具的比较 #

工具 优点 缺点 适用场景
traceroute 广泛可用、详细的路由信息 可能被防火墙阻止、单次快照 基本路由分析、网络故障排除
ping 简单、快速、测试连通性 信息有限、可能被阻止 快速连通性测试
mtr 结合ping和traceroute功能、实时更新 不是所有系统默认安装 持续监控路由性能
tracepath 不需要root权限、检测路径MTU 功能较少 普通用户路由分析
tcptraceroute 使用TCP、可穿透某些防火墙 不是所有系统默认安装 穿透防火墙的路由分析

常见问题排查 #

1. 全部显示星号(*) #

traceroute to example.com (93.184.216.34), 30 hops max, 60 byte packets
 1  * * *
 2  * * *
 3  * * *

可能的原因:

  • 防火墙阻止了UDP或ICMP流量
  • 路由器配置为不响应TTL超时

解决方法:

  • 尝试使用不同的协议:traceroute -I(ICMP)或traceroute -T -p 80(TCP到80端口)
  • 检查本地防火墙设置

2. 路径中断 #

traceroute to example.com (93.184.216.34), 30 hops max, 60 byte packets
 1  router.local (192.168.1.1)  1.123 ms  1.456 ms  1.789 ms
 2  isp-gateway.net (203.0.113.1)  12.345 ms  12.678 ms  13.012 ms
 3  * * *
 4  * * *
 5  example-edge.com (198.51.100.1)  45.678 ms  46.012 ms  46.345 ms

可能的原因:

  • 中间路由器配置为不响应TTL超时
  • 防火墙过滤了特定跳数的响应

解决方法:

  • 这通常不是问题,只要最终目的地可达
  • 尝试不同的协议或端口

3. 路由循环 #

traceroute to example.com (93.184.216.34), 30 hops max, 60 byte packets
 1  router.local (192.168.1.1)  1.123 ms  1.456 ms  1.789 ms
 2  isp-gateway.net (203.0.113.1)  12.345 ms  12.678 ms  13.012 ms
 3  core-router-1.isp.net (203.0.113.10)  14.567 ms  14.890 ms  15.234 ms
 4  core-router-2.isp.net (203.0.113.20)  16.789 ms  17.123 ms  17.456 ms
 5  core-router-1.isp.net (203.0.113.10)  14.567 ms  14.890 ms  15.234 ms
 6  core-router-2.isp.net (203.0.113.20)  16.789 ms  17.123 ms  17.456 ms

可能的原因:

  • 路由配置错误
  • 临时网络问题

解决方法:

  • 联系ISP报告问题
  • 稍后再试,可能是临时问题

4. 高延迟或丢包 #

traceroute to example.com (93.184.216.34), 30 hops max, 60 byte packets
 1  router.local (192.168.1.1)  1.123 ms  1.456 ms  1.789 ms
 2  isp-gateway.net (203.0.113.1)  12.345 ms  12.678 ms  13.012 ms
 3  core-router.isp.net (203.0.113.10)  100.567 ms  120.890 ms  *

可能的原因:

  • 网络拥塞
  • 链路质量问题
  • 设备过载

解决方法:

  • 使用mtr进行持续监控,确定问题是持续的还是临时的
  • 联系ISP报告问题
  • 尝试在不同时间进行测试

提示 #

  • 使用-n选项可以加快traceroute的执行速度,因为它不会尝试解析IP地址为主机名
  • 对于网络故障排除,尝试使用不同的协议(UDP、ICMP、TCP)进行比较
  • 结合pingmtr等工具可以获得更全面的网络状况
  • 在企业环境中,许多路由器可能配置为不响应traceroute探测,这是正常的安全措施
  • 对于国际路由分析,可能需要增加超时时间(-w选项)
  • 使用-q 1选项可以加快traceroute的执行速度,但会减少数据点
  • 在脚本中使用traceroute时,使用-n选项并解析输出会更可靠
  • 不同操作系统的traceroute实现可能略有不同,例如macOS和BSD默认使用ICMP
  • 对于详细的网络性能分析,考虑使用专业工具如Wireshark或专用网络监控软件
  • 记录和比较不同时间的traceroute结果可以帮助识别间歇性网络问题