Tracert原理与应用

Tracert(跟踪路由)是路由跟踪实用程序,用于确定IP数据包访问目标网络所经过的路径。Tracert命令用IP生存时间Time to live(TTL)字段和ICMP错误消息来确定从一个主机到网络上其它主机经过的路由

 

Tracert是什么

Tracert(跟踪路由)是路由跟踪实用程序,用于确定IP数据包访问目标网络所经过的路径。Tracert命令用IP生存时间Time to live(TTL)字段和ICMP错误消息来确定从一个主机到网络上其它主机所经过的路由。

 

Tracert工作原理

通过向目标发送不同IP生存时间 (TTL) 值的”Internet控制消息协议 (ICMP)”回应数据包,Tracert诊断程序确定到目标所采取的路由。要求路径上的每个路由器在转发数据包之前至少将数据包上的 TTL 递减 1。数据包上的 TTL 减为 0 时,路由器应该将”ICMP 已超时”的消息发回源系统。

Tracert 先发送 TTL 为 1 的回应数据包,并在随后的每次发送过程将TTL递增 1,直到目标响应或 TTL 达到最大值,从而确定路由。通过检查中间路由器发回的”ICMP 已超时”的消息确定路由。某些路由器不经询问直接丢弃 TTL 过期的数据包,这在 Tracert 实用程序中看不到。

 

Tracert应用

有3种方式用来探测一个数据包从源点到目的地经过了哪些中转路由器,这3种方式分别是:基于记录路由选项的路由探测,基于UDP协议的路由探测,基于ICMP Echo Request的路由探测。三种方式都可以用来探测一个数据包到达目的设备经过了哪些中间路由器,但实现的过程却截然不同。

 

基于记录路由选项(Record route options)的路由探测

这种方式是我们最容易理解的探测路由方式。比如,我想知道一封从上海发出,目的地是北京电信,中间经过了多少个邮局转发。这个过程很简单,只要中间邮局在转发的信件扣上他们自己的邮戳,这封信到达目的地北京后,北京再把这封信回邮给我,当我收到回信后,只要看信上的邮戳,便知道中间经过哪些邮局。

ping -r www.aorb.org命令便可实现这种记录中间路由的功能,返回的结果是中间路由器的IP地址。

  1. ping命令发出的是类型为8的ICMP数据报,当使用ping -r时,这个类型为8的ICMP数据报被装在一个IP数据报里,IP数据报的Options(选项)字段预留出给中间路由器扣戳的地方,这个地方不太大,只能容纳9台中转路由器的IP地址。
  2. 当这个数据报被发送端送出后,每经过一个中转路由器,中转路由器的IP软件便会在此IP数据报的选项字段中加入一条这个中转路由器的IP地址。
  3. 当这个数据包到达目的地时(如,www.aorb.org),目的设备便会生成一条类型为0的ICMP数据报,这个ICMP数据报被封装在一个新的IP数据报里,新IP数据报的Options字段中拷贝了刚才收到的IP数据报中的Options字段。
  4. 当这个新IP数据报回送到源发送端时,您便会在屏幕上看见一些中间路由器的IP地址了。

 

基于UDP协议的路由探测

tracert是Windows下常用的命令行工具(基于ICMP协议),UNIX下与之对应的是traceroute(基于UDP协议)。若想知道自己的电脑到www.aorb.org 经过了多少个路由器,可在命令行下输入tracert www.aorb.org进行探测,返回结果也许会与ping -R相同,但它是以另一种方式实现的。这种方式并没有像Record route options探测技术中使用IP协议包的Options字段,而是利用了IP协议包中的TTL字段。

