我对traceroute的使用有点困惑。
根据这个
traceroute 命令用于查看数据包是如何被路由的。它的工作原理是发送 TTL 值从 1 开始递增的数据包。因此,第一个路由器获取数据包,并将 TTL 值递减 1,从而丢弃数据包。路由器将 ICMP Time Exceeded 消息发回给我们。然后下一个数据包的 TTL 为 2,因此它通过了第一个路由器,但当它到达第二个路由器时,TTL 为 0,它返回另一个 ICMP Time Exceeded 消息。Traceroute 之所以这样工作,是因为它在发送和丢弃数据包时会构建一个数据包经过的路由器列表,直到它最终到达目的地并获得 ICMP Echo Reply 消息。(来源:https ://linuxjourney.com/lesson/traceroute )
据此,我们如何确保traceroute在每次发送ICMP数据包时使用相同的路径?在第二次、第三次、第四次呼叫等期间不能将数据包路由到其他地方吗?
谢谢。
我们不能确定,它可以改变。
每个数据包可以有不同的路径,这里不能保证,它是一个帮助调试的工具,并不总是一个完美的真理。
一个数据包也可以在那里走一条路径,但返回的路径完全不同。
因此,traceroute 确实告诉您的是,随着 TTL 的每一步增加,数据包在哪个路由器“失败”。尝试并验证您多次运行跟踪(某些实现可能已经为您执行此操作)
也可能有特定的规则,这使得不同类型的数据包采用不同的路径。例如,跟踪可能工作得非常好,而 TCP 和/或 UDP 端口在某处被阻塞。