![如何预先知道源和目的地之间的路由器数量?](https://linux22.com/image/741489/%E5%A6%82%E4%BD%95%E9%A2%84%E5%85%88%E7%9F%A5%E9%81%93%E6%BA%90%E5%92%8C%E7%9B%AE%E7%9A%84%E5%9C%B0%E4%B9%8B%E9%97%B4%E7%9A%84%E8%B7%AF%E7%94%B1%E5%99%A8%E6%95%B0%E9%87%8F%EF%BC%9F.png)
我正在学习 Kurose 和 Ross 的《计算机网络》一书,在 Traceroute 小节下我阅读了以下内容:
更具体地说,假设源和目标之间有 N - 1 个路由器。然后源将向网络发送 N 个特殊数据包,每个数据包都指向最终目的地。这 N 个特殊数据包标记为 1 到 N,第一个数据包标记为 1,最后一个数据包标记为 N。当第 n 个路由器收到标记为 n 的第 n 个数据包时,路由器不会将数据包转发到其目的地,而是将消息发送回源。
我以为数据包的路由取决于从源到目的地的流量和其他因素。所以,我认为数据包经过的路由器数量可能会不时发生变化。
但从引文中,我了解到在数据包从源传输到目的地之前,源和目的地之间的路由器数量是已知的。如果是这样,源如何知道这个数字?如果不是,有人可以向我解释这种路由现象吗?
答案1
你最初的想法是正确的。跳数事先是不知道的,而且确实会改变。你对这句话的理解有点太字面化了,即错误地理解为确实有一个标记为 N 的数据包,第 n 个路由器会收到它,而且它以某种方式知道自己是第 n 个路由器。这不是你的错,因为这句话让人困惑。
在跟踪路由中ICMP 数据包发送出去TTL(生存时间)字段超时第一跳,然后第二跳,然后...第 n 跳。在每次跳跃中,当发生超时时,ICMP 时间已超出消息被发送回原点(你)。通过收集渐进的超时消息,你可以生成到目标网络的路径。第 n 个路由器(你的目标)没有超时,并发回一个ICMP 回显答复(当回声被用作跟踪路由消息媒介时)。
回到您的引言并且不完全按照字面意思理解,第 n 个数据包将是您发出的最后一条消息,在您通过发送具有逐渐变长的 TTL 的消息生成到该点的路径之后(对于 n-1 个路由器),该数据包最终会到达目标。
希望有所帮助。