强制Windows发送数据包,只要他们到达networking

我有一个在Windows Server 2008 R2上运行的networking应用程序,它必须在很短的时间间隔内发送小,每个微秒都很重要。 我的问题是,窗口积累的数据包,并发送他们在一个大的TCP数据包,但我希望每个数据包分开发送。

我禁用中断适度的nic。 我也将接口的MTU大小设置为63(这是我的数据包的最小尺寸)。 我用微软的Netmon检查stream量,大部分时间这个设置似乎被忽略,Windows在发送数据包之前一直在积累数据包。 我究竟做错了什么? 数据包一到达接口,是否有其他方式强制windows发送小包? 据我所知,Windows正在使用Nagle来合并数据,但我无法使用registry来禁用它。 我无法改变平台。

如果您对应用程序本身有任何控制,则在创build套接字时设置套接字选项TCP_NODELAY将会产生您正在查找的效果。 这会通知套接字为该连接禁用Nagel。 这可能是最可靠的方法。

这听起来像你已经发现了TcpAckFrequencyregistry技巧; 但是如果你没有,那么如果你不能调整应用程序代码,它可能会提供一些解决办法。 为了那个原因:

  1. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Interfaces下find您的界面
  2. 创build一个名为TcpAckFrequency的新的32位DWORD值并将其设置为1。

那里曾经有一个叫做TcpNoDelay的键,但是它似乎已经在Win 2008中被移除了。