您的当前位置:首页正文

【Linux】网络诊断 traceroute命令详解

2024-11-11 来源:个人技术集锦

一、traceroute概述

1.1 traceroute命令简介

1.2 命令格式

1.3 原理

1.4 命令功能

二、使用实例

实例1:traceroute 用法简单、最常用的用法

实例2:跳数设置

实例3:设置探测数据包数量

实例5:绕过正常的路由表,直接发送到网络相连的主机

实例6:探测包使用的基本UDP端口设置6888


网络诊断相关命令或工具使用:


一、traceroute概述


1.1 traceroute命令简介


在大多数情况下,我们会在linux主机系统下,直接执行命令行:

traceroute hostname

而在Windows系统下是执行tracert的命令:

tracert hostname

1.2 命令格式


官方释义翻译:

traceroute跟踪从IP网络到给定主机的路由数据包。它利用IP协议的生存时间(TTL)字段,并尝试从通往主机的路径上的每个网关引出ICMP TIME_EXCEEDED响应。

在行程时间之后,可以打印一些附加的注释:!H, !N,或!P(主机,网络或协议不可达),!S(源路由失败),!F(需要分片),!X(管理禁止通信),!V(主机优先级违反),!C(优先级有效切断),或!<num> (ICMP不可达代码<num>)。如果几乎所有探测都导致某种不可达,traceroute将放弃并退出。

1.3 原理


如图所示,在IPv4中,ICMP报文属于IP子协议,协议(Protocal)字段值为1表示该报文携带了ICMPv4。

如图所示,为ICMPv4的报文格式。所有的ICMP报文都以8位的类型(Type)和代码(Code)字段开始,其后的16位校验和(CheckSum)字段涵盖了整个报文。

其中各字段的含义如下:

  • 类型(Type):指定 ICMP 报文的类型,占 1 个字节。常见类型有:回显应答(Echo Reply:0)、回显请求(Echo Request:8)等。
  • 代码(Code):指定 ICMP 报文的代码,占 1 个字节。用于进一步描述 ICMP 报文,与 Type 字段组合使用。
  • 校验和(Checksum):校验和,用于检查 ICMP 报文是否有损坏,占 2 个字节。
  • 数据(Data):数据,可变长度。可以是任意数据,长度由具体的 ICMP 报文类型和代码决定。

基于ICMP报文的traceroute是这样实现的:让你在客户端输入 traceroute 命令+ip时, 客户端就发起一个ICMP回显请求报文,第一个数据包,TTL=1,这样第一跳路由器收到后,要转发出去时,会将TTL减一,即TTL=0, 就丢弃,然后第一跳路由器就返回一个ICMP超时的错误信息,客户端收到后,会判断是否收到ICMP 回显应答 报文? 如果还没收到,就会继续发送回显请求报文,TTL加1进行尝试,当到底服务器后,服务器就会发送ICMP 回显应答报文。

1.4 命令功能


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

命令参数:

参数

释义

-d

使用Socket层级的排错功能。

-f

设置第一个检测数据包的存活数值TTL的大小。

-F

不要分割数据包。

-g

设置来源路由网关,最多可设置8个。

-i

使用指定的网络界面送出数据包。

-I

使用ICMP ECHO进行跟踪路由

-T

使用TCP SYN进行跟踪路由(默认端口为80)

-m

设置检测数据包的最大存活数值TTL的大小。

-N

同时发送探测报文的个数。同时发送多个探针可以提高速度traceroute很大。默认值为16。

-n

-p

设置UDP传输协议的通信端口。

-r

忽略普通的Routing Table,直接将数据包送到远端主机上。

-s

-t

设置检测数据包的TOS数值。

-v

详细显示指令的执行过程。

-w

设置等待远端主机回报的时间。

-x

开启或关闭数据包的正确性检验。


二、使用实例


实例1:traceroute 用法简单、最常用的用法

命令:

traceroute www.baidu.com 

输出:

[root@hdp105 ~]#  traceroute www.baidu.com
traceroute to www.baidu.com (110.242.68.4), 30 hops max, 60 byte packets
 1  * * *
 2  * * *
 3  124.89.90.205 (124.89.90.205)  4.446 ms  4.398 ms  3.707 ms
 4  123.139.0.85 (123.139.0.85)  3.225 ms 123.139.1.29 (123.139.1.29)  12.200 ms 123.139.1.177 (123.139.1.177)  2.085 ms
 5  * 221.11.0.145 (221.11.0.145)  35.491 ms *
 6  219.158.111.233 (219.158.111.233)  33.572 ms * 221.11.0.45 (221.11.0.45)  33.728 ms
 7  110.242.66.166 (110.242.66.166)  65.619 ms 110.242.66.170 (110.242.66.170)  65.541 ms *
 8  110.242.66.178 (110.242.66.178)  20.313 ms 221.194.45.134 (221.194.45.134)  20.487 ms 110.242.66.182 (110.242.66.182)  19.403 ms
 9  221.194.45.134 (221.194.45.134)  22.095 ms * 221.194.45.130 (221.194.45.130)  19.838 ms

