考虑一下 Windows Server 2016 上的这个简短的 Wireshark 数据包捕获:
框架-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 端口作为源端口?