1. 写在前面
traceroute
是一种用于识别数据包从源到目的地路径的网络诊断工具。在大多数操作系统中与其他 Linux 命令(如 ping
、ip
和 netstat
,或较新替代命令 ss
)一起,用于排除网络连接问题,识别网络中的瓶颈,并了解数据包在互联网上的传播路径。traceroute
linux下命令,默认使用 udp 探测。tracert
windows下命令,默认使用 icmp
探测。
本文介绍了 traceroute
或 tracert
命令、其工作原理以及如何在 Linux、Windows 上运行和读取。
2. 什么是 Traceroute?
traceroute
是一种用于网络故障排除的命令,用于映射数据包在网络中的传输路径。该工具有助于发现从信息源到目的地的路径。此外,该命令还有助于计算各点之间的传输时间。
当应用于网络故障排除时,traceroute
可帮助定位源和目的地之间流量变慢的位置。
3. Traceroute 如何工作?
该协议会将 ICMP
(Internet 控制信息协议)数据包发送到在来源地和目的地之间传输的每个路由器。运行跟踪路由时,输出会显示:
-
成功接收数据包路由器的 IP 地址;
-
传输延迟,或者三个发包中每个包获得响应所花费的时间;
traceroute
类似于一系列 ping
命令。ping
要求目的地做出响应,而 traceroute
则收集中间信息。
为了收集源和目标之间的可用信息,跟踪路由会将数据包的 TTL(生存时间)降低到最小值 (1)。 当路由器收到信息时,会将 TTL 值递减至 0,表示应将信息发送回源。 源收集中间路由器信息,将 TTL 值重置为 1,然后递增。
这样,数据包就会到达网络中的下一个路由器。这个迭代过程不断重复,直到最终数据包到达目的地 IP。然后,traceroute
会识别目的地 IP,并输出收集到的所有中间信息。
4. 如何运行 Traceroute?
大多数发行版操作系统都可以使用 traceroute
, 该程序是一个命令行工具,根据操作系统的不同,具有不同的选项和语法。
默认情况下,traceroute
的跳数为 30 跳,IPv4 数据包大小为 60 字节,IPv6 数据包大小为 80 字节。
4.1 在 Linux 上运行 Traceroute
在 Ubuntu 上,traceroute
命令默认情况下不可用。请使用 apt
软件包管理器安装该工具。
1. 打开终端(CTLR+ALT+T
),用以下命令安装 traceroute
:
sudo apt install traceroute
2. traceroute 语法:
traceroute [options] <hostname or IP> [packet length]
例如:
root@dev:~# traceroute 122.195.214.217
------------------------------------------------------------------------------------
traceroute to 131.153.40.84 (131.153.40.84), 30 hops max, 60 byte packets
1 _gateway (10.100.0.1) 0.766 ms 0.638 ms 0.628 ms
2 172.16.0.1 (172.16.0.1) 2.203 ms 2.135 ms 2.104 ms
3 122.231.65.193 (122.231.65.193) 5.767 ms 5.356 ms 5.291 ms
4 183.159.251.140 (183.159.251.140) 4.277 ms 183.159.251.138 (183.159.251.138) 3.807 ms 183.159.251.142 (183.159.251.142) 3.378 ms
5 * * 183.159.251.153 (183.159.251.153) 14.658 ms
6 115.233.18.17 (115.233.18.17) 4.115 ms 220.191.132.5 (220.191.132.5) 4.834 ms 183.157.213.225 (183.157.213.225) 7.535 ms
7 202.97.23.217 (202.97.23.217) 13.314 ms * 202.97.102.25 (202.97.102.25) 7.569 ms
8 * * 202.97.62.98 (202.97.62.98) 12.261 ms
9 202.97.12.201 (202.97.12.201) 7.588 ms 202.97.39.201 (202.97.39.201) 12.132 ms 202.97.39.197 (202.97.39.197) 11.610 ms
10 202.97.93.154 (202.97.93.154) 189.844 ms 202.97.70.34 (202.97.70.34) 202.606 ms 202.97.93.154 (202.97.93.154) 190.681 ms
11 ae77.edge3.London15.Level3.net (195.50.126.217) 301.870 ms 302.801 ms 278.012 ms
12 * ae5.5.bar2.Zagreb1.level3.net (4.69.136.77) 243.854 ms 226.751 ms
13 212.162.29.110 (212.162.29.110) 222.691 ms 230.816 ms 230.704 ms
14 bg-tp-r-1-hg4-0.sbb.rs (89.216.5.250) 228.945 ms 228.876 ms 252.374 ms
15 peer-as12189.sbb.rs (82.117.192.107) 283.071 ms 255.811 ms 279.369 ms
16 * 131.153.98.28 (131.153.98.28) 272.603 ms 266.854 ms
17 10.234.201.10 (10.234.201.10) 289.264 ms 263.557 ms 10.234.200.10 (10.234.200.10) 261.409 ms
或者使用主机名:
traceroute www.runoob.com
常见选项:
参数 | 描述 |
---|---|
-d | 使用Socket层级的排错功能; |
-f | 设置第一个检测数据包的存活数值TTL的大小; |
-F | 设置勿离断位; |
-g | 设置来源路由网关,最多可设置8个; |
-i | 使用指定的网络界面送出数据包; |
-I | 使用ICMP回应取代UDP资料信息; |
-m | 设置检测数据包的最大存活数值TTL的大小; |
-n | 直接使用IP地址而非主机名称; |
-p | 设置UDP传输协议的通信端口; |
-r | 忽略普通的Routing Table,直接将数据包送到远端主机上; |
-s | 设置本地主机送出数据包的IP地址; |
-t | 设置检测数据包的TOS数值; |
-v | 详细显示指令的执行过程; |
-w | 设置等待远端主机回报的时间; |
-x | 开启或关闭数据包的正确性检验;5 |
注:Linux 上也有一个类似的命令,名为 tracepath。两者的主要区别在于,traceroute 提供了更多选项,其中一些需要 root 权限。另一方面,tracepath 适用于所有用户,输出的信息较少。
4.1.1 Linux 上 Traceroute 的高级选项
默认情况下,traceroute
会发送 UDP 数据包。添加选项 -I
用于 ICMP
探测数据包:
traceroute -I <hostname or IP>
包含 -n
选项可隐藏设备名称,使输出更简洁:
traceroute -In <hostname or IP>
示例:
root@dev:~# traceroute -In 131.153.40.84
------------------------------------------------------------------------------------
traceroute to 131.153.40.84 (131.153.40.84), 30 hops max, 60 byte packets
1 10.100.0.1 1.327 ms 1.273 ms 1.495 ms
2 172.16.0.1 2.342 ms 2.401 ms 2.504 ms
3 122.231.65.193 11.144 ms 19.233 ms 19.351 ms
4 * * *
5 * * *
6 61.164.24.101 8.735 ms * *
7 * * *
8 202.97.24.214 10.106 ms 10.287 ms 9.946 ms
9 202.97.12.206 13.688 ms 13.526 ms 13.917 ms
10 202.97.93.154 191.109 ms 191.137 ms 190.629 ms
11 * 195.50.126.217 283.923 ms 285.350 ms
12 4.69.136.77 229.941 ms * *
13 212.162.29.110 222.599 ms 222.595 ms 222.585 ms
14 89.216.5.250 240.698 ms * *
15 82.117.192.107 909.386 ms 910.353 ms *
16 * 131.153.98.28 944.006 ms 941.079 ms
17 * 10.234.200.10 503.295 ms *
18 * * *
19 131.153.40.84 513.007 ms 513.043 ms 513.165 ms
默认情况下,发送的数据包数量为三个。可以使用 -q
选项更改数据包数量,然后再输入数据包数量:
traceroute -Inq <number> <hostname or IP>
示例:
root@dev:~# traceroute -Inq 1 131.153.40.84
------------------------------------------------------------------------------------
traceroute to 131.153.40.84 (131.153.40.84), 30 hops max, 60 byte packets
1 10.100.0.1 0.809 ms
2 172.16.0.1 1.802 ms
3 122.231.65.193 4.686 ms
4 *
5 183.159.251.144 4.979 ms
6 *
7 *
8 202.97.24.214 10.160 ms
9 *
10 202.97.93.154 192.415 ms
11 195.50.126.217 179.133 ms
12 4.69.136.77 237.073 ms
13 212.162.29.110 211.082 ms
14 89.216.5.250 232.885 ms
15 82.117.192.107 260.890 ms
16 131.153.98.28 288.271 ms
17 10.234.200.10 265.723 ms
18 131.153.40.84 281.508 ms
将数据包数量降至一个,可提高跟踪路由的速度。
有关 traceroute
的所有其他选项,请在终端中使用 man
命令查看手册页面:
man traceroute
手册中包含所有可用命令选项的信息,以及如何将这些选项应用到命令中。
4.2 在 Windows 中运行 Traceroute
traceroute
适用于 Windows,使用较短的名称 tracert
。要在 Windows 上运行 traceroute
,请按照以下步骤操作:
(1) 按下 Windows 键并输入 CMD;
(2) 按 Enter 键打开命令提示符;
(3) 运行 traceroute;
tracert [options] <hostname or IP>
当 traceroute
完成时,输出会在控制台打印 Trace complete
;
5. 如何读取 Traceroute 输出?
运行 traceroute
时,输出结果会显示数据包前往目标点的路径。打印结果分为三列:
root@dev:~# traceroute 8.8.8.8
------------------------------------------------------------------------------------
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1 _gateway (10.100.0.1) 1.194 ms 1.045 ms 1.048 ms
2 172.16.0.1 (172.16.0.1) 2.344 ms 2.255 ms 2.284 ms
3 122.231.65.193 (122.231.65.193) 4.708 ms 4.642 ms 5.359 ms
4 * * *
5 183.159.251.157 (183.159.251.157) 4.748 ms 183.159.251.131 (183.159.251.131) 4.480 ms *
6 220.191.132.1 (220.191.132.1) 4.959 ms 183.157.213.229 (183.157.213.229) 6.759 ms 183.129.250.141 (183.129.250.141) 7.615 ms
7 * 202.97.101.249 (202.97.101.249) 8.760 ms *
8 * 202.97.94.237 (202.97.94.237) 21.002 ms 202.97.24.158 (202.97.24.158) 18.938 ms
9 202.97.12.194 (202.97.12.194) 10.739 ms 202.97.39.185 (202.97.39.185) 13.575 ms 202.97.39.53 (202.97.39.53) 10.425 ms
10 202.97.41.238 (202.97.41.238) 153.968 ms 202.97.90.222 (202.97.90.222) 162.802 ms 202.97.51.38 (202.97.51.38) 162.731 ms
11 ix-ae-14-0.tcore2.lvw-losangeles.as6453.net (64.86.252.62) 202.249 ms * 218.30.54.245 (218.30.54.245) 196.315 ms
12 209.85.173.4 (209.85.173.4) 192.213 ms * *
13 192.178.87.211 (192.178.87.211) 212.245 ms 142.250.164.40 (142.250.164.40) 166.604 ms 142.251.255.145 (142.251.255.145) 185.317 ms
14 * 142.251.70.107 (142.251.70.107) 186.634 ms *
15 dns.google (8.8.8.8) 194.132 ms 192.855 ms 160.733 ms
输出结果分析:
1 _gateway (10.100.0.1) 1.194 ms 1.045 ms 1.048 ms
2 172.16.0.1 (172.16.0.1) 2.344 ms 2.255 ms 2.284 ms
3 122.231.65.193 (122.231.65.193) 4.708 ms 4.642 ms 5.359 ms
... ...
-
每行表示一个路由器跳数。第一列显示跳数;
-
后三列显示了总共三个数据包的往返时间 (RTT);
-
对于附近的网络,这些数字通常低于 100 毫秒;
-
对于其他国家的远距离网络,典型的 RTT 值高达 300 毫秒;
在 “Request timed out” 信息后,可能会出现三个星号 (* * *),而不是数字,一般引起原因:
* 路由器故障;
* 路由器被配置为不返回 traceroute 结果;
* 路由器上启用了防火墙;
* 前一个路由器超时;
-
第2列显示目标 IP 地址,并尽可能显示已解析的域名;
traceroute
输出行共分为五个单元: -
本地网络。
-
本地网络的互联网服务提供商 (ISP)。
-
互联网。
-
目的地主机的网络。
-
目标地址。
在 traceroute
或 tracert
命令末尾添加 > <filename>.txt
以将结果保存到文本文件中,供以后使用和分析。例如,在 Linux 和 macOS 上:
traceroute 8.8.8.8 > results.txt
Windows 用户可以按照相同的步骤操作:
tracert 8.8.8.8 > result.txt
感谢您花时间阅读文章!
收藏本站不迷路!
原文始发于微信公众号(滑翔的纸飞机):如何在 Linux、Windows 上运行 Traceroute(路由跟踪)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/260896.html