.....
29  * * *
30  * * *

说明:

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

有时我们traceroute 一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。

实例2:跳数设置

命令:限制路由经过 10跳停止

traceroute -m 10 www.baidu.com

输出:

[root@hdp105 ~]# traceroute -m 10 www.baidu.com
traceroute to www.baidu.com (110.242.68.4), 10 hops max, 60 byte packets
 1  * * *
 2  * * *
 3  124.89.90.205 (124.89.90.205)  5.417 ms  5.530 ms  5.287 ms
 4  123.139.1.29 (123.139.1.29)  1.992 ms 123.139.1.177 (123.139.1.177)  1.968 ms 123.139.2.161 (123.139.2.161)  1.945 ms
 5  * 221.11.0.1 (221.11.0.1)  2.090 ms *
 6  219.158.111.233 (219.158.111.233)  35.322 ms 221.11.0.69 (221.11.0.69)  28.003 ms *
 7  219.158.111.233 (219.158.111.233)  33.298 ms  33.255 ms *
 8  221.194.45.130 (221.194.45.130)  20.088 ms 110.242.66.170 (110.242.66.170)  20.029 ms 221.194.45.130 (221.194.45.130)  20.582 ms
 9  * * 221.194.45.134 (221.194.45.134)  21.801 ms
10  * * *
[root@hdp105 ~]# 

实例3:设置探测数据包数量

命令:限制路由经过 10跳且 每一跳发送4个探测数据包

[root@hdp105 ~]# traceroute -q 4 -m 10 www.baidu.com
traceroute to www.baidu.com (110.242.68.3), 10 hops max, 60 byte packets
 1  * * * *
 2  * * * *
 3  124.89.90.205 (124.89.90.205)  3.536 ms  3.507 ms  2.734 ms  3.425 ms
 4  * * * 123.139.2.37 (123.139.2.37)  2.599 ms
 5  221.11.0.1 (221.11.0.1)  2.756 ms  2.727 ms  5.096 ms  7.570 ms
 6  * 221.11.0.169 (221.11.0.169)  22.440 ms 221.11.0.69 (221.11.0.69)  27.588 ms *
 7  * 110.242.66.186 (110.242.66.186)  25.913 ms 219.158.111.233 (219.158.111.233)  21.579 ms 110.242.66.178 (110.242.66.178)  20.378 ms
 8  221.194.45.130 (221.194.45.130)  23.732 ms 110.242.66.162 (110.242.66.162)  20.793 ms 221.194.45.130 (221.194.45.130)  20.476 ms  23.077 ms
 9  221.194.45.134 (221.194.45.134)  24.247 ms * * *
10  * * * *
[root@hdp105 ~]# 

如下图可以看到 发送4个探测数据包 输出了 4个数据包的时间

实例4:显示IP地址,不查主机名

命令:

traceroute -n -m 10 www.baidu.com

输出:

实例5:绕过正常的路由表,直接发送到网络相连的主机

命令:

traceroute -r www.baidu.com

输出:

实例6:探测包使用的基本UDP端口设置6888

命令:

traceroute -p 6888 www.baidu.com

输出:

[root@hdp105 ~]# traceroute -p 6888 -m 10 www.baidu.com
traceroute to www.baidu.com (110.242.68.4), 10 hops max, 60 byte packets
 1  * * *
 2  * * *
 3  124.89.90.205 (124.89.90.205)  2.079 ms  2.502 ms  2.440 ms
 4  123.139.0.85 (123.139.0.85)  2.280 ms 123.139.2.161 (123.139.2.161)  1.945 ms 123.139.1.29 (123.139.1.29)  2.212 ms
 5  * 221.11.0.53 (221.11.0.53)  27.007 ms *
 6  221.11.0.97 (221.11.0.97)  22.444 ms * *
 7  110.242.66.170 (110.242.66.170)  20.305 ms * *
 8  110.242.66.174 (110.242.66.174)  20.119 ms 221.194.45.130 (221.194.45.130)  19.840 ms 221.194.45.134 (221.194.45.134)  21.036 ms
 9  * 221.194.45.130 (221.194.45.130)  20.001 ms *
10  * * *
[root@hdp105 ~]# 

参考文章:

traceroute 命令,Linux traceroute 命令详解:显示数据包到主机间的路径 - Linux 命令搜索引擎

动态图解 | 9分钟让你明明白白看懂Traceroute(路由追踪)的原理与实现

显示全文