TCP使用滑动窗口做流量控制与乱序重排

  • 保证TCP的可靠性
  • 保证TCP的流控特性


TCP最基本的可靠性来源于确认重传机制,滑动窗口的可靠性也是建立在确认重传机制之上的。**
image.png
滑动窗口的大小可以依据一定的策略进行动态调整。应用可以根据自身处理能力的变化,通过本端接收窗口地的大小控制来实现对对端发送窗口的流量限制。

TCP会话发送方

对于发送方在任何时候存在的数据分为四类:

  1. 已经发送且收到回应
  2. 已经发送但未收到回应
  3. 未发送但对端允许发送
  4. 未发送但由于达到窗口大小,对端不允许发送

其中第二类和第三类组成了发送窗口** :::tips 发送端只有收到对端对已发送消息的确认才会移动发送窗口的左边界** ::: 如下图,32到35属于已发送但还没有收到回应的数据,36到51属于还没有发送但是允许发送的数据。
当32被确认时,原发送窗口的右边界才被允许移动到52。
image.png

TCP会话接收方

对于接收方,会存在三种数据状态:

  1. 已接收且已发送回执
  2. 未接收但可以接收
  3. 未接收且不能接收

其中第二类为接收窗口。 :::tips 接收窗口只有在前面的所有段都被确认的情况下才会移动左边界。当前面还有字节未接收,但是收到后面字节的情况下,窗口是不会移动的,并且不对后续字节确认。以此确保对端会对这些数据进行重传。 ::: image.png