TRACERT和PING类似,都是采用ICMP协议的ECHO指令完成。
TTL(Time To Live)每经过一跳,其值减一,当数据包到达目的地址,或者数据包的TTL为0时,接收数据包的设备将给发送ECHO指令的设备一个反馈包。
根据这个原理,TRACERT先将TTL设为1,那么它收到1跳之后的反馈包,通过获取反馈包的源地址,可以获得路径中第一跳路由设备的地址。然后逐步增加TTL的值,每次加1,可以获得后面路由设备的地址。
源码可以参考ReactOS项目中tracert的代码:http://www.reactos.org/generated/doxygen/d0/d19/tracert_8c-source.html