Linux traceroute命令

Linux 命令大全

Linux traceroute命令用于显示数据包到主机间的路径。

traceroute指令让你追踪网络数据包的路由途径,预设数据包大小是60Bytes,用户可另行设置。

traceroute的原理是试图以最小的TTL(存活时间)发出探测包来跟踪数据包到达目标主机所经过的网关,然后监听一个来自网关ICMP的应答。

traceroute 语法

traceroute [-dFlnrvx][-f<存活数值>][-g<网关>...][-i<网络界面>][-m<存活数值>][-p<通信端口>][-s<来源地址>][-t<服务类型>][-w<超时秒数>][主机名称或IP地址][数据包大小]

参数说明

traceroute原理:

程序利用增加存活时间(TTL)来实现其功能。每当数据包(3个数据包包括源地址,目的地址和包发出的时间标签)经过一个路由器,其存活时间就会减1。当其存活时间是0时,主机便取消数据包,并传送一个ICMP(Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。) TTL数据包给原数据包的发出者。

traceroute程序完整过程:

首先它发送一份TTL字段为1的IP数据包给目的主机,处理这个数据包的第一个路由器将TTL值减1,然后丢弃该数据报,并给源主机发送一个ICMP报文(“超时”信息,这个报文包含了路由器的IP地址,这样就得到了第一个路由器的地址),然后traceroute发送一个TTL为2的数据报来得到第二个路由器的IP地址,继续这个过程,直至这个数据报到达目的主机。

如果执行 traceroute 提示下面的错误,则说明没有安装次命令

CentOS Linux Error: -bash: traceroute: command not found

[root@xinbiancheng.cn]$ traceroute -m 10 www.baidu.com
-bash: traceroute: command not found

traceroute 命令安装如下:

[root@xinbiancheng.cn]$ yum install traceroute
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
base                                                                                                                                                                     | 3.6 kB  00:00:00  
......显示信息省略
---> Package traceroute.x86_64 3:2.0.22-2.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved
......显示信息省略
Installed:
  traceroute.x86_64 3:2.0.22-2.el7
Complete!

traceroute 实例

[root@xinbiancheng.cn]$ traceroute www.baidu.com
traceroute to www.baidu.com (220.181.38.149), 30 hops max, 60 byte packets
 1  * * *
 2  11.63.128.153 (11.63.128.153)  7.449 ms 11.63.124.217 (11.63.124.217)  5.086 ms  4.983 ms
......省略显示信息
30  * * *

说明:
记录按序列号从1开始,每个纪录就是一跳 ,每跳表示一个网关,我们看到每行有三个时间,单位是 ms,其实就是-q的默认参数。探测数据包向每个网关发送三个数据包后,网关响应后返回的时间;如果您用 traceroute -q 4 www.baidu.com ,表示向每个网关发送4个数据包。见下图:

[root@xinbiancheng.cn]$ traceroute -q 4 www.baidu.com
traceroute to www.baidu.com (220.181.38.150), 30 hops max, 60 byte packets
 1  * * * *
 2  11.63.125.25 (11.63.125.25)  4.581 ms 11.63.128.217 (11.63.128.217)  3.646 ms 11.63.128.153 (11.63.128.153)  4.210 ms 11.63.128.217 (11.63.128.217)  3.745 ms
......省略显示信息
30  * * *

去掉ip地址之后分别是 4.581 ms   3.646 ms   4.210 ms  3.745 ms 4个时间,则说明向每个网关发送4个数据包

有时我们traceroute 一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。
有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。当然如果某台DNS出现问题时,不能解析主机名、域名时,也会 有延时长的现象;您可以加-n 参数来避免DNS解析,以IP格式输出数据。
如果在局域网中的不同网段之间,我们可以通过traceroute 来排查问题所在,是主机的问题还是网关的问题。如果我们通过远程来访问某台服务器遇到问题时,我们用到traceroute 追踪数据包所经过的网关,提交IDC服务商,也有助于解决问题;但目前看来在国内解决这样的问题是比较困难的,就是我们发现问题所在,IDC服务商也不可能帮助我们解决。

traceroute -m 跳数设置

[root@xinbiancheng.cn]$ traceroute -m 3 www.baidu.com
traceroute to www.baidu.com (220.181.38.149), 3 hops max, 60 byte packets
 1  * * *
 2  11.63.128.153 (11.63.128.153)  4.082 ms * *
 3  11.63.128.82 (11.63.128.82)  9.683 ms 11.63.128.98 (11.63.128.98)  7.502 ms 11.63.128.66 (11.63.128.66)  10.118 ms

