如果您的 PC(假设是 Windows)通过有线 LAN 连接,并且有一个提供 3G 互联网的 USB 加密狗,那么您的 PC 如何知道在浏览网页时使用哪个连接?Linux 是否遵循与 Windows 相同的规则?
答案1
任何时候涉及多个网络连接(在任何操作系统上),路由表都会识别要使用哪个连接。
我将使用 Linux 示例来解释路由表,但 Windows 实际上是相同的。主要区别在于它如何标记接口。
假设您有 3 个网络连接,每个连接都连接到不同的网络,如下所示:
eth0 -> 10.0.0.0/24
eth1 -> 172.16.0.0/24
eth2 -> 192.168.0.0/24
默认情况下,当您的系统配置网络连接时,它会将每个网络的路由添加到您的路由表中。以下是具有上述连接的服务器的示例路由表:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
172.16.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 10.0.0.1 0.0.0.0 UG 0 0 0 eth0
因此,如果您想连接到其中一个网络,您的 Linux 系统将根据目标网络决定使用哪个连接。如果您想连接到 IP 为 10.0.0.233 的服务器,它将使用 eth0。如果您想连接到 192.168.0.4,它将使用 eth2。
那么,路由表中没有明确列出的网络怎么办?嗯,这就是默认路由的作用所在。请注意路由表中的最后一行:
Destination Gateway Genmask Flags Metric Ref Use Iface
...
0.0.0.0 10.0.0.1 0.0.0.0 UG 0 0 0 eth0
简而言之,任何发往路由表中未明确列出的网络的流量都将通过默认路由发送。在上面的例子中,即 eth0,专门发送到 10.0.0.1 的路由器。
更长的版本是,路由决策基于网络前缀长度。给定的数据包将遵循具有最具体匹配目的地的路由。以下是 CIDR 表示法中的网络示例列表,范围从最具体到最不具体:
10.100.4.0/24 <-- Most specific
10.100.0.0/16
10.0.0.0/8
0.0.0.0/0 <-- Least specific
因此,假设目标 IP 为 10.100.6.231,则上述列表中最具体的匹配范围是 10.100.0.0/16,因此将遵循该网络的路由。如果目标是 144.92.12.24,则最具体的匹配范围是 0.0.0.0/0(这是默认路由)。一旦做出路由决定,系统就会将流量发送到适当的网络连接。
这有点冗长,但我希望它能解释清楚。一般来说,默认路由决定互联网流量将通过哪个连接。Windows 和 Linux 上的默认路由配置不同,但最终一切都在相同的底层路由机制上工作。
答案2
Windows 使用具有约束力的命令。
这基本上是一个要尝试的有序连接列表。Windows 将尝试第一个连接,如果不成功,将转到下一个,依此类推。对于互联网,它几乎总是使用第一个。如果您在 LAN 和 WAN 上,并且第二个 NIC 连接到不属于第一个 NIC 的某个 IP 模式(例如 192.168.4.X),则可以使用第二个连接。
我对 Linux 网络了解不够,无法解决这个问题,但快速搜索后发现它可能以类似的方式工作。我会再检查一下,如果有明确的答案,我会再回来修改。
编辑:
以下 baumgart 的回答更适合 Linux......