有一组 IP 地址托管在同一个 ISP 服务器,但当我从该组中随机选择一个 IP 地址时,它会选择正确的路由,也可能选择错误的路由。我给你举个例子:ISP IP 地址:94.0/38.xx.xx
如果我对一个随机数(如(94.2.55.112))进行 Tracert,结果是这样的:
1- 84.111.xx.xx (ISP 1)
2- 84.111.xx.xx
3- 84.110.xx.xx
4- 195.27.xx.xx (ISP 2)
5- 195.28.xx.xx
6- 99.34.xx.xx (ISP 3)
7- 94.2.55.112 (ISP 3)
然而,如果我对那六条路由(99.34.xx.xx)进行 tracert,它会完全改变,并且在到达那里之前要经过许多 ISP。
问:路由表为什么会改变?为什么不遵循上面提到的相同路线?这太令人沮丧了,这不可能是真的。我从来不知道网络路线会如此复杂。
答案1
它需要一些解释:
首先,traceroute 的工作原理是:
- Traceroute 向目标 IP(94.2.55.112)发送一个数据包,TLL=1
- 接收路由器减少 TTL,因为TTL=0丢弃该包并返回
TTL exceeded
- Traceroute 向目标 IP(94.2.55.112)发送一个数据包,时间线=2
- 接收路由器减少 TTL 并将其传递到下一跳。
- 下一跳减少 TTL,因为TTL=0丢弃该包并返回
TTL exceeded
- Traceroute 向目标 IP(94.2.55.112)发送一个数据包,时间线=3
。 。 。
依此类推,直到包裹到达目的地(94.2.55.112)。
现在,让我们检查一下路由器的工作原理:
当路由器收到数据包时,其仅有的任务是尽快将其发送到下一跳。
为了实现这一使命,路由器会决定基于路由表;互联网表的路由表可能非常庞大。检查路由表并做出决定的过程称为进程切换也是最慢的方法。因此有一些技巧可以加快速度。
有快速切换有了它,当数据包被发送到下一跳后,关于如何到达目的地的路由信息将存储在快速缓存。当路由器收到另一个发往同一目的地的数据包时,它会使用缓存。这比传统方式更快。
思科开发了一种技术,称为Cisco 快速转发或 CEF,速度更快。CEF 是一种专有系统,可以以可以快速查询的方式存储信息。
现在让我们一起来:
当目的地路由追踪是主持人(例如 94.2.55.112),对于第一个数据包,路由器将使用传统方式(进程切换)来知道目的地在哪里,但此后在下一个数据包中路由器将使用快速切换或者持续教育基金。从出发地到目的地将有固定路径。
当目的地路由追踪是路由器(99.34.xx.xx),中间路由器将执行与之前相同的操作(第一个数据包带有进程切换然后从缓存中获取),但目标路由器不会这样做,因为没有下一跳。因此,目标路由器将执行进程切换响应每个收到的数据包。
当目标路由器与不同的 ISP 有两个或多个连接时,就会出现大问题,并且这些连接负载均衡。
负载平衡意味着为了避免单个连接过载,直到路由器使用下一个连接,它使用如下机制:循环赛在所有连接之间均匀分配流量。
现在,您已经了解了适合您情况的爆炸性混合物:到路由器的跟踪路由,它将使用进程切换对于每个受负载平衡影响的包,您有每次都是不同的路径。
抱歉解释得这么长,但由于结果是多种机制的总和,所以我想尽可能清楚地解释清楚。
答案2
路由表没有改变,但目的地改变了。这就是在尝试寻找下一跳时要查看的内容。
沿途的某些路由表对目的地 94.2.55.112 和 99.34.xx.xx 的下一跳有所不同。考虑到它们位于不同的 /8 子网中,这并不奇怪。虽然看起来是这样,但定义路由时不一定考虑物理位置/接近度。