关于目标的实际路径,traceroute 输出是否正确

Sim*_*Sim 5 networking routing ping traceroute

Traceroute 的手册说“traceroute 跟踪从 IP 网络到给定主机的路由数据包”。,但是在对该主题进行研究时,我无法找到任何统计数据/科学工作来说明 Traceroute 实际上有多精确,以及显示的路线是否是实际采用的路线(也许不同的数据包使用完全不同的路线)以及错误是什么余量是,以及是否可能,由于不同的路由协议,Traceroute ping 可能会显示与后续 TCP 请求甚至实际 ping 数据包所采用的路径完全不同的路径。

我发现的唯一表明 Ping 跟踪可能并不完美的工作是scraper 上的文档,其中提到“ping 对于测量端到端延迟和丢失、搜索响应的 IP 地址以及通过以下方式对主机的行为进行分类很有用:检查他们对调查的反应。” 并且(据我了解)使用 MDA Traceroute 进行路径检测。因此,这意味着使用 PING 可能不会达到预期的结果。

因此我的问题是:使用 Traceroute 进行路径检测有多可靠(以及为什么)?我非常感谢有关该主题的详细信息的链接,但一般解释为什么或为什么不也足够了。

all*_*tic 5

最重要的是要记住路由不是静态的。按照设计,公共互联网上的路由一直在变化。有时路由会因为负载均衡而发生变化;有时它们会因为节点宕机而改变;有时它们会改变,因为路由器实际上随机决定改变路由规则(只是为了改变现状)。

从最终用户的角度来看,他没有系统管理员级别的权限来访问数据包的来源和目的地之间的每个中间路由器和互联网集线器,您必须像海森堡不确定性原理一样对待它。

需要考虑的事项:

  1. 根据数据包中声明的 IP“目的地”,中间路由器可能会决定以不同的方式路由您。因此,如果跟踪路由是尝试按顺序映射源和目标之间的路由器,则跟踪路由可能会因为根据您要访问的节点而采用不同的路径而偏离路线。

  2. 并非所有路由器都会侦听 ICMP 或 UDP ping。他们可能会选择默默地忽略此流量,并将其丢弃到 NIC(通常是为了帮助对抗 DDoS)。这可能会挫败您绘制路线的尝试。

  3. 即使您成功映射了路由,并且所有中间节点都回复您的 ping 并且不尝试进行映射尝试,对于您使用某种“真实”协议发送的下一个数据包,路由也可能会发生变化(或者即使您尝试第二次跟踪路由)。

  4. QoS 可能会导致正常运行的网络以不同的方式路由流量。例如,VoIP 或流媒体视频可能采用一条路径,而常规网页浏览可能采用另一条路径。

  5. 流量类型可能会导致路由不同。例如,即使不考虑 QoS,您也可能会获得与 SSH 不同的 FTP 路径。在确定位置时,中间节点可以行使任何自由裁量权(从完全随机选择路由,到恶意尝试减慢流量,到诚实地尝试通过路由到负载最小的节点来提高连接速度)从每一跳路由您的流量。

  6. 理论上,如果中间路由器愿意,也可以将您的跟踪路由尝试变成无限循环:节点 A 指向节点 B,节点 B 指向节点 C,节点 C 指向节点 A。没有什么可以阻止路由器不会对检测为“traceroute”(ICMP 或 UDP ping)的数据包执行此操作(我不确定他们为什么会选择这样做,但这是可能的)。它这样做可能是为了试图挫败您的努力,或出于任何其他原因。

多路径发现算法很有用,但它无法克服这些理论限制。

基本上,为了确定一条路径,您必须发送一个或多个数据包。这些数据包可以按照中间节点认为合适的任何方式进行路由。但是,一旦您发送另一个数据包,就绝对没有什么可以阻止路由器更改路径。这是海森堡不确定性原理的网络类比。

路径是短暂短暂的。您不应该依赖从跟踪路由收到的任何重要信息,除非您已经对拓扑有深入的了解(例如,在复杂的公司 LAN 上)并且可以控制网络的行为来诊断网络上的连接问题。参与节点。如果任何参与节点不是“您的”(如果您无法使用系统管理员权限登录它们),则跟踪路由的结果实际上是任意的。

另一方面,如果所有参与节点都是您的,您可以作为管理员控制每个节点的确切行为。例如,您可以启用 ICMP,并设置静态路由(不改变的路由)。然后您就可以确信您的跟踪路由是准确的。但是,如果您将负载均衡器放在中间,那么您将必须了解负载均衡器的行为以及它可以根据需要切换路由的方式(尽管它通常不是随机的,并且通常不会尝试故意欺骗你)。