7

Traceroute 是一个跟踪从 A 到 B 的路径的应用程序。(A 是您的位置,B 是您要跟踪的服务器)。在 Windows 中,您可以键入tracert. 主要算法是:

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

这个算法能正常工作吗?因为在不同的时间,中间服务器可以向不同的服务器发送消息。例如,第一次,UDP 消息被发送到 A1,但在稍后的时间,它可以发送到另一个服务器,例如 B1。因此,跟踪路由将无法正常工作。

我是不是误会了什么?

4

2 回答 2

3

从手册页:

traceroute 跟踪从 IP 网络到给定主机的路由数据包

因此,如果您试图找到 您的数据包可能采用的一种可能路径,您会在traceroute.

现在,由于路由表不会每分钟都在更改,因此您发送的数据包很可能会采用与 traceroute 跟踪的相同路径。

另一个不能错过的重要点是 IPv4 标头中的记录路由选项。一旦您指定要使用此选项,路径中的每个路由器都会将其 IP 地址添加到标头中的选项中。你可以在这里阅读更多关于它的信息。问题是目的地了解中间跃点,而不是源。

我看到你在traceroute的描述中漏掉了icmp echo request和reply messages的作用。如果这不是故意的,请看一下

更新:您可以通过执行ping -R

ping -R 打开 Echo Request 数据包的路由记录,并在返回的数据包上显示路由缓冲区(被许多路由器忽略)

于 2012-11-11T07:43:16.760 回答
2

该算法正常工作。实际上,路由可能会由于沿途不同服务器的考虑而改变,例如服务器负载或可用性。假设你想从 A 向 B 发送消息。如果路由不可更改,如果路由上的某个服务器宕机会发生什么?如果无法动态调整路由,则将导致无法将消息传递到此示例中的目的地。这是一个不同的示例:假设您有一台服务器在白天用于一些繁重的计算,但它在夜间处于空闲状态。有可能只允许它在夜间通过流量,因此任何使用它的路由都需要在白天进行更改。

总而言之,我们可以肯定地说,如果没有动态路由,互联网就不可能以现在的形式存在。

添加:

Tracert从 A 向 B 发送消息。它显示了沿途的跃点。这些跃点构成执行时从 A 到 B 的有效路由。无法保证沿途的 2 个相邻点之间的连接在该跃点完成后仍然有效。唯一可以保证的是,对于每个跃点,当发送的消息tracert传递到那里时,它的 2 个端点之间都有一个链接。

于 2012-11-11T07:20:23.767 回答