如何在 Windows Server 中禁用具有重叠数据的 TCP 数据包?

如何在 Windows Server 中禁用具有重叠数据的 TCP 数据包?

考虑一下 Windows Server 2016 上的这个简短的 Wireshark 数据包捕获:

重叠 TCP 数据包

框架-1

客户端(192.168.201.5)的 TCP 窗口大小为 1504 字节。

框架-5

TCP 服务器回复一个数据包(长度为 1083)。

TCP Payload: 1029 bytes
TCP Seq No: 1

框架-6

服务器没有等待前一个数据包的确认,就发送了另一个数据包(长度为 1414)。

TCP Payload: 1360
TCP Seq No: 145

概括

因此,为了最大化有效载荷传输:

  • 服务器1..1029在第一个数据包中发送了数据字节。
  • 服务器145..1504在第二个数据包中发送了字节的数据。
  • 实际上两个数据包都包含145..1029字节。

问题

该服务器正在与小型设备通信,这些设备的 TCP 堆栈功能不够强大,无法组装包含重叠数据的数据包。因此会话失败(第 12 帧中的 TCP 重置)。

有没有什么方法可以配置 Windows 以便它发送更简单(不重叠)的数据包?

编辑 您可以下载pcap 文件了解详细信息。

編輯-2

下载完整会话的 pcap 文件可以通过应用过滤器来查看此会话tcp.port == 50002 and ip.addr == 192.168.201.5

答案1

在我看来,转储中似乎有两个不同 TCP 会话的数据包。这些会话似乎具有相同的端口号,这导致了 RST 行为。

帧 1-5 和 7-8 属于同一会话,而帧 6 属于其他会话。

客户端设备在打开连接时是否使用随机 TCP 端口作为源端口?

相关内容