Windows 防火墙导致连接限制

Windows 防火墙导致连接限制

我有一个在 Win8.1(或 WinServer2012,没有区别)上运行的应用程序,它在单独的进程中提供两个 HTTP 服务器侦听器(一个通过 .NET HttpListener 使用 HTTP.SYS,另一个使用 Microsoft OWIN 和自托管 ASP.NET WebAPI)。

防火墙已配置允许规则,以允许两个服务器(通过基于 TCP 端口的规则)连接到本地子网。

每个客户端都会与服务器建立三个 LongPoll 连接(两个连接到 HTTP.SYS,一个连接到 OWIN),此外还要建立加载初始 HTML/JS/图像资源所需的任何连接。它使用 Linux 中基于 WebKit 的浏览器来完成所有操作。

客户端数量少时,一切都运行正常。(在某些情况下,即使客户端数量多时也能正常运行;我还无法确定此问题的具体触发因素。)

在连接了大约 12 个这样的客户端后,其中一些客户端无法连接到服务器 - 它们只是等待连接而没有加载任何内容(或者有时它们只加载部分资源,例如它们成功连接到一个服务器,但没有连接到另一个服务器)。一旦它们真正建立连接,它们往往会继续工作,因为浏览器会重新使用现有连接来处理后续请求。

使用服务器上的 Wireshark 进行观察表明,HTTP 请求已在网络层收到,但服务器应用程序未看到它。每隔两分钟,客户端网络堆栈就会出现一次 TCP 重传,试图重新发送原始请求。大约 15 分钟后,客户端放弃并向客户端应用程序报告失败,然后客户端应用程序断开连接并重新连接;有时会再次启动重传周期,有时又能正常工作。

断开并重新连接所有客户端设备上的以太网电缆即可重现此问题 - 有些设备会通过,而其他设备则会像上文一样进入重传循环。奇怪的是,拔掉所有客户端设备的电源然后同时启动它们通常不会触发此问题。

禁用服务器上的 Windows 防火墙似乎可以解决所有问题。是否有需要更改的设置来解决这个问题,同时保持防火墙处于启用状态?

相关内容