如果一台计算机有多个网卡,所有网卡都连接到不同的网络并且正常工作,当我们打开一个套接字时,操作系统如何确定该套接字使用哪个网卡?套接字 API 是否允许我们显式指定要使用的 NIC?
请您参考如下方法:
我是从 Linux 的角度写这篇文章的,但我认为它适用于任何地方。
该决定是在绑定(bind)套接字时做出的。当调用bind
时,您指定的地址决定了套接字将监听的接口(interface)。 (甚至所有接口(interface)。)
即使您不使用bind
,它也会在您连接
时隐式发生。在路由表中查找目的地,路由表必须包含到目的地网络的路由。该路由还包含要使用的接口(interface),甚至可以选择指定源地址。如果不指定源地址,则采用接口(interface)的主地址。
您实际上可以将 bind
与 connect
一起使用,以强制您的传出连接使用特定的地址和端口。套接字必须始终具有这两位信息,因此即使您没有,也会使用主地址并选择随机端口。