标签归档:路由跟踪

路由追踪的原理和实现

Windows提供tracert命令追踪一个IP数据报从本地要目标主机经过的每个路由器的IP地址,在网络分析、网络故障诊断等方面有重要意义。

为了防止一个IP数据报中因为某些路由故障(如路由环路)而在网络逗留过长的时间导致网络环境出现进一步的恶化趋势,TCP/IP协议在IP数据报里设置了一个TTL(Time To Live)字段。在IP数据报被发送出来的时候TTL有一个初始值(如128),每经过一个路由器此值会被路由器执行减1操作,如果一个路由器发现它路由的某个IP数据报的TTL值被减1之后的结果为0,那么这个数据报将会被丢弃,然后路由器会发送一个内容为“TTL超时”的ICMP数据报通知这个IP数据报的发送者。利用这一点,可以用如下的办法实现路由追踪:

(1)构造一个TTL值为1,发往追踪目标的ICMP请求响应(Echo)数据报;
(2)发送数据报;
(3)等待回应,如果收到来自目标的ICMP响应(Reply)数据报则记录响应地址和耗时,并结束追踪;如果收到ICMP TTL超时数据报,则记录路由器地址和耗时,数据报TTL值加1,重复第(2)步,直到收到目标响应或超出最大跟踪跳数。

Windows下可以使用IcmpSendEcho函数来发送自定义TTL的ICMP请求数据报。http://msdn.microsoft.com/zh-cn/library/aa366050(v=VS.85).aspx