如果一台计算机有多个网卡,所有网卡都连接到不同的网络并正常运行,当我们打开一个套接字时,操作系统如何确定哪个网卡与该套接字一起使用?套接字API是否允许我们显式指定要使用的NIC?
Sté*_*hen 52
我是从Linux的角度写这个,但我认为它适用于所有地方.
在绑定套接字时做出决定.当bind被调用时,您指定的地址来判断接口插座会听的.(甚至所有接口.)
即使你不使用bind,它也会隐含地发生在你身上connect.在路由表中查找目标,该路由表必须包含到目标网络的路由.该路由还包含要使用的接口,甚至可以指定源地址.如果未指定源地址,则采用接口的主地址.
您实际上可以bind与之一起使用connect,强制您的传出连接使用特定的地址和端口.套接字必须始终具有这两位信息,因此即使不这样做,也会使用主地址并选择随机端口.
Mar*_*tos 31
(如果你觉得倾向于投票,@Shtééf的答案应该比我的更多.)
这取决于您是连接还是绑定.
如果绑定,则可以绑定到与计算机的某个接口对应的特定IP地址,也可以绑定到0.0.0.0,在这种情况下,套接字将侦听所有接口.
如果连接未绑定的套接字,则计算机的路由表与目标IP地址一起将确定连接请求所在的接口.
可以绑定套接字然后连接它.在这种情况下,套接字在进行连接时将根据绑定调用保持绑定.(感谢@RemyLebeau指出这一点.)