我了解客户端如何跟踪到服务器的路由(使用 traceroute 或 tracert)。但是有没有办法让服务器跟踪到客户端的路由?
问题是我有一群住在偏远地区的互联网用户,他们抱怨他们的互联网访问速度很慢。我计划构建一些软件,使他们能够轻松地运行下载测试,然后存储结果。一旦我们收集了合理数量的数据,我们希望能够找到一种模式。
结合下载数据,拥有 traceroute 数据会很棒。如果不编写一些客户端软件,我无法从客户端启动它,这是我不想做的事情。因此,我试图找到一种收集路由信息但由服务器发起的机制。
我的偏好是使用 linux 服务器。
你不想这样做。从服务器到客户端运行的跟踪路由不能保证返回与从客户端到服务器运行相同的结果。
数据包从节点 A 到节点 B 的路由很容易与相反方向的路由不同。* 任何给定 IP 数据包所采用的确切路由由数据包路径上的中间路由器确定。路由器可能有多个到目标网络的路由(例如,为了冗余),并且可以根据网络拥塞、链路故障等情况自由决定使用哪条路由。
因此,不可能从节点 B(即“服务器”)开始对从 A 到 B 的路由进行有意义的跟踪,因为不能保证报告的路由是实际用于从节点 A 发送到 B 的数据包的路由。
如果服务器确实要“启动”从客户端到服务器的跟踪路由,则服务器必须简单地命令客户端运行到服务器的跟踪路由。这当然与在客户端上配置一个计划或触发的命令来执行完全相同的事情没有什么不同。
*一些从节点 A 发送到 B 的数据包甚至有可能采用与其对应的不同路由,尽管实际上这通常不会在其他稳定的网络中发生。