2 implementation wikipedia traceroute icmp icmpv6
摘自 Wikipedia 页面的Traceroute实现部分:
。。。直到到达目的地,如果正在使用 UDP 数据包,则返回 ICMP Destination Unreachable 消息;如果正在使用 ICMP Echo 消息,则返回 ICMP Echo Reply 消息。
它说在最后一跳traceroute 期待 ICMP“目标无法到达”,而我希望它使用 ICMP“回显回复”。
我查看了该页面的历史记录,它被一个名叫“Guy Harris”的人更改了。他说:
。。。如果您使用 UDP 数据包(如 Traceroute 默认情况下所做的那样),最后一跳将返回 ICMP Destination Unreachable(除非您不幸将 UDP 数据包发送到具有侦听器的端口),而不是 ICMP Echo Reply。
有人可以解释一下吗?
因为traceroute需要在UDP数据报到达目的地时获取消息。
Traceroute 的工作原理如下:
Traceroute设计将UDP数据报发送到主机的某个端口,而该端口几乎不可能被监听(33435例如)。目的主机收到UDP数据报,发现数据报的目标端口没有被监听,然后返回“Destination Unreachable”消息——更准确地说,“Port Unreachable”。
这就是为什么 Traceroute 期望在最后一跳出现“Destination Unreachable”消息来确定 UDP 数据报已经到达目的地。
顺便说一句,如果目标端口在目标主机上被意外侦听,这就是 Guy Harris 描述的场景:“除非您很不幸向具有侦听器的端口发送了 UDP 数据包”