TCP的滑动窗口
概要
我们了解滑动窗口之前先了解一下两个概念。
- RTT : 发送一个数据包到收到对应ACK所消耗的时间。换句话说就是从发送数据到收到数据确认的时间差。
- RTO: 重传时间间隔。TCP在发送数据包之后会启动一个重传定时器。而这个RTO就是这个重传的时间。在RTO的时间到达后还没收到来之对方的一个ACK确认,则会重新发送该数据包。这个RTO不是固定写死的配置,而是根据RTT这个时间计算出来的,具体的计算公式在这里不做具体的讲解。
- 有了上述的重传机制的概念。接下来我们就学习TCP的滑动窗口。
滑动窗口
- 我们都知道TCP在传输数据的时候,如果数据比较大,通常会拆分成一段一段的进行发送。为了能够提高传输的效率,不可能一段一段的进行发送,等一段收到确认了在去发送下一段。这样效率是比较低的。显然是不可取的。
- 所以我们要实现对数据的批量发送,对面批量传输我们必须要面对可靠性传输和包乱序的问题。
- 而TCP就是通过滑动窗口的机制解决了流量控制和乱序重排序。
作用
- 保证了TCP的可靠性传输
- 这个先暂时放一下。把滑动窗口的机制搞清楚了这个作用也清楚了。
- 保证了TCP的流控特性
- 上图中有个窗口的字段就是我们的滑动窗口,用于接收方通知发送方自己还有多少缓冲区可以接收数据,发送方可以根据接收方的处理能力来发送数据,不会导致接收方处理不过来。
滑动创建的数据计算流程
滑动窗口的基本原理
TCP会话的发送方
-
任何时候在其发送缓存类的数据都可以分为四类,如下图所示:
-
滑动窗口的滑动过程 如下图所示:
TCP会话的接收方
- 任何时候在其发送缓存类的数据都可以分为三类,如下图所示:
- 滑动窗口的过程和发送方类似。
总结
- 前面我们知道TCP的传输可靠性是建立在确认重传的机制,而滑动窗口的可靠性也是建立在确认重传的机制上。
- 发送窗口只有收到本段窗口内的数据确认才会移动滑动窗口。
- 接收窗口只有在前面数据都确认的情况下才会向右移动窗口范围。
- 滑动窗口的大小不是固定不变的,可以根据处理能力的情况调整滑动窗口的大小。
- 本人也是学习阶段,能力和表达有限,有不足的地方望不吝指教!一起学习。
- 如果文章有帮助到你欢迎关注微信公众号《后端学长》