找出ip数据包在网络中经过的路由

来源:互联网 发布:新西兰网络签证 编辑:程序博客网 时间:2024/05/21 09:14

有两种方法

  1. 利用icmp协议,icmp协议一般用于传递udp、tcp报文的差错信息,但是也有个选项可以被配置成为可以记录沿路的路由ip的功能(在icmp报文的首部有类型和代码两个字段,被分别配置为8和0的时候)。使用ping -R的形式可以查看ip记录路由。这时候每一个接到该数据包的路由器都会在ip数据包的选项字段中加入自己的ip地址。但是选项字段的空间是有限的,最多只能记录下9个ip地址,因此这种查看路由的方式是有限制的。

  2. 另外一种方式是利用traceroute程序。在ip数据报有一个字段叫做ttl,当一个路由器接到一个ttl为0或者1的数据包时,假设数据包的目的ip并不是该路由,那么此时该数据包不会再被往下传输了,只会返回一个icmp报文(具体类型是传送超时)给源主机。根据这个特点,可以发出一个ttl设置为1的数据包,那么源主机就会收到一个从第一个路由发来的icmp报文,记录下发送端的ip,然后源主机发出一个ttl为2的报文,那么源主机就会收到第二个路由发来的icmp报文,再次记录下发送端的ip,像这样一直类推的话就可以一直到最后一站。但是最后一站有些特别,因为这时候发出的IP数据包的目的地已经到了,即使此时的ttl为0了也不会发出一个超时的icmp的。这时候就该利用icmp的另一项功能了。当目的端口在不可达的时候(可能是由于目的主机并没有开放该端口),目的主机会返回一个端口不可达的icmp报文。利用这个功能,发出一个端口设置为一个不常用的数字的udp数据包,当发现返回的icmp是端口不可达的类型时,说明已经到达目的主机了。traceroute程序就是这样的原理。

缺陷

  1. 对于traceroute程序来说,获得的每一个沿路的路由ip都是通过将不同的报文发送出去,每一个报文会得到一个沿路的路由ip,这样就导致了一个问题,有可能第一个报文是走的这条路,第二个报文却走了另外一条路(路由表可能更新了或者某些路由故障导致),这样的话得到的沿路的ip就是错误的。之前都是在假设发出的所以报文都会走上次走过的路,然而不走上次走过的路也是可能的。

  2. 通过IP记录路由和通过使用traceroute得到的结果可能是不同的。一个路由器往往有两个以上的接口(也可以说ip地址),数据包会先进入接收接口,再从发送接口被发送出去。如果使用ip记录路由的方式,那么记录的ip都是发送接口地址,而使用traceroute的话,记录的ip是接收接口的ip。也导致了从A主机到B主机和从B主机到A主机的traceroute结果可能不同。

(根据《TCP/IP详解》卷一)

0 0
原创粉丝点击