或许大家都用过ping命令了,可以用它来测试两个网络之间是否连通,比如测试本机到百度:

 

   ok,没问题,但今天我想给给大家讲讲网络中常用的另一个命令:linux下的traceroute命令,对应于windows下的tracert命令,即路由追踪;在了解其原理之前,先带大家了解几个网络技术名称:

    

  • IP协议

    IP协议是TCP/IP协议族中最核心的部分,它的作用是在两台主机之间传输数据,所有上层协议的数据(HTTP、TCP、UDP等)都会被封装在一个个的IP数据包中被发送到网络上。

  • ICMP

    ICMP全称为互联网控制报文协议,它常用于传递错误信息,ICMP协议是IP层的一部分,它的报文也是通过IP数据包来传输的。

  • TTL

    TTL(time-to-live)是IP数据包中的一个字段,它指定了数据包最多能经过几次路由器。从我们源主机发出去的数据包在到达目的主机的路上要经过许多个路由器的转发,在发送数据包的时候源主机会设置一个TTL的值,每经过一个路由器TTL就会被减去一,当TTL为0的时候该数据包会被直接丢弃(不再继续转发),并发送一个超时ICMP报文给源主机

  首先在ubuntu下使用traceroute跟踪百度:

 

   嗯,好嘛,只走了一跳后面都超时了,考虑到是使用虚拟机的原因,后面我们将在windows下使用tracert命令并结合非常好用的Wireshark抓包软件测试分析,如下图:

命令执行结果的说明:

1:tracert命令用于确定 IP数据包访问目标所采取的路径,显示从本地到目标网站所在网络服务器的一系列网络节点的访问速度,最多支持显示30个网络节点。

2:最左侧的,1,2,3,4~8,表明在我使用的宽带上,经过15(不算自己本地的)个路由节点,可以到达百度的服务;

3:中间的三列,单位是ms,表示我们连接到每个路由节点的速度,返回速度和多次链接反馈的平均值;

4:后面的IP,就是每个路由节点对应的IP;

5:如果返回消息是超时,则表示这个路由节点和当前我们使用的宽带,是无法联通的,至于原因,就有很多种了,比如:特意在路由上做了过滤限制,或者确实是路由的问题等,需要具体问题具体分析;

6:如果在测试的时候,大量的都是*和返回超时,则就说明这个IP,在各个路由节点都有问题

7:一般10个节点以内可以完成跟踪的网站,访问速度都是不错的;10到15个节点之内才完成跟踪的网站,访问速度则比较差,如果超过30个节点都没有完成跟踪的网站,则可以认为目标网站是无法访问的。

8:在Linux平台上,traceroute 命令就相当于windows平台上的 tracert 命令

 

使用wireshark抓包:

 

 

  可以结合tracert和wireshark截图看到,默认情况下,tracert会追踪最多30个跃点追踪到目的地址,每次追踪会发送三个icmp报文,第一次设置TTL为1,后面每次增加1,直到追踪到目的地址;tracert命令是基于ICMP协议实现的,即直接发送一个ICMP回显请求(echo request)数据包,服务器在收到回显请求的时候会向客户端发送一个ICMP回显应答(echo reply)数据包,实现流程如下:

 

 基于ICMP实现的tracert

  tracert跟踪路由时,每当TTL减为0时,路由就会往源主机发送一个ICMP超时报文,当到达目的主机时,目的主机回向源主机发送一个ICMP回显应答(echo reply)数据包,并将TTL设为较大的默认值,防止包丢失;通过tracert命令我们可以知道ip分组到达目的主机经过了哪些路由器,以及经过每一跳的网络延迟,是一个实用的网络诊断命令。

  

  当然tracert还有其他的一些选项,如下图:

  好了,tracert命令主要的作用就是这样了,剩下的一些选项,有兴趣的小伙伴可以自己在电脑上试试,或许收获更多呢。

 

 

版权声明:本文为mjc-blog原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/mjc-blog/p/11938699.html