Skip to main content
 首页 » 编程设计

sockets之套接字如何知道要使用哪个网络接口(interface) Controller

2024年06月03日10shanyou

如果一台计算机有多个网卡,所有网卡都连接到不同的网络并且正常工作,当我们打开一个套接字时,操作系统如何确定该套接字使用哪个网卡?套接字 API 是否允许我们显式指定要使用的 NIC?

请您参考如下方法:

我是从 Linux 的角度写这篇文章的,但我认为它适用于任何地方。

该决定是在绑定(bind)套接字时做出的。当调用bind时,您指定的地址决定了套接字将监听的接口(interface)。 (甚至所有接口(interface)。)

即使您不使用bind,它也会在您连接时隐式发生。在路由表中查找目的地,路由表必须包含到目的地网络的路由。该路由还包含要使用的接口(interface),甚至可以选择指定源地址。如果不指定源地址,则采用接口(interface)的主地址。

您实际上可以将 bindconnect 一起使用,以强制您的传出连接使用特定的地址和端口。套接字必须始终具有这两位信息,因此即使您没有,也会使用主地址并选择随机端口。