如果我有两个网络设备,我如何知道哪个网络设备正在用于任何请求的连接输出。
有了这个 :
ip r
default via 10.0.0.1 dev wlp3s0 proto static
default via 10.0.0.1 dev wlx00e04c221395 proto dhcp src 10.0.0.143 metric 600
10.0.0.0/24 dev wlp3s0 proto kernel scope link src 10.0.0.120
10.0.0.0/24 dev wlx00e04c221395 proto kernel scope link src 10.0.0.143
10.0.0.1 dev wlx00e04c221395 proto dhcp scope link src 10.0.0.143 metric 600
我有两条default
路线。系统将始终使用命令列出的第一个ip r
吗?
答案1
使用以下命令检查您的路由表,此处公制列通常决定路由优先级是什么,
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.42.0.2 0.0.0.0 UG 50 0 0 eth1
0.0.0.0 10.42.0.1 0.0.0.0 UG 100 0 0 eth0
该优先级取决于重新启动/启动后接口出现的顺序,您还可以使用以下命令影响优先级
sudo ifmetric <interface> <priority>
答案2
我认为对其他答案的评论中的讨论值得有自己的答案:
ip route
首先,虽然您可以使用或列出路由表route -n
并自己计算出可能会发生什么,但更容易的是让内核检查ip route get a.b.c.d
路由表(是的,现代 Linux 系统中有更多的表,并且route -n
仅显示主表)并告诉您结果。
其次,设计网络的经验法则是“每个主机只获得一个单身的网络接口连接到它所连接的每个子网。这里,虚拟机、网络命名空间等都算作额外的“主机”,即使它们在相同的硬件上运行。
推论是“不,您不能将多个 IPv4 地址分配给同一个网络接口”(除非您知道自己在做什么,但这样做需要您自担风险)。
原因是通过不同的网络接口访问子网不会带来任何好处:它将以一种或另一种方式进入同一子网。
如果您违反了这些规则,就像上面所做的那样,您显然有两个 WLAN 连接到同一子网:
10.0.0.0/24 dev wlp3s0 proto kernel scope link src 10.0.0.120
10.0.0.0/24 dev wlx00e04c221395 proto kernel scope link src 10.0.0.143
那么会发生什么是没有定义的。正如您所看到的,Linux 内核很乐意随机选择一个网络接口作为目的地10.0.0.*
。
因此,要么它们实际上连接到两个不同的 WLAN。在这种情况下,请更改其中一个 WLAN 的 IP 范围,例如更改为 10.0.1.0/24。或者,它们是同一个 WLAN,在这种情况下,拥有两个 WLAN 适配器就没有意义。
与默认规则类似。您应该只有一个默认规则;拥有多个规则意味着行为是未定义的,并且规则是随机选择的。这意味着一个连接中的数据包是使用不同的参数(例如源地址)随机发送的,而另一方面主机将仅识别一组参数(打开连接时使用的参数),将丢弃其他数据包,并且会将丢失的数据包视为丢失的数据包。这是因为标准互联网协议是“单宿主”的。存在多宿主协议(例如 SCTP 或多宿主 TCP 扩展),但它们目前的使用范围还不够广泛,无法发挥作用。
所以不,您不能使用两个 ISP 连接到互联网并使“互联网更快”(除非您有一些硬方法来决定使用哪个连接,例如通过目标地址)。这是每周左右都会被问到的常见问题解答。
我希望这能回答您在原始问题中未提出的所有(或至少大部分)问题。