网络诊断工具之 traceroute

traceroute是一种计算机网络诊断工具,它的主要作用是展示数据包从一个网络节点到达另一个网络节点所经过的路径。traceroute 在Linux、Unix、Windows 等操作系统中都有实现,在 windows 下叫 tracetcp。

原理

traceroute的工作原理是利用IP协议的“生存时间”(TTL)字段。当数据包在网络中传输时,每经过一个网络节点(如路由器或防火墙),TTL值就会减1,当TTL值减为0时,该数据包就会被丢弃,同时发送一个ICMP“超时”错误消息回源节点。traceroute就是通过发送一系列TTL值从1开始递增的数据包,然后依次接收并记录返回的ICMP错误消息,从而获得从源节点到目标节点的路径信息。

使用场景

traceroute主要用于诊断网络问题,如网络延迟、丢包等。它可以显示出数据包从源节点到目标节点所经过的所有网络节点,以及每个节点的IP地址和主机名,还可以显示出数据包到达每个节点所需要的时间。因此,通过traceroute,我们可以了解网络的结构,找出网络的瓶颈,定位网络问题。

用法

在Linux中,traceroute的基本用法是 traceroute [选项] 目标,其中目标可以是IP地址或域名。例如,traceroute www.google.com会显示出从当前主机到www.google.com的路径。

traceroute有许多选项,如:

-I:使用ICMP ECHO而不是UDP数据包。
-n:不解析IP地址为主机名。
-f:设置第一个数据包的TTL值。
-m:设置最大的TTL值。
-q:设置每个节点发送的查询数。
-w:设置等待响应的超时时间。

示例

traceroute www.google.com

然后你可能会看到类似以下的输出:

traceroute to www.google.com (216.58.217.36), 30 hops max, 60 byte packets
 1  gateway (192.168.1.1)  0.273 ms  0.387 ms  0.466 ms
 2  10.0.0.1 (10.0.0.1)  10.686 ms  10.686 ms  10.665 ms
 3  172.18.12.12 (172.18.12.12)  15.213 ms  15.190 ms  15.166 ms
 4  192.0.2.1 (192.0.2.1)  15.141 ms  15.117 ms  15.093 ms
 5  203.0.113.1 (203.0.113.1)  15.069 ms  15.046 ms  15.022 ms
 6  198.51.100.1 (198.51.100.1)  14.998 ms  14.974 ms  14.951 ms
 7  203.0.113.1 (203.0.113.1)  14.927 ms  14.903 ms  14.880 ms
 8  8.8.8.8 (8.8.8.8)  14.856 ms  14.832 ms  14.809 ms
 9  dns.google (216.58.217.36)  14.784 ms  14.761 ms  14.738 ms

这个输出告诉我们,从你的计算机到Google主页的数据包需要经过9个网络节点,每个节点的IP地址和到达该节点所需的时间都列出来了。

在traceroute的输出结果中,每一行代表一个网络节点,每个节点后面的三个时间值是traceroute发送三个数据包到达该节点所需要的时间。

traceroute默认会向每个节点发送三个数据包,这是为了获得更准确的结果,因为网络延迟可能会有波动。这三个时间值就是这三个数据包从发送到收到回应所经过的时间,单位是毫秒。

如果你看到三个时间值有较大的差异,那可能意味着网络延迟有较大的波动,这可能是网络问题的一个迹象。如果你看到某个节点的所有时间值都是星号(*),那可能意味着数据包没有到达该节点,或者该节点没有回应,这可能是网络问题的一个迹象。

注意事项

  • traceroute可能需要root权限才能运行。
  • traceroute的结果可能会受到网络状况的影响,因此可能需要多次运行以获得准确的结果。
  • 由于一些网络节点可能会丢弃或者不回应traceroute的查询,因此traceroute的结果可能会不完整或者不准确。
  • 一些网络节点可能会对traceroute的查询进行限速,这可能会影响traceroute的结果。
  • 由于网络的动态性,traceroute显示的路径可能会随着时间的推移而改变。

并不是所有网关都会如实返回 ICMP 超时报文。出于安全性考虑,大多数防火墙以及启用了防火墙功能的路由器缺省配置为不返回各种 ICMP 报文,其余路由器或交换机也可被管理员主动修改配置变为不返回 ICMP 报文。因此 Traceroute 程序不一定能拿全所有的沿途网关地址。所以,当某个 TTL 值的数据包得不到响应时,并不能停止这一追踪过程,程序仍然会把 TTL 递增而发出下一个数据包。一直达到默认或用参数指定的追踪限制(maximum_hops)才结束追踪。