在网络排查中,"为什么访问目标地址失败?""数据卡在了哪个节点?" 这类问题屡见不鲜。路由追踪命令(Linux 的traceroute与 Windows 的tracert)正是解决这类问题的 "网络探针"------ 它能精准定位数据包从本地主机到目标主机的传输路径,暴露每一跳的延迟、丢包等关键信息,是运维、开发及普通用户排查网络故障的核心工具。本文将从语法、适用场景、使用方法、结果解读、问题解决五个维度,全面拆解两个系统的路由追踪命令,让你快速上手。
一、核心概念:路由追踪命令到底是什么?
路由追踪的核心原理是利用 IP 协议的 TTL(生存时间)字段 和ICMP(互联网控制消息协议)反馈机制:
- 本地主机向目标主机发送数据包时,会将 TTL 值设为 1(第一跳);
- 数据包经过第一个路由器时,TTL 减 1 变为 0,路由器会丢弃数据包并返回 "TTL 超时"(ICMP Time Exceeded)消息;
- 本地主机记录该路由器的 IP 和延迟,再将 TTL 设为 2,重复上述过程,直到数据包到达目标主机,目标主机会返回 "端口不可达"(ICMP Port Unreachable)消息,追踪结束。
简单说,路由追踪就像 "给数据包贴了个倒计时标签",通过每一跳的 "超时反馈",画出数据传输的完整路径,同时检测每一段的网络状态。
二、分系统详解:语法、适用场景与使用方法
(一)Linux 系统:traceroute 命令
1. 基础语法
traceroute [选项] 目标地址(IP/域名)
2. 常用选项(核心必记)
|-----------|-----------------------------------|--------------------------------------------------|
| 选项 | 作用 | 示例 |
| -n | 不解析域名(仅显示 IP),速度更快 | traceroute -n 8.8.8.8 |
| -m <跳数> | 设置最大追踪跳数(默认 30 跳) | traceroute -m 20 www.baidu.com(最多追踪 20 跳) |
| -w <秒数> | 设置超时时间(默认 3 秒),避免卡顿 | traceroute -w 1 192.168.1.1(1 秒无响应则判定超时) |
| -q <次数> | 每跳发送的数据包数量(默认 3 个) | traceroute -q 5 www.github.com(每跳发 5 个包,结果更精准) |
| -p <端口> | 指定目标端口(TCP 模式下生效) | traceroute -T -p 80 www.google.com(追踪 TCP 80 端口) |
| -T | 使用 TCP 协议追踪(默认 UDP,部分网络禁用 UDP 时用) | traceroute -T www.taobao.com |
3. 适用场景
- 排查 Linux 服务器访问外网 / 内网服务失败(如无法访问 API 接口、数据库连接超时);
- 定位跨机房、跨地区网络延迟过高的节点(如南方用户访问北方服务器卡顿);
- 检测是否存在路由环路、黑洞路由(数据包被丢弃无反馈);
- 验证 CDN 节点是否生效(如追踪www.taobao.com,看是否经过 CDN 节点)。
4. 基本使用步骤
- 打开 Linux 终端(Ctrl+Alt+T);
- 输入基础命令(如追踪百度):traceroute www.baidu.com;
- 如需精准排查,添加选项:traceroute -n -w 1 -m 25 8.8.8.8(不解析域名、1 秒超时、最多 25 跳);
- 等待结果输出(按 Ctrl+C 可终止追踪)。
(二)Windows 系统:tracert 命令
1. 基础语法
tracert [选项] 目标地址(IP/域名)
2. 常用选项(与 Linux 对应,易记)
|------------|-------------------------------------|-------------------------------------------------|
| 选项 | 作用 | 示例 |
| -d | 不解析域名(仅显示 IP),速度更快 | tracert -d 8.8.8.8 |
| -h <跳数> | 设置最大追踪跳数(默认 30 跳) | tracert -h 20 www.baidu.com |
| -w <毫秒数> | 设置超时时间(默认 4000 毫秒 = 4 秒) | tracert -w 1000 192.168.1.1(1000 毫秒无响应则超时) |
| -q <次数> | 每跳发送的 ICMP 数据包数量(默认 3 个) | tracert -q 5 www.github.com |
| -p <端口> | 指定目标端口(仅 TCP 模式,需配合-T) | tracert -T -p 443 www.google.com(追踪 TCP 443 端口) |
| -T | 使用 TCP 协议追踪(默认 ICMP,部分网络禁用 ICMP 时用) | tracert -T www.taobao.com |
3. 适用场景
- 普通用户排查电脑无法上网、访问网站卡顿(如打开微信网页版失败);
- 办公场景下排查局域网内打印机、共享文件夹连接失败;
- 游戏玩家定位延迟过高的节点(如玩外服游戏时卡顿,看是否卡在国际出口);
- 验证路由器、光猫等设备是否正常转发数据包(如追踪 192.168.1.1,看是否能到达网关)。
4. 基本使用步骤
- 打开 CMD 命令提示符(Win+R→输入cmd→回车);
- 输入基础命令:tracert www.baidu.com;
- 精准排查命令:tracert -d -w 1000 -h 25 8.8.8.8(不解析域名、1 秒超时、最多 25 跳);
- 等待结果输出(按 Ctrl+C 可终止追踪)。
三、结果解读:不同输出代表什么?
无论是traceroute还是tracert,输出格式类似,核心关注跳数、IP / 域名、延迟、超时标识,以下是常见结果及含义:
(一)正常结果示例(Linux)
bash
traceroute to www.baidu.com (180.101.49.11), 30 hops max, 60 byte packets
1 192.168.1.1 (192.168.1.1) 0.523 ms 0.481 ms 0.456 ms # 第1跳:本地网关(路由器),延迟<1ms,正常
2 10.100.0.1 (10.100.0.1) 2.134 ms 2.098 ms 2.071 ms # 第2跳:运营商小区网关,延迟2ms,正常
3 221.226.18.1 (221.226.18.1) 5.345 ms 5.312 ms 5.289 ms# 第3跳:运营商骨干网节点,延迟5ms,正常
...
10 180.101.49.11 (180.101.49.11) 12.456 ms 12.412 ms 12.389 ms # 第10跳:目标主机,追踪结束
正常结果特征:
- 每跳均有 IP / 域名,无超时(*);
- 延迟逐步递增(跨地区 / 跨国时延迟会明显升高,但无突变);
- 最终到达目标地址,无环路(不会重复出现同一 IP)。
(二)异常结果及含义
- 某一跳出现 * * *(超时)
示例(Windows):
bash
tracert www.github.com
1 192.168.1.1 (192.168.1.1) 1ms 1ms 1ms
2 10.100.0.1 (10.100.0.1) 3ms 2ms 2ms
3 * * * # 第3跳超时
4 221.226.20.1 (221.226.20.1) 8ms 7ms 7ms
...
含义:第 3 跳的路由器禁用了 ICMP 反馈(如安全策略拦截),或该节点网络拥堵、故障,但数据包可能仍能继续传输(后续跳数正常则无大碍)。
- 重复出现同一 IP(路由环路)
示例(Linux):
bash
5 203.0.113.10 (203.0.113.10) 20ms 19ms 18ms
6 203.0.113.5 (203.0.113.5) 25ms 24ms 23ms
7 203.0.113.10 (203.0.113.10) 20ms 19ms 18ms
8 203.0.113.5 (203.0.113.5) 25ms 24ms 23ms
...
含义:数据包在两个节点间循环传输(TTL 不断重置),无法到达目标,通常是路由配置错误(如静态路由指向错误)。
- 所有跳数均为 * * *(全程超时)
示例:
bash
traceroute -n 192.168.2.100
1 * * *
2 * * *
...
30 * * *
含义:目标主机不可达,可能原因:目标 IP 不存在、目标主机禁用 ICMP、防火墙拦截、网络链路中断(如网线断开、网关故障)。
- 延迟突变(某一跳延迟飙升)
示例:
bash
5 221.226.18.1 (221.226.18.1) 6ms 5ms 5ms
6 153.37.128.1 (153.37.128.1) 300ms 298ms 295ms # 延迟从6ms飙升到300ms
7 180.101.49.11 (180.101.49.11) 302ms 300ms 298ms
含义:第 6 跳节点可能存在网络拥堵、带宽占用过高(如 P2P 下载)、跨运营商互联(如电信→联通)等问题,导致延迟激增。
四、问题解决:不同异常情况怎么处理?
根据上述异常结果,针对性给出解决方案,覆盖个人用户和运维场景:
(一)某一跳超时(* * *),但后续跳数正常
问题原因:该节点禁用 ICMP 反馈(常见于运营商骨干网、企业网关),或临时拥堵。
解决方法:
- 无需处理:若最终能到达目标(如访问网站正常),仅单跳超时不影响使用;
- 验证网络:用ping 目标地址测试连通性,若 ping 正常则无需干预;
- 更换追踪协议:Linux 用traceroute -T 目标地址(TCP 模式),Windows 用traceroute -T 目标地址,避免 ICMP 被拦截。
(二)路由环路(重复出现同一 IP)
问题原因:路由器 / 网关路由配置错误(如静态路由循环、动态路由协议故障)。
解决方法:
1.个人用户:
重启路由器(拔掉电源 30 秒再插上),重置路由表;
检查本地网络配置(如 IP 是否为静态分配,是否与网关冲突)。
2.运维用户:
登录环路节点路由器,查看路由表(Linux:route -n;路由器:通过 Web 管理界面);
删除错误路由条目,或重新配置动态路由协议(如 OSPF、BGP)。
(三)全程超时(所有跳数* * *)
问题原因:目标不可达、防火墙拦截、链路中断。
解决方法:
1.验证目标地址:确认 IP / 域名正确(如www.github.com是否拼写错误),用nslookup 域名检查 DNS 解析是否正常;
2.检查本地网络:
个人用户:确认电脑已连接网络(Wi-Fi / 网线正常),ping 网关(ping 192.168.1.1),若 ping 不通则重启光猫、路由器;
运维用户:检查服务器网卡配置(ifconfig)、防火墙规则(Linux:iptables -L;Windows:netsh advfirewall show allprofiles),是否拦截 ICMP/TCP。
3.测试目标端口:用telnet 目标IP 端口(如telnet www.baidu.com 80),若端口不通,可能是目标服务未启动或防火墙拦截端口。
(四)延迟突变(某一跳延迟飙升)
问题原因:节点拥堵、跨运营商、带宽不足。
解决方法:
1.个人用户:
关闭占用带宽的应用(如迅雷、云盘同步),重新测试;
更换网络(如手机热点),排除本地网络问题;
访问目标的备用域名 / IP(如百度备用 IP 180.101.49.12)。
2.运维用户:
查看拥堵节点归属(通过whois IP查询运营商),联系运营商优化链路;
更换 CDN 节点或加速线路(如使用 BGP 多线机房);
限制服务器带宽占用(如用tc命令限流),避免带宽饱和。
(五)目标主机可达,但访问慢(整体延迟高)
解决方法:
- 选择更近的节点:如访问国外网站,切换至香港、新加坡节点的 VPN / 代理;
- 优化 DNS:更换公共 DNS(如 8.8.8.8、114.114.114.114),减少 DNS 解析延迟;
- 检查目标服务器负载:运维用户可登录目标服务器,用top(Linux)/任务管理器(Windows)查看 CPU、内存占用,若负载过高需扩容。
五、注意事项与进阶技巧
- 权限要求:Linux 的traceroute默认使用 UDP 端口(33434-33534),普通用户即可执行;若使用-T(TCP)或-I(ICMP)选项,可能需要sudo权限(避免端口占用)。
- 防火墙影响:部分网络环境(如企业内网、校园网)会禁用 ICMP/UDP,导致traceroute/tracert失败,此时优先使用 TCP 模式(-T选项)。
- 批量追踪工具 :若需定期监控路由,可使用mtr(Linux)/pathping(Windows),结合脚本自动化输出报告(如mtr --report www.baidu.com > traceroute_report.txt)。
- 跨平台差异:Linux 的traceroute默认 UDP,Windows 的tracert默认 ICMP,若需一致性结果,建议统一使用 TCP 模式(-T选项)。