Linux内核决策过程中的路由表

我在linux内核中有关于路由过程的问题。 以下是我使用的版本。

[root@server230 ~]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 7.1 (Maipo) [root@server230 ~]# uname -r 3.10.0-229.el7.x86_64 

根据tldp,路由表中使用哪个路由决定使用NETMASK。

http://www.tldp.org/LDP/nag2/x-087-2-issues.routing.html

识别特定目的地地址是否匹配路线的过程是math运算。 这个过程非常简单,但是它需要对二进制算术和逻辑的理解:如果与networking掩码逻辑与的networking地址恰好等于与networking掩码逻辑与的目标地址,则路由匹配目的地。

我有两个接口(eth0和eth1),其中每个接口在相同的子网和networking掩码中运行

 [root@server230 ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 52:54:00:80:a1:02 brd ff:ff:ff:ff:ff:ff inet 192.168.11.230/24 brd 192.168.11.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::5054:ff:fe80:a102/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 52:54:00:f1:16:b7 brd ff:ff:ff:ff:ff:ff inet 192.168.11.231/24 brd 192.168.11.255 scope global eth1 valid_lft forever preferred_lft forever inet6 fe80::5054:ff:fef1:16b7/64 scope link valid_lft forever preferred_lft forever 

路由表如下

 [root@server230 ~]# ip route show default via 192.168.11.1 dev eth0 proto static metric 100 192.168.11.0/24 dev eth1 proto kernel scope link src 192.168.11.231 192.168.11.0/24 dev eth0 proto kernel scope link src 192.168.11.230 metric 100 

当icmp数据包发送到本地networking192.168.11.2时,使用eth1而不是eth0。

 [root@server230 ~]# ping -R -c 1 192.168.11.2 PING 192.168.11.2 (192.168.11.2) 56(124) bytes of data. 64 bytes from 192.168.11.2: icmp_seq=1 ttl=64 time=0.804 ms RR: 192.168.11.231 192.168.11.2 192.168.11.2 192.168.11.231 --- 192.168.11.2 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.804/0.804/0.804/0.000 ms 

我的问题是,如果内核具有多个具有相同子网和networking掩码的接口,内核如何优先使用路由?

感谢您的阅读。

你不应该在多个接口上configuration相同的networking,这是没有意义的。 如果两个接口现在连接到同一个东西,那就错了(双方的事情都会认为他们是在另一边的东西上,而不能接触到他们),如果是的话事情可能只是使用其中的一个接口。 我实际上不知道内核是查看度量值还是仅仅使用第一个find的值,但这并不重要。

(如果你尝试这样做来获得冗余,那就是linux的调用,别人称之为其他的东西)。

如果路由表中有许多可能的行,select一个较低的METRIC。

在你的情况下,你的接口eth0的公制为100。
其他接口eth1具有默认度量(可能为0),所以内核selecteth1。 (校正的)

这里没有涉及路由,因为源和目的地在同一个IPnetworking中。 在数据包从一个IPnetworking到另一个IPnetworking的过程中,路由发生在中间节点上。

在这里,问题是关于Linux如何为特定数据包select出站接口。 我没有确切的信息,但我的猜测是,这取决于接口在系统上configuration的顺序。

但是,正如Henrik上面提到的那样,在同一个networking上configuration两个具有两个IP地址的接口没有任何理由。