Sockets 操作系统如何解决在哪个NIC上发送/接收?

Sockets 操作系统如何解决在哪个NIC上发送/接收?,sockets,network-programming,winsock,Sockets,Network Programming,Winsock,我的电脑有两个千兆以太网连接(NIC)——一个在主板上,一个在插件卡上。我以前从未使用过多个NIC,我只是不清楚操作系统如何决定使用哪个NIC,以及在哪个阶段使用。机会是“你不必知道”,因为它会自动发生。。。但我仍然想知道,例如,在调用bind()函数时,还是在稍后的发送或接收过程中,会发生这种情况?发送和接收之前的过程是否完全相同?TCP、UDP或任何其他协议是否也一样?Windows与UNIX/Linux或Mac系统之间有什么不同 我之所以这么问,是因为我有一些Winsock2代码“工作正常

我的电脑有两个千兆以太网连接(NIC)——一个在主板上,一个在插件卡上。我以前从未使用过多个NIC,我只是不清楚操作系统如何决定使用哪个NIC,以及在哪个阶段使用。机会是“你不必知道”,因为它会自动发生。。。但我仍然想知道,例如,在调用
bind()
函数时,还是在稍后的发送或接收过程中,会发生这种情况?发送和接收之前的过程是否完全相同?TCP、UDP或任何其他协议是否也一样?Windows与UNIX/Linux或Mac系统之间有什么不同


我之所以这么问,是因为我有一些Winsock2代码“工作正常”,但当我在单个套接字上颠倒发送和接收顺序时,这些代码就停止了工作。我发现它只有在至少有一个数据包首先发送时才会收到


我99%肯定某个地方会有一个bug,但我想100%肯定在不太可能的情况下,这是一个“特性”,或者是一个超出我代码范围的bug。。。因为症状与接收功能正常工作的可能性一致,但不知何故等待在错误的NIC上接收。

它查阅IP路由表以找到最便宜的路由,从而确定出站NIC。当您
connect()
时会发生这种情况。在UDP中,如果您不连接(通常不连接),则会在
send()

上发生,并且无论您是发送还是接收,情况是否完全相同?“仅当至少有一个数据包首先发送时才接收”。。。如果你说的是UDP,这可能是由于内部防火墙,或任何可能在路由中的外部防火墙,甚至可能是由于网络交换机,如果出于某种原因认为MAC地址属于不同的端口。