操作系统如何知道用于互联网的网络接口?

时间:2012-08-24 12:47:55

标签: sockets network-programming network-interface

我有一台带有两个网络接口的PC:eth0和eth1。

eth0 - ip为192.168.11.X / 24.

eth1 - ip为192.168.130.X / 24。 eth1具有互联网连接。

当我尝试连接互联网时,我的操作系统如何知道使用哪个界面?它是否遍历所有默认网关?它是否具有每个接口提供的缓存? Windows和Linux之间的行为有什么不同吗?

2 个答案:

答案 0 :(得分:16)

我将回答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

我省略了几列,但基本上,“目标”下的“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

这将解决它现在。要使其永久化,请编辑interfaces文件:

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

答案 1 :(得分:2)

您要问的功能是路由表,主机已知的目的地列表。

当操作系统需要转发数据包时,它会检查此列表并选择最合适的一个(从特定目的地到普通目的地)。例如:

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地址。