目录
网络诊断相关命令或工具使用:
【Linux】网络诊断 ping命令详解_linux ping-CSDN博客
【网络】抓包工具Wireshark下载安装和基本使用教程-CSDN博客
一、traceroute概述
1.1 traceroute命令简介
traceroute跟踪从IP网络到给定主机的路由数据包。它利用IP协议的生存时间(TTL)字段,并尝试从通往主机的路径上的每个网关引出ICMP TIME_EXCEEDED响应,它默认发送的数据包大小是60字节(IPv4,CentOS7.X)。
通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。linux系统中,我们称之为traceroute,在MS Windows中为tracert。 traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备traceroute默认要测3次,输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其IP地址。
在大多数情况下,我们会在linux主机系统下,直接执行命令行:
traceroute hostname
而在Windows系统下是执行tracert的命令:
tracert hostname
1.2 命令格式
官方释义翻译:
traceroute跟踪从IP网络到给定主机的路由数据包。它利用IP协议的生存时间(TTL)字段,并尝试从通往主机的路径上的每个网关引出ICMP TIME_EXCEEDED响应。
traceroute唯一需要的参数是目标主机的名称或IP地址。可选的packet_length是探测报文的总大小(IPv4默认60字节,IPv6默认80字节)
程序试图通过启动带有TTL(生存时间)的探测数据包来跟踪IP数据包将遵循的路由到某些internet主机,然后侦听来自网关的ICMP“超时”回复。我们以ttl为1开始探测,然后再增加1,直到我们得到ICMP“端口不可达”(或TCP重置),这意味着我们到达了“主机”,或者达到了最大值(默认为30跳)。每个ttl设置发送三个探测(默认情况下) 打印出一行显示ttl、网关地址和每个探针的往返时间。如果需要,可以在地址后面加上其他信息。如果探测答案来自不同的网关,则将打印每个响应系统的地址。如果在5.0秒(默认)内没有响应,则为该探测打印“*”(星号)。
在行程时间之后,可以打印一些附加的注释:!H, !N,或!P(主机,网络或协议不可达),!S(源路由失败),!F(需要分片),!X(管理禁止通信),!V(主机优先级违反),!C(优先级有效切断),或!<num> (ICMP不可达代码<num>)。如果几乎所有探测都导致某种不可达,traceroute将放弃并退出。
1.3 原理
traceroute程序完整过程:首先它发送一份TTL字段为1的IP数据包给目的主机,处理这个数据包的第一个路由器将TTL值减1,然后丢弃该数据报,并给源主机发送一个ICMP报文(“超时”信息,这个报文包含了路由器的IP地址,这样就得到了第一个路由器的地址),然后traceroute发送一个TTL为2的数据报来得到第二个路由器的IP地址,继续这个过程,直至这个数据报到达目的主机。
如图所示,在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、客户端发送第一个TTL=1的ICMP 回显请求报文,第1跳路由器收到后,查看目的地址进行转发,转发前会将TTL会减1,减完后TTL=0,就丢弃该数据包,并向客户端返回TTL超时的ICMP报文。客户端收到,TTL超时ICMP报文,从报文里面的源地址,得到第1跳地址:10.10.10.10
2、由于客户端发现还没收到回显应答的ICMP报文,于是继续尝试发送,TTL进行加1。第1跳路由器收到后,根据目的地址进行转发,转发出去时,TTL减1,减完后TTL=1。第2跳路由器收到后,查看目的地址进行转发,转发前会将TTL会减1,减完后TTL=0,就丢弃该数据包,并向客户端返回TTL超时的ICMP报文。
客户端收到,TTL超时ICMP报文,从报文里面的源地址,得到第2跳地址:20.20.20.20
3、由于客户端仍然还没收到 回显应答 的ICMP报文,于是继续尝试发送,TTL进行加1。第1跳路由器收到后,根据目的地址进行转发,转发出去时,TTL减1,减完后TTL=2。第2跳路由器收到后,查看目的地址进行转发,转发前会将TTL会减1,减完后TTL=1, TTL不是0,路由器就继续转发。数据包终于到达服务器啦!服务器查看目的地址,就是找我的,于是继续解封装,查看IP数据部分(ICMP),发现是回显请求的ICMP报文,于是向客户端发送一个 回显应答的ICMP报文。
客户端收到,回显应答的ICMP报文,确认UDP数据包已成功到达服务器了,traceroute结束,并记录源IP地址:192.168.2.1
1.4 命令功能
traceroute指令让你追踪网络数据包的路由途径,预设数据包大小是40Bytes,用户可另行设置。
具体参数格式:traceroute [-dFlnrvx][-f<存活数值>][-g<网关>...][-i<网络界面>][-m<存活数值>][-p<通信端口>][-s<来源地址>][-t<服务类型>][-w<超时秒数>][主机名称或IP地址][数据包大小]
命令参数:
参数 | 释义 |
-d | 使用Socket层级的排错功能。 |
-f | 设置第一个检测数据包的存活数值TTL的大小。 |
-F | 不要分割数据包。 |
-g | 设置来源路由网关,最多可设置8个。 |
-i | 使用指定的网络界面送出数据包。 |
-I | 使用ICMP ECHO进行跟踪路由 |
-T | 使用TCP SYN进行跟踪路由(默认端口为80) |
-m | 设置检测数据包的最大存活数值TTL的大小。 |
-N | 同时发送探测报文的个数。同时发送多个探针可以提高速度traceroute很大。默认值为16。 |
-n | 直接使用IP地址而非主机名称。 |
-p | 设置UDP传输协议的通信端口。 |
-r | 忽略普通的Routing Table,直接将数据包送到远端主机上。 |
-s | 设置本地主机送出数据包的IP地址。 |
-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 ~]#
参考文章:
【Linux】网络诊断 ping命令详解_linux ping-CSDN博客
traceroute 命令,Linux traceroute 命令详解:显示数据包到主机间的路径 - Linux 命令搜索引擎
Linux命令:traceroute命令(路由跟踪)-CSDN博客