个人电脑如何判断使用哪种网络连接来连接互联网?

个人电脑如何判断使用哪种网络连接来连接互联网?

如果您的 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......

相关内容