![traceroute 是否使用相同的路径?](https://linux22.com/image/771268/traceroute%20%E6%98%AF%E5%90%A6%E4%BD%BF%E7%94%A8%E7%9B%B8%E5%90%8C%E7%9A%84%E8%B7%AF%E5%BE%84%EF%BC%9F.png)
我对 traceroute 的使用有点困惑。
根据这个
traceroute 命令用于查看数据包的路由方式。它的工作原理是发送 TTL 值不断增加的数据包,从 1 开始。因此,第一个路由器获取数据包,并将 TTL 值减一,从而丢弃数据包。路由器向我们发送一条 ICMP 超时消息。然后下一个数据包的 TTL 为 2,因此它通过了第一个路由器,但当它到达第二个路由器时,TTL 为 0,并返回另一个 ICMP 超时消息。Traceroute 以这种方式工作,因为在发送和丢弃数据包时,它会构建数据包经过的路由器列表,直到它最终到达目的地并收到 ICMP 回显回复消息。(来源:https://linuxjourney.com/lesson/traceroute)
根据这一点,我们如何确保 traceroute 在每次发送 ICMP 数据包时都使用相同的路径?在第二次、第三次、第四次调用等过程中,数据包难道不能被路由到其他地方吗?
谢谢。
答案1
我们不能确定,它可能会改变。
每个数据包可以有不同的路径,这里没有任何保证,它是一种帮助调试的工具,并不总是完美的真理。
数据包也可以通过一条路径到达目的地,但返回时将采用完全不同的路径。
因此,traceroute 会告诉您数据包在哪个路由器上“失败”,每次增加 TTL 时都会失败。要尝试验证,您需要多次运行跟踪(某些实现可能已经为您执行了此操作)
还可能存在特定规则,使不同类型的数据包采用不同的路径。例如,跟踪可能工作正常,而 TCP 和/或 UDP 端口在某处被阻止。