Traceroute:发送的探测数据包的路径是否相同?

5

Traceroute是一款用于追踪从A到B路径的应用程序。(A代表您的位置,B代表您要追踪的服务器)。

其基本算法如下:

send UDP with TTL = 1
Server A1 received, and return ICMP packet to A because TTL is expired.
--> know first machine between. For example A1.

send UDP with TTL = 2
Server A1 received, and send this UDP to server A2.
Server A2 received, and return ICMP packet to A because TTL is expired
--> know second machine between. In this example is A2.

Do it until to B. we can track down: A -> A1 -> A2 -> ... ->B

我有一个疑问,让我对这个算法的正确性产生怀疑。
由于路由表频繁更新,在traceroute期间(例如TTL=3),探测数据包会沿着路径A1→A2→A3→A4传输。
那么,当我们发送TTL=4的探测数据包时,是否保证它会通过A1、A2、A3和A4,然后传输到A5?
如果不是,最终输出是否表示有效路径?
希望有人能解决这个问题。非常感谢!
1个回答

5
现在,当我们发送TTL=4的探针数据包时,它能保证通过A1、A2、A3和A4并到达A5吗?
不是所有情况都能保证,但在大多数实际情况下可能是这样的。如果TTL=4的数据包没有沿着与之前数据包相同的路径传输,则会得到不准确反映实际网络拓扑的结果。

enter image description here

您可以使用Paris Traceroute来降低这种情况发生的可能性,它是一种traceroute实现,可以操作各种IP和ICMP头字段(文章),以增加所有数据包沿同一路径传输的机会。

谢谢提供这些信息,非常有帮助。我还有一个后续问题。 路由器更新其转发表的频率是多少?是否有标准或可能的答案? 基本上,我想分析我的 traceroute 数据会出现多少错误,因为这将决定我是否需要将实现转向 paris-traceroute,因为这会增加复杂性,而且我不确定它是否可以在 Android 上完成。再次感谢。 - Pratik Kapoor
转发表的更改并不是因为路由器突然决定更改,而是由于网络的变化。这些变化偶尔会发生,特别是在不同的网络之间。然而,这些类型的异常情况更有可能是由于负载均衡器而不是网络变化引起的。我建议您仔细阅读巴黎路由跟踪白皮书,即使只是简单地浏览一下。如果准确性很重要,实现巴黎路由跟踪并不难。 - Malt
根据以下链接: https://superuser.com/questions/1139144/why-does-traceroute-shows-multiple-paths-but-mtr-does-not#:~:text=does%20not%20have%20a%20port%20number%20and%20therefore%20its%20probes%20will%20all%20follow%20the%20same%20path 在ICMP模式下使用traceroute(-I)比默认的UDP模式更可取,因为UDP实现会针对每个探测更改端口,导致不同的路径。不确定是否需要使用Paris Traceroute。 - Ehud Banunu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接