traceroute解决了ping记录路由的缺点
traceroute使用icmp报文和ip首部中的TTL字段。每个处理数据报的路由都把TTL的值减1,由于大多数的路由转发数据的延时都小于1秒。因此TTL变成跳转计数器。
举例,发送一个TTL为1的ip数据报,经第一个路由减1,丢弃数据报,发送一个超时icmp报文。TTL为2就得到第二个路由的地址。
到什么时候终止呢?traceroute发送一份udp数据报给目的主机,但选择一个不可能的udp端口值,使目的主机产生一份 端口不可达报文,以判断结束。
icmp报文在TTL值等于0产生的,code字段为0
主机组装分片时发生超时将发送一份“组装超时”icmp报文,code字段为1
注意事项:
1,并不能保证现在的路由就是将来要使用的路由,甚至两份连续的ip报文都可能采用不同的路由。
2,不能保证udp数据报采用同一路由。路由不对称性。
3,返回的icmp报文的信源得知是udp数据包的路由接口的ip地址。
ip源站选路选项(即指定数据报传输的路径)
1.严格的源路由选择。源路由指定的下一站路由不在直接连接的网络上,就返回一个“源站路由失败”的icmp报文。code字段0x89
2.宽松的源路由选择。发送端指明了ip地址清单。中间可以插入其他路由。code字段0x85