我正在使用 LWIP 库在stm32核板上开发以太网应用程序,并且当我的板正在接收数据时,我收到 TCP Window Full 消息。您可以在Wireshark捕获中看到。我已经测试了好几次,并且我意识到当窗口到达2144字节时它将停止工作。
有人知道如何清理/重置该窗口吗?我知道我可以增加这个数字,就像第二张照片中看到的那样,但是我希望能够在一段时间后重设或清理它,因为如果没有的话,我会在几分钟内装满内存。
预先感谢;)
答案 0 :(得分:0)
“ TCP窗口已满”会在您的接收窗口缩小到零时发生,即-接收缓冲区被填满。在您从套接字接收数据之前,它将一直保持满状态。
通常发生以下情况:发送方发送数据的速度比接收方处理数据的速度快,或者至少从套接字接收数据。发生这种情况时,发送方应停止发送更多数据,直到接收方能够再次接收更多数据为止。在您从套接字接收数据之后,就会发生这种情况,并且有两种向发送方通知的方法:
接收器发送“ TCP窗口更新”,指示接收窗口中又有多少可用空间。这不是发送者确认的帧,它可能会丢失。因此,下面还有第二种方法。
发件人通过发送TCP Keep-Alive数据包(无数据包)连续轮询接收者。这些数据包必须由接收方确认,并且由于每个TCP帧在其标头中都包含了远端的窗口大小,因此,发送方可以获取是否可以再次接收的信息。
“ TCP窗口已满”不是一个错误-Wireshark将其涂成黑色只是为了表明如果您在传输方面遇到问题,则可能需要检查一下。此类着色的另一个示例是TCP重传。
总结-您应该从套接字接收数据。如果您已经这样做了,但是在这种情况下,没有什么要读取的(例如select
表示没有要读取的数据),那么这可能表示您的特定情况下还有其他问题。