今天在帮助别人进行故障分析时用到了tracert这个跟踪路由的命令。忽然想到tracert这个命令工具是怎么工作的呢。那就用抓包工具看看吧。首先咱们用万能的度娘找找tracert的工作原理?
这里是引用
Tracert工作原理
通过向目标发送不同IP生存时间 (TTL) 值的“Internet控制消息协议 (ICMP)”回应数据包,Tracert诊断程序确定到目标所采取的路由。要求路径上的每个路由器在转发数据包之前至少将数据包上的 TTL 递减 1。数据包上的 TTL 减为 0 时,路由器应该将“ICMP 已超时”的消息发回源系统。
Tracert 先发送 TTL 为 1 的回应数据包,并在随后的每次发送过程将TTL递增 1,直到目标响应或 TTL 达到最大值,从而确定路由。通过检查中间路由器发回的“ICMP 已超时”的消息确定路由。某些路由器不经询问直接丢弃 TTL 过期的数据包,这在 Tracert 实用程序中看不到
哦!原来是用ICMP及IP数据包的TTL来确定的。打开Wirshark在选择过滤ICMP数据包。然后用一个经过两跳的路由地址抓包看一下(经过跳数多的不方便咱们分析)。如下图:
然后,我们来看一下Wirshark都抓到了什么?
由上述数据包可以看到,本地发送了三个到172.21.2.1的ICMP数据包,但是TTL值=1所以此数据包只能到网关(下一跳),网关接收后把TTL值减1,TTL=0的数据路由器不会转发而丢弃,并且路由检查数据包目的地址也不是自己,所以给原地址192.168.10.118发送超时回应,而tracert程序收到超时回应并记录下来此设备的IP地址,这就是第一跳信息的获得,细心的你可能发现了tracert图中会有3个时间 “<1毫秒” 的数据就是对应着发送的三个数据包和接收响应时间。
在接收到超时响应后,Tracert会再次发送三个到172.21.2.1的ICMP数据包,但这次TTL值设置为2,这次三个ICMP数据包顺利的经过了下一跳路由器,来到了第二跳路由器,而此时检查数据包的目的地址正好是自己,所以路由器会通过ICMP的工作机制对原地址192.168.10.118进行回应。原主机在接收到172.21.2.1的回应后,也就不再进行下一轮发包。显示了上述信息。如果这一跳路由地址与跟踪的目的地址不符,Tracert程序会断续进行下一轮发包测试。直至到达目的IP或是TTL=30跳后也就终止。