traceroute通过udp和icmp两个协议的共同作用之下,实现线路探测功能。基本过程是:
- traceroute程序设置IP头部的ttl初始值为1,发送UDP报文
- UDP报文到达路由器R1,R1将TTL-1,TTL变为0,内核丢弃该数据包,并响应ICMP Time to live exceeded消息
- traceroute收到ICMP ttl exceeded消息之后,将IP头部ttl值设为2,再次发送UDP报文
- 如果没到达最终的目的IP所在的机器,重复2,3,依次累加ttl
- 如果到达最终目的地,此时回复ICMP Destination Unreachable消息。trace过程结束

我在Mac上使用traceroute命令会重复针对每个ttl会重复三次。