流量控制实施 - 如何

时间:2014-12-16 04:44:29

标签: tcp freertos flow-control lwip

我使用TCP / IP发送1k数据(使用FreeRTOS + LwiP)。从文档中我了解到TCP / IP协议在其堆栈本身内部有流控制,但此流控制依赖于网络缓冲区。我不确定在我的场景中如何处理这个问题,如下所述。

  1. 使用TCP / IP从wifi接收1k大小的数据(此数据速率将为20Mb / s)

  2. 收到的Wifi数据被放入10k size10块的队列中,每个块的大小为1K

  3. 从队列中取出每个块并以较低的速率发送到另一个接口1Mb / s

  4. 所以在这种情况下,我是否必须在来自wifi< - >的数据之间手动实现流量控制?队列?我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

不,您不必自己实施流量控制,TCP算法会在内部处理它。

基本上发生的情况是,当从您的发送方收到TCP段时,LwIP将发回一个ACK,其中包括其缓冲区中剩余的可用空间(窗口大小)。由于数据到达的速度比处理速度快,因此堆栈最终会发回窗口大小为零的ACK。这会告诉发件人的堆栈退出并稍后再试,它会自动执行。当您开始从网络缓冲区中提取更多数据时,堆栈应该重新确认它收到的最后一个段,只是这次打开窗口说它可以接收更多数据。

您想要避免的是silly window syndrome,因为它会对您的网络利用率和性能产生巨大影响。如果可以的话,尝试以大块的形式从网络中读取数据。避免使用一次填充缓冲区的紧密循环。