背景知识:
当路由器收到一份IP数据报时,如果其TTL是0或者1,则路由器丢弃该数据包,并给源IP发送一条ICMP超时消息。traceroute程序的关键在于这条ICMP消息中包含该路由器的IP
traceroute的操作过程:
发送一份TTL为1的消息给目的主机,处理这个消息的第一个路由器将TTL减1,丢弃该数据包,发给源IP一份超时ICMP报文,这样就得到了第一个路由器的地址,以此类推可以获取第二个,第三个路由器的地址,继续这个过程直到该消息到达目的主机,如果判断消息到达目的主机呢?traceroute使用UDP发送数据报给目的主机,但它选择一个不可能的值作为目的主机的端口号,使目的主机的任何应用程序都不使用该端口,使目的主机的UDP模块产生一个端口不可达错误的ICMP报文。这样ICMP可以通过收到的消息是超时还是端口不可达来判断何时结束。