提到跟踪路由,大家都很了解,很快便会想到Windows平台下的tracert和linux平台下traceroute,今天我想跟大家聊一聊我对跟踪路由的了解与认识

我们为什么需要跟踪路由?

为什么我们需要跟踪路由,路由跟踪有什么用呢?对网络较为了解的人都知道,跟踪路由可以帮助我们了解数据包传输过程中的每一跳,方便我们确定数据包出错的时候在那一跳出现了问题。

下例中,默认网关确定 192.168.10.99 主机没有有效路径。这可能是路由器配置的问题,或者是 192.168.10.0 网络不存在(错误的 IP 地址)。

  C:\>tracert 192.168.10.99   

Tracing route to 192.168.10.99 over a maximum of 30 hops   

1 10.0.0.1 reports:Destination net unreachable.  

 Trace complete.  

 Tracert 实用程序对于解决大网络问题非常有用,此时可以采取几条路径到达同一个点。

路由跟踪的原理

使用过tracert(Windows下的跟踪路由工具)和traceroute(linux的跟踪路由工具)都知道它们俩功能和输出的结果大致相同,它们之间有什么关系呢?仅仅是因为名字不一样吗?

其实不仅仅是名字不一样,而且各自的工作原理也不一样,Windows下的tracert工作原理是这样的:

tracert工具不断发送ICMP echo 数据包,每一个数据包TTL值都不一样,从1开始增加,直到到达目标或是满255,TTL值为1的icmp echo包当到达第一跳路由器的时候,TTL值减为0,此时数据没有到达终点,所以路由器会丢弃该数据包,并发送ICMP TIME OUT (type=11 code=0)数据包给原始发送主机,原IP地址为该路由器的IP地址,目的地址为原始主机IP地址,当原始主机收到该icmp超时数据包后,便知道了第一跳路由器的IP地址,然后打印在显示屏上,正如我们看到的那样,TTL为2的3的……原理都一样,那我们怎么知道怎样才算是到达目的地呢?这好办啊,当数据包到达目的地的时候,目标便会返回ICMP reply 数据包而不是ICMP 超时数据包,这样tracert便会判断数据包到达终点了。

 

跟踪路由之我见_第1张图片

linux下面的traceroute工作原理和Windows下的tracert有所不同,它发送的数据包是UDP包而不是icmp,这个数据包源端口是随机的,目的端口为值递增的高端口(我在BT5下面实验的时候,端口是从33435开始递增的),TTL值也是从1开始递增,知道到达目标主机或是达到255,TTL为1的UDP包到达第一个路由器的时候,值减为0,于是路由器向原始主机发送一个ICMP超时数据包(同上),由此traceroute便知道了第一跳路由器的IP地址并打印显示出来。TTL为2、3、4……的数据包都是一样的原理。至此我们要问啦,那traceroute是如何判断到达终点的呢?其实也很简单,想一想UDP包为什么选择高端口?因为这些高端口是不存在的,所以目标主机接收到以后,就会给原始主机发送一个端口不可达的ICMP数据包,当traceroute接收到这个数据包之后,它不便认为达到目标主机啦。

 

跟踪路由之我见_第2张图片

 

 

跟踪路由之我见_第3张图片

发送的是UDP数据包,路由器返回的是ICMP数据包(除最后一个是端口不可达外其余都是超时数据包) UDP数据包目标端口是很大的递增数值

跟踪路由之我见_第4张图片

 

细心的朋友会发现上面不论是tracert或是traceroute跟踪www.cauc.edu.cn的结果中有很多是显示不出来的(显示为超时),这是为什么呢?

思考一下我们便知道这是因为路途中遇见了防火墙阻挡了,我们只带防火墙一般的不开放ICMP的,对于高数值的端口(不论是TCP还是UDP)一般也是不开放的。所以这两种工具是有所限制的。那么有没有更好的工具呢(突破防火墙的限制)?答案是yes

下面我就简单介绍BT5中的两款跟踪路由工具tcptraceroute和tctrace

tcptraceroute

有名字我们可以猜到这个工具和traceroute区别就是发送的数据包的tcp而不是UDP,对的,这款工具就是发送tcp数据包而不是UDP

当我们利用tcptraceroute跟踪www.cauc.edu.cn的时候 tcptraceroute发送的是TTL值有1递增源端随机,目标端口为80,flags为syn的tcp数据包,显然防火墙一般都开放80端口,这样就轻松通过防火墙,当到达终点时,目标主机便会发送flags为ack的tcp包,此时就知道到达终点啦。

tctrace其实和tcptraceroute差不多,也是发送的tcp包

tcptraceroute www.cauc.edu.cn

跟踪路由之我见_第5张图片

open表示到达终点啦

 

跟踪路由之我见_第6张图片

发送的是tcp包目地端口为80,flags为syn

 

跟踪路由之我见_第7张图片

 

 

tctrace www.cauc.edu.cn

跟踪路由之我见_第8张图片

reached open表示到达终点啦