为什么traceroute在最后一跳时期望“Destination Unreachable”而不是在UDP上运行时“Echo Reply”?

问题描述 投票:0回答:1

traceroute维基百科页面的实现部分摘录:

“...到目的地之前,如果正在使用UDP数据包,则返回ICMP Destination Unreachable消息;如果正在使用ICMP Echo消息,则返回ICMP Echo Reply消息。”

它说,在最后一跳traceroute期待ICMP“目标无法访问”,当我期望它使用ICMP“Echo Reply”时。

我看到了这个页面的历史,并被一个名叫'Guy Harris'的人改变了。他说:“......如果你使用UDP数据包,正如traceroute默认做的那样,最后一跳返回ICMP目的地无法到达(除非你不幸发送UDP数据包到一个带有监听器的端口),而不是ICMP Echo答复。”

有人可以对此有所启发吗?

资料来源:https://en.wikipedia.org/wiki/Traceroute

implementation wikipedia icmp traceroute icmpv6
1个回答
1
投票

因为当UDP数据报到达目的地时,traceroute需要获取消息。

Traceroute的工作原理如下:

  1. 将TTL为1的UDP数据报发送到目标主机。路由器读取数据报,递减TTL并发回ICMP超时消息。
  2. Traceroute收到上述消息,并发送另一个UDP数据报,TTL为2.互联网上的路由器读取此数据报,每次递减TTL,最后发送回ICMP超时消息。
  3. 上述步骤继续,最后,在TTL为N的情况下,UDP数据报已到达目标主机。然后,主人应该回归什么?它不能像以前那样发回ICMP超时消息 - 不超过TTL。

Traceroute设计将UDP数据报发送到主机端口,并且几乎不可能监听端口(例如33435)。目标主机接收UDP数据报,发现数据报的目标端口未被侦听,然后返回“目标无法访问”消息 - 更准确地说,“端口无法访问”。

这就是为什么traceroute期望在最后一跳的“目的地无法到达”消息确定UDP数据报已经到达目的地的原因。

顺便说一句,如果在目标主机上意外收听了目标端口,那就是Guy Harris所描述的场景:“除非你不幸的是将UDP数据包发送到带有监听器的端口”

© www.soinside.com 2019 - 2024. All rights reserved.