![“ip route get” 如何决定传出接口](https://linux22.com/image/781809/%E2%80%9Cip%20route%20get%E2%80%9D%20%E5%A6%82%E4%BD%95%E5%86%B3%E5%AE%9A%E4%BC%A0%E5%87%BA%E6%8E%A5%E5%8F%A3.png)
想知道是什么决定了传出接口。这是我的设置
Eno1 - 192.168.3 0.2/24, Gateway - 192.168.30.1
Eno2 - 192.168.50.2/24, Gateway - 192.168.50.1
我的路由表如下所示 -
[root ~]# ip route
default
nexthop via 192.168.30.2 dev eno1 weight 1
nexthop via 192.168.50.2 dev eno2 weight 1
192.168.30.0/24 dev eno1 proto kernel scope link src 192.168.30.2 metric 100
192.168.50.0/24 dev eno2 proto kernel scope link src 192.168.50.2 metric 101
和
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default hostname 0.0.0.0 UG 0 0 0 eno1
192.168.30.0 0.0.0.0 255.255.255.0 U 0 0 0 eno1
192.168.50.0 0.0.0.0 255.255.255.0 U 0 0 0 eno2
经过此配置后,当我尝试询问 Linux 内核将使用哪个接口作为随机目的地时……它会在 eno1 和 eno2 之间玩乒乓球游戏
[root@ ~]# ip route get 1.1.1.9
1.1.1.9 via 192.168.50.2 dev eno2 src 192.168.50.2
cache
[root@ ~]# ip route get 1.1.1.10
1.1.1.10 via 192.168.30.2 dev eno1 src 192.168.30.2
cache
[root@ ~]# ip route get 1.1.1.12
1.1.1.12 via 192.168.50.2 dev eno2 src 192.168.50.2
cache
[root@-2 ~]# ip route get 1.1.1.13
1.1.1.13 via 192.168.30.2 dev eno1 src 192.168.30.2
cache
[root@-2 ~]# ip route get 1.1.1.14
1.1.1.14 via 192.168.30.2 dev eno1 src 192.168.30.2
感觉就像是随机选择的传出接口您能帮助理解是什么决定了传出接口吗?
答案1
这被称为等价多路径 (ECMP)。
Linux 旨在使用多条路径分发数据包流。单个数据包不会发生这种情况。网络堆栈会计算数据包头字段子集的哈希值。计算出的哈希值将用于下一跳选择。
请注意,平衡并非完美,实际部署中可能会出现重大问题,因为它是基于路由的,并且路由会被缓存。这意味着经常使用的 IP 将始终使用相同的路由。