traceroute原理
traceroute通过ICMP“超时”和“端口不可达”两种消息记录所经过路径的路由。
使用“超时”消息记录经过的路由:
traceroute程序发送的数据报首部TTL字段由发送端设置成一个8bit字段。每个处理数据报的路由器都需要把TTL的值减1或减去数据报在路由器中停留的秒数。由于大多数的路由器转发数据报的时延都小于1秒,因此TTL最终成为一个跳数计数器,每经过一台路由器就将其值减1。
当路由器收到一份IP数据报,如果其TTL字段是0或1,则路由器不转发该数据报。通常情况下,系统不会接收TTL值为0的数据报。
1 接收到这种数据报的主机是目的主机,直接将其交给应用程序。
2 接收主机不是目的主机,直接将其丢弃,并给发送端发一份ICMP超时消息。
traceroute程序记录所经过路由的关键在于包含这份ICMP信息的IP报文的信源地址是该路由器的入站接口IP地址。
使用“端口不可达”消息判断是否到达目的主机:
traceroute程序发送一份UDP数据报给目的