有时 Windows / .net 应用程序会忽略 tcp fin 标志

pQd*_*pQd 5 windows tcpip tcp

我遇到了无法解决的网络问题。在一些运行 Windows 8.1 并与 Linux http 服务器通信的计算机上,TCP 连接在 Windows 端悬而未决,而不是正确关闭。

响应后 [分成几个部分,由 Windows 确认,tcp 数据包] linux 服务器 - 10.14.11.59 - 发送一个包含 FIN 和 ACK 标志设置的 tcp 数据包。 在此输入图像描述

Windows 机器(10.14.10.195)对此进行了确认,数据包仅设置了 ACK 标志。 在此输入图像描述

Linux 会多次重新发送带有 FIN 和 ACK 标志的数据包,而 Windows 机器 - 由于某种原因仍然保持连接打开;Windows 机器永远不会发送带有 RST 标志的数据包。 在此输入图像描述

如果发生这种情况,Windows 应用程序将等待并最终超时。这种情况在 10-50% 的尝试中随机发生。

两台机器之间的流量未经过滤;基于主机的防火墙已关闭。为了避免潜在的问题,我在 Linux 和 Windows 上禁用了 TCP 卸载。另外,在 Windows 上运行以下命令并重新启动机器:

netsh int tcp set global chimney=disabled
netsh int tcp set global autotuninglevel=disabled
netsh int tcp set global rss=disabled
Run Code Online (Sandbox Code Playgroud)

数据包捕获:此处

任何想法将不胜感激!

pQd*_*pQd 3

我们发现客户端计算机上运行的 eset Endpoint Security 是罪魁祸首。

禁用防火墙功能还不够;但卸载它完全解决了问题。

我的同事在这里找到了类似问题的描述;显然升级到最新版本的eset也解决了这个问题。