Windows 7将本地网络的UDP数据包临时路由到默认网关



我有一个Windows服务运行在多主机Windows 7计算机上,通过UDP与本地网络上的计算机通信。这很好,但有时在Windows启动期间,网络流量会临时(30秒)路由到默认网关,从而导致UDP数据包丢失。这种数据包丢失不一定是一个问题,但会导致应用程序启动时间过长。

该服务使用INADDR_ANY绑定到套接字。现在,当我将其更改为绑定到控制网络NIC的IP地址(192.168.32.1)时,我没有发现问题。然而,我不明白为什么在这种情况下约束很重要,也不明白为什么问题只是暂时存在的。你们有人对此有什么解释吗?

除了我想找到这个问题的根本原因之外,我还想得到这个问题的答案,这样我就可以从代码中删除与特定IP地址的绑定。这将使我的应用程序代码与网络布局解耦。

网络详细信息:

  • 机器A,Windows 7,两个NIC:
    • NIC#1(外部网络):192.168.116.x/23(DHCP),网关192.168.117.1
    • NIC#2(内部网络):192.168.32.1/26(固定)
  • 机器B,VxWorks,一个NIC:
    • NIC#1(int网络):192.168.32.16/26(DHCP,由机器A分配)

使用INADDR_ANY时,将套接字绑定到默认的IP地址,即接口地址最低的IP地址。从您所描述的症状来看,在启动过程中似乎还没有配置此接口,这是有道理的。

问题是,为什么要将发送套接字绑定到任何地址。我想,send期间的隐式绑定对您来说应该没问题吧?

最新更新