摘自拉塞鲁特维基百科页面的实现部分
。。。在到达目的地并返回ICMP目标不可达消息之前,如果使用UDP数据包,则返回ICMP回送答复消息(如果使用ICMP Echo消息)。
它说,在最后一跳时,traceroute期望ICMP“无法到达目的地”,而我期望它使用ICMP "Echo Reply“。
我看到了这一页的历史,被一个叫“盖伊·哈里斯”的人改变了。他说:
。。。如果您使用UDP数据包(默认情况下traceroute这样做),则最后一跳返回无法到达的ICMP目的地(除非您运气不好,已经将UDP数据包发送到带有侦听器的端口),而不是ICMP Echo回复。
有人能给这个放点光吗?
发布于 2019-03-05 07:06:36
,因为traceroute需要在UDP数据报到达目的地时获取消息。
Traceroute的工作如下:
Traceroute设计将UDP数据报发送到主机端口,并且几乎不可能侦听该端口(例如33435
)。目标主机接收UDP数据报,发现未侦听数据报的目标端口,然后返回“目的地不可达”消息--更准确地说,“端口不可达”。
这就是为什么traceroute期望在最后一跳中出现一条“无法到达的目的地”消息,以确定UDP数据报已经到达目的地。
顺便说一句,如果目标端口在目标主机上被意外监听,这就是Guy Harris描述的场景:“除非您运气不好,将UDP数据包发送到带有侦听器的端口”
发布于 2021-11-28 06:28:11
https://www.slashroot.in/how-does-traceroute-work-and-examples-using-traceroute-command
上面的链接是我昨天在C中尝试做ping和traceroute函数时发现的一个链接。在这里,我们很好地解释了traceroute的工作方式,所以我建议大家更好地理解这篇文章的主题。
但是为了给你的问题提供一个简短的答案,有很多方法可以实现traceroute。文章说有3种,在Linux上使用UDP风格的实现traceroute,而在Windows上使用ICMP风格。所以你并没有完全错,但答案有点复杂。
https://stackoverflow.com/questions/54988796
复制相似问题