基本思路是这样的:www.aorb.org这台服务器即卖茄子(提供HTTP服务),也卖黄瓜(提供FTP服务),但不卖土豆(未监听的UDP端口)。有位买家,为了知道一封信到达蔬菜供应商www.aorb.org中间需要经过几个邮局(路由器),于是写信给www.aorb.org询问土豆的价格。

  1. 买家在信封的TTL位置写上数字1,当这封信到达与自己相邻的第一个邮局时,邮局的人把TTL值减1,于是TTL为0,邮局章程规定,把TTL值为0的信丢到垃圾桶里,然后给买家发一封名曰超时的信,信上写了丢信邮局的名字,以告诉买家信被谁丢掉了。
  2. 买家在信封的TTL位置写上数字2,当这封信到达与自己相邻的第一个邮局时,邮局的人把TTL值减1,现在TTL值为1,邮局章程规定, TTL值不为0的数据包需要继续转发给下一个邮局,于是这封信又被转发到了下一个邮局。当下一个邮局收到这封信时,邮局的人把TTL值减1,于是TTL为 0,邮局章程规定,把TTL值为0的信丢到垃圾桶里,然后给买家发一封名曰超时的信,信上写了丢信邮局的名字,以告诉买家信被谁丢掉了。

    通过第一步,买家知道了第一个中转路由器。通过第二步,买家知道了第二个中转路由器。那么买家只需要不断的把TTL值加1,便可根据如上步骤探测出中间经过了哪些路由器。

  3. 第三步,我们假设中间只经过两个邮局信便到达目的地了。接着第二步,买家选在把TTL值设置为3,当这封信到达与自己相邻的第一个邮局时,邮局的人把TTL值减1,现在TTL值为2,邮局章程规定,TTL值不为0的数据报需要继续转发给下一个邮局,于是这封信又被转发到了下一个邮局。当下一个邮局收到这封信时,邮局的人把TTL值减1,于是TTL为1,邮局章程规定,TTL值不为0的数据报需要继续转发给下一个邮局,于是这封信又被转发到了下一个邮局,但下一个邮局已经就是最终目的地www.aorb.org了,尽管www.aorb.org把TTL减1的结果为0,但却不会丢弃它,因为目的地就是 www.aorb.org呀!于是www.aorb.org把这个IP层邮递员送来的信交付给负责卖土豆人,但我们开始说了,www.aorb.org并不卖土豆,于是就回送一个名曰端口不可达(ICMP类型为3,代码为3)的信给买家。第四步,当买家收到类型为终点不可达的信时,就不再把那封问土豆价格的信上的TTL加1了,因为他已经知道了到达目的地的全部路由。

 

基于ICMP Echo Request的路由探测

这种探测方式与基于UDP协议的路由探测的实现步骤一样,但发送端送出的不是一个UDP数据包,而发送的是一个ICMP类型为8的Echo Request(回显请求)数据报文。与基于UDP协议的路由探测技术一样,每次发送端都会把TTL值加1,每个中转路由器都对TTL值减1,如果为0,便丢弃后给发送端发送一个超时报文,若不为0,则继续转发给下一跳。唯一不同的是,当这个数据报到达最终目的节点时,由于发送端发送的是Echo Request报文,所以接收端就会相应一个ICMP类型为0的数据报文。这样,当发送端收到ICMP类型为0的数据报文时,就知道了全部路由已经查询完毕,终止继续探测。

 

Tracert使用方法

1、DOS命令行

C:\WINDOWS\system32> tracert /?

用法: tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout

[-R] [-S srcaddr] [-4] [-6] target_name

选项:

-d 不将地址解析成主机名。

-h maximum_hops 搜索目标的最大跃点数。

-j host-list 与主机列表一起的松散源路由(仅适用于 IPv4

-w timeout 等待每个回复的超时时间(以毫秒为单位)。

-R 跟踪往返行程路径(仅适用于 IPv6)。

-S srcaddr 要使用的源地址(仅适用于 IPv6)。

-4 强制使用 IPv4。

-6 强制使用 IPv6。

target_name 目标主机的名称或 IP 地址。

当我们不能通过网络访问目的设备时,网络管理员就需要判断是哪里出了问题。问题不仅仅会出现在最终目的设备,也可能出现在转发数据包的中间路由器。

2、WinMTR

下载链接: https://pan.baidu.com/s/1xJGTv6_boPIpS3BvJ-JGjw 提取码: 2333

参考文章: https://baike.baidu.com/item/%E8%B7%9F%E8%B8%AA%E8%B7%AF%E7%94%B1/8971154?fromtitle=tracert&fromid=7578188&fr=aladdin