操作系统如何解析在哪个 NIC 上发送/接收?
Posted
技术标签:
【中文标题】操作系统如何解析在哪个 NIC 上发送/接收?【英文标题】:How does the OS resolve which NIC to send/receive on? 【发布时间】:2014-11-26 20:56:56 【问题描述】:我的电脑有两个千兆以太网连接 (NIC) - 一个在主板上,一个在插件卡上。我以前从未使用过多个网卡,而且我根本不清楚操作系统如何解析要使用的网卡,以及它发生在什么阶段。机会是“您不必知道”,因为它会自动发生......但我仍然想知道 - 例如,当您调用 bind()
函数时,或者稍后在发送或接收期间会发生这种情况吗?发送和接收之前的过程是否完全相同? TCP,UDP或任何其他协议是否相同? Windows 和 UNIX/Linux 或 Mac 系统有什么不同?
我很想问,因为我有一些“工作正常”的 Winsock2 代码,但是当我在单个套接字上颠倒发送和接收的顺序时它停止工作。我发现它只有在至少先发送一个数据包时才会收到。
我 99% 确定某处会出现错误,但我希望 100% 确定在不太可能的情况下这是一个“功能”或超出我的代码的错误...因为症状与接收功能正常工作的可能性一致,但不知何故等待在错误的 NIC 上接收。
【问题讨论】:
"仅在至少先发送一个数据包时才收到" ...如果您在谈论 UDP,这可能是由内部防火墙或任何可能在途中的外部防火墙引起的,或者甚至可能通过网络交换机,如果出于某种原因它认为 MAC 地址属于不同的端口。 【参考方案1】:它查询 IP 路由表以找到最便宜的路由,从而确定出站 NIC。当您connect()
时会发生这种情况。在 UDP 中,如果您不连接(通常不会),它会发生在 send()
。
【讨论】:
发送或接收是否完全一样?以上是关于操作系统如何解析在哪个 NIC 上发送/接收?的主要内容,如果未能解决你的问题,请参考以下文章
具有多个 NIC 的计算机上的 UDPClient 多播接收失败