在我的其中一台 Web 服务器上,环回路由位于第二位置,而在其他服务器上显示路由时它通常位于第三位置:
>ip route show
一台 centos 7 服务器上显示的结果:
default via 85.x.x.254 dev enp32s0
85.x.x.192/26 dev enp32s0 proto kernel scope link src 85.x.x.201
169.254.0.0/16 dev enp32s0 scope link metric 1002
另一台 centos 7 服务器的结果:
default via 217.x.x.1 dev em1
169.254.0.0/16 dev em1 scope link metric 1002
217.x.x.0/24 dev em1 proto kernel scope link src 217.x.x.216
这有什么不同吗?这有什么后果吗?有人能解释为什么会发生这种情况吗?
答案1
按照定义,输入路线的顺序并不重要。这是由于路线的应用方式决定的:更具体的路线优先于更通用的路线。
假设您有两条路线:
- 第一个用于 172.16.0.0/16 网络,通过网关 192.168.1.1
- 第二个用于 172.16.32.0/24 网络,通过网关 192.168.1.2
当向 IP 地址为 172.16.32.1 的机器发送数据包时,所选网关将是总是192.168.1.2,与系统中输入路由的顺序无关。
但是有一个问题:同一个网络,但网关不同?例如,考虑以下设置:
- 通过网关 192.168.1.1 到达 172.16.32.0/24 网络的第一条路由
- 通过网关 192.168.1.2 到达 172.16.32.0/24 网络的第二条路由
系统如何运作?如果你想让一条路线优先于另一条相同的路线,你必须为它们分配一个度量值。度量被视为“成本”值,度量值越低,越优先。因此,如果您的系统有两条其他方面相同的路由但使用不同的度量,则选择度量值较低的路由。
但是,如果两条路由甚至度量值都相同,会发生什么情况?在这种(极端)情况下,默认行为是未定义的,并且因系统而异。例如,一个系统可能优先选择第一个输入的路由,而另一个系统可以优先选择最后输入的路由。其他系统可以使用两个都同时路由,以近似循环的方式分发数据包,称为等价路由协议(等价多路径路由)。最后,其他系统可以禁止两个真正相同的路由的存在,甚至拒绝进入这样的路由的可能性。
答案2
是的,网络路由的顺序通常与操作系统无关,非常重要。
路由是程序。也就是说,当您收到发往网络 A 的数据包时,请使用路由器 A 来处理。当您收到发往网络 B 的数据包时,请使用路由器 B。
假设 A 位于 B 内部,例如 A = 192.168.1.0/24 和 B = 192.168.0.0/22。那么如果我们反转所应用路由的顺序,A 将不会产生任何影响,因为 A 的全部都在 B 内部。另一方面,按照此顺序,即使 B 排在第二位,该路由仍会影响 B,因为其 75% 的主机不在 A 中。
在此上下文中(静态路由),路由应用的排序是通过静态度量来确定的。度量最小(最便宜的路由)优先。