Networking Traceroute:它能正确地跟踪从a到B的路径吗?

Networking Traceroute:它能正确地跟踪从a到B的路径吗?,networking,tcp-ip,icmp,Networking,Tcp Ip,Icmp,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 Serv

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。因此,跟踪路由将无法正常工作


我误解了什么吗?

算法工作正常。事实上,路由可能会因途中不同服务器的考虑而改变,例如服务器负载或可用性。假设您希望将消息从A发送到B。如果路由不可更改,那么如果路由上的某个服务器停机,会发生什么情况?如果无法动态调整路由,则在本例中,将导致无法将消息传递到目的地。这里有一个不同的例子:假设您有一台服务器,白天用来进行一些繁重的计算,但晚上它是空闲的。它可能只允许它在夜间通过交通,所以任何使用它的路线都需要在白天改变

总之,我们可以肯定地说,如果没有动态路由,互联网不可能以其“目前的形式”存在

添加:

Tracert
将消息从A发送到B。它显示沿途的跳数。这些跃点构成执行时从a到B的有效路由。无法保证沿途两个相邻点之间的连接在跳跃完成后有效。唯一可以保证的是,当tracert发送的消息经过每个跃点时,它的两个端点之间都有一个链接。

从手册页:

traceroute跟踪从网络上的IP网络获取的路由数据包 他们的 到给定主机的方式

因此,如果您试图在包可能采用的路径中找到一条,您将在
跟踪路由
中找到一位朋友

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

另一个不容错过的要点是IP v4报头中的记录路由选项。 一旦指定要使用此选项,路径中的每个路由器都会将其ip地址添加到标头中的选项中。你可以阅读更多关于它的内容。关键在于目的地了解中间跳数,而不是源跳数

我发现您在跟踪路由的描述中遗漏了icmp回显请求和回复消息的角色。如果这不是故意的,那就采取行动

更新:通过执行
ping-R

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


我投了这个票,因为这是一个非常有趣的问题!我也想知道专家们的答案!我想你误解了我的问题。我的问题是,因为路线是可变的,所以我们不能通过这个算法准确地知道从A到B的路线?