简单是理解,traceroute使用了两种不正常的方式来测试,以获得我们预期的结果。

一、TTL=0

二、UDP端口不可达。


在windows下,traceroute使用的是ICMP协议

在unix下,traceroute使用的是UDP协议


windows下,traceroute依次发送icmp报文,TTL=1、2、3...,探测路径。最开始TTL=1,这个报文的类型和代码字段分别是8、0。到遇到第一跳的时候,返回一个类型代码为11、0的差错包,表示TTL=0。然后接着发送TTL=2,探测第二跳。这样一直下去。直到到达目的地


unix下,traceroute发送的是UDP(端口号大于30000)的三个包。同时TTL=1、2、3...,在没到达最终路径之前,过程和windows一样。但是在到达目的地的时候,会发出一个端口不可达的ICMP差错报文。类型、代码为3、3。

这里需要注意的一点,三个UDP报文的端口号是不一样的。这样做的好处是,可以查到链路上的负载均衡。绝大多数的负载均衡的设备是基于流的。这三个端口号不一样的包数据三个流,这样可以查看到负载均衡的情况。



还有一点需要注意的就是,traceroute探测到的是 入站接口的IP地址。而ICMP的源站路由检测的是出站接口的IP地址。他们使用的原理是完全不一样的。


ping的源站路由可以记录往返的路径。但是只能记录最多9个地址。