TCP 中的错误确认
Incorrect acknowledgements in TCP
Windows 应用程序通过 WiFi 与嵌入式设备通信,但有时突然断开连接。我已经捕获了与 Wireshark 的通信,并找到了断开连接点之间的最后一次通信。
我可以看到发送确认不正确。我可以看到 TCP 虚假重传和丢失确认。嵌入式设备的 IP 地址为 192.168.1.1,Windows PC 的 IP 地址为 192.168.1.2 谁应该为这些通信问题负责?嵌入式设备 (192.168.1.1) 或 Windows 应用程序 (192.168.1.2)。附加数据包的屏幕截图。
嵌入式设备指示的"spurious retransmissions"是正确的。
Wireshark 的 "TCP acked unseen segment" 指示不正确。这似乎是 Wireshark 错误(可能已修复也可能未修复)。
参见:Wireshark error with "TCP Acked unseen segment"?
您使用的是哪个版本的 Wireshark?
无论如何,捕获的帧显示每一端最终都正确确认了另一端发送的最后一个数据,此后任何一端都不再发送数据。所以,严格来说,协议层面没有任何问题。
在连接的最后几帧之后应该发生什么?
来自嵌入式设备的更多数据?
如捕获中所示,嵌入式设备:
- 发送虚假重传;
- 以一种奇怪的方式反弹 "receive window size" ("Win"),似乎与接收到的实际数据量无关。
(大小变化是 1460 的倍数,因此表明与缓冲区可用性有关)。
因此,考虑到 Windows TCP 问题(极不可能)与我未知的嵌入式设备中的问题之间的选择,我会选择嵌入式设备(特别是考虑到来自设备)。
Windows 应用程序通过 WiFi 与嵌入式设备通信,但有时突然断开连接。我已经捕获了与 Wireshark 的通信,并找到了断开连接点之间的最后一次通信。 我可以看到发送确认不正确。我可以看到 TCP 虚假重传和丢失确认。嵌入式设备的 IP 地址为 192.168.1.1,Windows PC 的 IP 地址为 192.168.1.2 谁应该为这些通信问题负责?嵌入式设备 (192.168.1.1) 或 Windows 应用程序 (192.168.1.2)。附加数据包的屏幕截图。
嵌入式设备指示的"spurious retransmissions"是正确的。
Wireshark 的 "TCP acked unseen segment" 指示不正确。这似乎是 Wireshark 错误(可能已修复也可能未修复)。
参见:Wireshark error with "TCP Acked unseen segment"?
您使用的是哪个版本的 Wireshark?
无论如何,捕获的帧显示每一端最终都正确确认了另一端发送的最后一个数据,此后任何一端都不再发送数据。所以,严格来说,协议层面没有任何问题。
在连接的最后几帧之后应该发生什么? 来自嵌入式设备的更多数据?
如捕获中所示,嵌入式设备:
- 发送虚假重传;
- 以一种奇怪的方式反弹 "receive window size" ("Win"),似乎与接收到的实际数据量无关。 (大小变化是 1460 的倍数,因此表明与缓冲区可用性有关)。
因此,考虑到 Windows TCP 问题(极不可能)与我未知的嵌入式设备中的问题之间的选择,我会选择嵌入式设备(特别是考虑到来自设备)。