我有一台带有两个网络接口的 PC:eth0 和 eth1。
eth0 - 具有 192.168.11.X/24 的 IP。
eth1 - 具有 192.168.130.X/24 的 IP。eth1 有互联网连接。
当我尝试连接到互联网时,我的操作系统如何知道要使用哪个接口?它是否遍历所有默认网关?它是否有每个接口提供的任何缓存?Windows和Linux之间的行为有什么区别吗?
我有一台带有两个网络接口的 PC:eth0 和 eth1。
eth0 - 具有 192.168.11.X/24 的 IP。
eth1 - 具有 192.168.130.X/24 的 IP。eth1 有互联网连接。
当我尝试连接到互联网时,我的操作系统如何知道要使用哪个接口?它是否遍历所有默认网关?它是否有每个接口提供的任何缓存?Windows和Linux之间的行为有什么区别吗?
我将回答房子的 Linux 方面(至少对于基于 Debian 的系统,例如 Ubuntu,因为此时它对用户来说更常见):
在命令行中键入以下内容:
route -n
您应该会看到您的“路由表”出现,如下所示:
Destination Gateway Genmask ... Iface
0.0.0.0 192.168.11.254 0.0.0.0 ... eth0
169.254.0.0 0.0.0.0 255.255.0.0 ... eth0
192.168.11.0 0.0.0.0 255.255.255.0 ... eth0
192.168.130.0 0.0.0.0 255.255.255.0 ... eth1
我省略了几列,但基本上,“Destination”下的“0.0.0.0”行是确定默认路由所在的行。换句话说,所有流量都不会流向其他线路中的任何其他子网(google.com、facebook.com 等)。
如果不正确(如上表,其中“eth1”是你想要上网的网卡),你应该改变默认路由:
sudo route del default
sudo route add default gw 192.168.130.254 netmask 255.255.255.0
这将暂时解决它。要使其永久化,请编辑您的接口文件:
sudo gedit /etc/network/interfaces
将其编辑为如下所示(根据您的具体情况进行更改):
auto eth0
iface eth0 inet dhcp
up route del default
auto eth1
iface eth1 inet dhcp
up route add default gw 192.168.130.254 netmask 255.255.255.0
然后重新启动网络以查看是否可以解决问题:
sudo /etc/init.d/networking restart
您要询问的功能是路由表,即主机已知的目的地列表。
当操作系统需要转发一个数据包时,它会检查这个列表并选择最合适的一个(从特定目的地到一般目的地)。例如:
192.0.2.0/28 - 192.0.2.1 via eth1
198.51.100.0/27 - 198.51.100.1 via eth0
0.0.0.0/0 - 203.0.113.1 via eth0
注意最后一个目的地:它将匹配任何 IPv4 地址。