我使用TCP/IP发送1k数据(使用FreeRTOS + LwiP)。从文档中我了解到TCP/IP协议在其堆栈本身内有它的流控制,但是这种流控制依赖于网络缓冲区。我不确定如何在下面描述的场景中处理这个问题。
因此,在这种情况下,是否必须手动实现wifi <->队列中的数据之间的流控制?我怎样才能做到这一点?
发布于 2014-12-16 09:27:02
不,您不必自己实现流控制,TCP算法在内部处理它。
基本上,当从您的发送方接收到TCP段时,LwIP将返回一个ACK,其中包括其缓冲区中的可用空间(窗口大小)。由于数据到达的速度超过了处理速度,堆栈最终将返回窗口大小为零的ACK。这将告诉发送方的堆栈退出,然后再试一次,这将自动完成。当您从网络缓冲区中提取更多的数据时,堆栈应该重新-ACK它收到的最后一段,只是这次它打开窗口,说它可以接收更多的数据。
您想要避免的是所谓的傻窗综合征,因为它会对您的网络使用和性能产生严重的影响。如果可以的话,试着从网络中读取大量数据。避免一次填充缓冲区1字节的紧循环.
https://stackoverflow.com/questions/27497670
复制相似问题