Traceroute程序可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由。
Traceroute相对于IP路径记录选项的比较:
首先并不是所有的路由器都支持记录路由选项,ASA就不支持。其次IP路径记录选项记录的双向的,浪费选项地址空间,最后IP首部中留给选项的空间有限
Cisco的Traceroute工作原理:
在cisco中,发送去往目的地UDP:33434(cisco默认),TTL值为1的报文,到达第一个路由器时,路由器发现TTL值为1,路由器就会给源发送一个ICMP差错信息TTL不可达。当源收到ICMP时,读取ICMP中的源地址打印出来,然后继续发送去往目的地UDP:33435,TTL值为2的报文,到达第二个路由器时,路由器发现TTL值为1,路由器又会给源发送一个ICMP差错信息TTL不可达。当源收到ICMP时,读取ICMP中的源地址打印出来,如此重复,获取经过的所有路由,当抵达目的时,目的地路由器发现是找自己的,不会看TTL值是否为1,继续查看4层信息,发现端口自己没有开启,会给源发送一个ICMP差错信息端口不可达信息。当源读取这个端口不可达信息,就知道到达目的地了,继续打印出来。
微软的Tracert的工作原理:
发送去往目的地的ICMP请求报文TTL值为1的报文,到达第一个路由器时,路由器发现TTL值为1,路由器就会给源发送一个ICMP差错信息TTL不可达。当源收到ICMP时,读取ICMP中的源地址打印出来,然后继续发送去往目的地的ICMP请求报文TTL值为2的报文,到达第二个路由器时,路由器发现TTL值为1,路由器又会给源发送一个ICMP差错信息TTL不可达。当源收到ICMP时,读取ICMP中的源地址打印出来,若此重复,获取经过的所有路由,当抵达目的时,目的地路由器发现是找自己的,不会看TTL值是否为1,直接回应一个ICMP应答报文,当源读取这个ICMP应答报文时,就知道到达目的地了,继续打印出来。
IP源站选路选项:
严格源站路由选择:发送端指明IP数据报所必须采用的确切路由,如果一个路由器发现源路由所指定的下一个路由器不再其直接连接的网络上,那么它就会返回一个“源站路由失败”的ICMP差错报文
严格源站路由的变态之处,哪怕路由器上没有到达目的地的路由也可以通,因为严格源站路由提供了下一跳地址。
宽松的源站路由:发送端指明了一个数据报经过的IP地址清单,但是数据报子啊清单上指明的任意两个地址之间可以通过其他路由器
路由器默认支持源站路由,防火墙都是不支持的,因为安全问题,但是我们可以把源站路由给关掉,no ip source-route。关闭后就无法使用源站路由了,会返回一个ICMP,type为3,code为5的源站路由失败的信息
Code:宽松的源站路由值为0x83,严格的源站路由值为0x89
Len和ptr字段与记录路由选项一样。
当一个源站路由发出时,指针会指向选项位的第一个IP地址,相当于告诉客户端第一条去哪,然后R1收到的会是指针指向下一跳的IP地址,在R1发送出去的时候,会将自己出接口的IP地址填写到选项位的第一个IP地址(回去的时候才知道反向的源站路由),如此重复。