说明:通过结果可以看到存活数值=3,当存活数值=0时,主机便取消数据包

traceroute -p 探测包使用的基本UDP端口设置6888

[root@xinbiancheng.cn]$  traceroute -p 6888 www.baidu.com
traceroute to www.baidu.com (220.181.38.149), 30 hops max, 60 byte packets
 1  * * *
 2  11.63.128.217 (11.63.128.217)  3.751 ms 11.63.128.153 (11.63.128.153)  3.470 ms 11.63.128.217 (11.63.128.217)  3.584 ms
......省略显示信息
30  * * *

traceroute -w 把对外发探测包的等待响应时间设置为3秒

[root@xinbiancheng.cn]$ traceroute -w 3 www.baidu.com
traceroute to www.baidu.com (220.181.38.149), 30 hops max, 60 byte packets
 1  * * *
 2  11.63.125.25 (11.63.125.25)  5.725 ms  5.496 ms  5.649 ms
......省略显示信息
30  * * *

traceroute -n 显示IP地址,不查主机名

[root@xinbiancheng.cn]$ traceroute -n www.baidu.com
traceroute to www.baidu.com (220.181.38.150), 30 hops max, 60 byte packets
 1  * * *
 2  11.63.125.25  4.885 ms  5.052 ms 11.63.128.217  6.051 ms
......省略显示信息
30  * * *

traceroute -r 绕过正常的路由表,直接发送到网络相连的主机

[root@xinbiancheng.cn]$ traceroute -r www.baidu.com
traceroute to www.baidu.com (220.181.38.150), 30 hops max, 60 byte packets
connect: Network is unreachable

windows之tracert:

格式:

tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] target_name

参数说明:

tracert [-d] [-h maximum_hops] [-j computer-list] [-w timeout] target_name

该诊断实用程序通过向目的地发送具有不同生存时间 (TL) 的 Internet 控制信息协议 (CMP) 回应报文,以确定至目的地的路由。路径上的每个路由器都要在转发该 ICMP 回应报文之前将其 TTL 值至少减 1,因此 TTL 是有效的跳转计数。当报文的 TTL 值减少到 0 时,路由器向源系统发回 ICMP 超时信息。通过发送 TTL 为 1 的第一个回应报文并且在随后的发送中每次将 TTL 值加 1,直到目标响应或达到最大 TTL 值,Tracert 可以确定路由。通过检查中间路由器发发回的 ICMP 超时 (ime Exceeded) 信息,可以确定路由器。注意,有些路由器“安静”地丢弃生存时间 (TLS) 过期的报文并且对 tracert 无效。

参数:

-d 指定不对计算机名解析地址。

-h maximum_hops 指定查找目标的跳转的最大数目。

-jcomputer-list 指定在 computer-list 中松散源路由。

-w timeout 等待由 timeout 对每个应答指定的毫秒数。

target_name 目标计算机的名称。

C:\Users\Administrator>tracert www.baidu.com

通过最多 30 个跃点跟踪
到 www.baidu.com [36.152.44.96] 的路由:

  1    <1 毫秒   <1 毫秒   <1 毫秒 192.168.0.1
  2     1 ms    <1 毫秒   <1 毫秒 RTK_GW.bbrouter [192.168.1.1]
  3     3 ms     3 ms     2 ms  100.64.0.1
  4     4 ms     3 ms     3 ms  111.47.31.205
  5     4 ms     4 ms     4 ms  221.183.58.101
  6     *        *        *     请求超时。
  7    29 ms    29 ms    27 ms  221.183.59.54
  8     *        *        *     请求超时。
  9    21 ms    20 ms    33 ms  LZD-20191216MZD [182.61.216.72]
 10     *        *        *     请求超时。
 11    27 ms    27 ms    27 ms  www.baidu.com [36.152.44.96]

跟踪完成。

知识扩展:
目的主机接受在接收到TTL值为1的IP数据包是不会丢失的吧,这样也不会产生一个超时的ICMP数据报文了,那么程序如何判断是否已经到达目的主机了呢?

在Linux下,traceroute程序发送一个UDP数据报给目的主机,但是它选择一个不可能的值作为UDP端口号(大于30000),使目的主机的任何一个应用程序都不可能使用该端口,因此该数据报到达目的主机时,目的主机会产生一个“端口不可达”错误的ICMP报文,这样traceroute程序要做的就是区分接收到的ICMP报文是超时还是端口不可达,从而来区分是路由器还是目的主机

Linux 命令大全