【计算机网络】TCP滑动窗口和拥塞控制

163 阅读4分钟

滑动窗口

1. 基本概念

  1. “窗口”对应的是一段可以被发送者发送的字节序列,其连续的范围称之为“窗口”;
  2. “滑动”则是指这段“允许发送的范围”是可以随着发送的过程而变化的,方式就是按顺序“滑动”。

TCP滑动窗口是TCP协议实现流量控制的核心机制,它通过动态调整窗口大小来控制发送方的发送速率,确保接收方能够及时处理到达的数据包,同时避免网络拥塞

滑动窗口的大小意味着接收方还有多大的缓冲区(内存占用)可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。

作用与优势

  • 流量控制:防止发送方发送速率过快导致接收方缓冲区溢出
  • 提高效率:允许连续发送多个数据包而不必等待单个确认
  • 全双工通信:支持双向数据传输,各自维护发送和接收窗口
  • 自适应:根据网络状况和接收方处理能力动态调整

拥塞控制

在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞

拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。

为了进行拥塞控制,TCP发送方要维持一个 拥塞窗口(cwnd)  的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。

image.png

拥塞的标志

  1. 重传计时器超时
  2. 接收到三个重复确认

工作机制

  1. 慢开始

    慢开始不是指cwnd的增长速度慢(指数增长),而是指TCP开始发送设置cwnd=1。

    • 初始阶段:当TCP连接刚建立或检测到超时重传时,拥塞窗口(cwnd)被初始化为1个最大报文段(MSS)

    • 指数增长:每收到一个有效ACK确认,cwnd增加1个MSS

      • 第1个RTT:发送1个报文 → cwnd=1 → 收到1个ACK → cwnd=2
      • 第2个RTT:发送2个报文 → 收到2个ACK → cwnd=4
      • 第3个RTT:发送4个报文 → 收到4个ACK → cwnd=8
    • 增长限制:当cwnd达到慢开始阈值(ssthresh)时,转入拥塞避免阶段

  2. 拥塞避免

    • 触发条件:当cwnd ≥ ssthresh时进入该阶段

    • 线性增长:每个往返时延(RTT)只将cwnd增加1个MSS

      • 实现方式:每收到一个ACK,cwnd增加1/cwnd
      • 例如:cwnd=10时,收到10个ACK后,cwnd=11
    • 持续监测:保持这种保守的增长方式直到检测到拥塞

  3. 快重传

    • 重复ACK检测:当发送方连续收到3个相同的ACK(即第4个相同ACK)时
    • 立即重传:不等超时定时器触发,立即重传疑似丢失的报文段
    • 判定依据:重复ACK表示接收方收到了乱序报文,暗示可能有报文丢失
  4. 快恢复

    • 阈值调整:将ssthresh设置为当前cwnd的一半(但不小于2个MSS)
    • 窗口调整:设置cwnd = ssthresh + 3*MSS(补偿网络中已存在的3个报文)
    • 阶段转换:进入拥塞避免阶段而非慢开始阶段
    • 持续传输:继续发送新数据(如有)而非完全停止

拥塞控制与流量控制的区别

拥塞控制是防止过多的数据注入到网络中,可以使网络中的路由器或链路不致过载,是一个全局性的过程。拥塞窗口解决数据通信的网络性能。

流量控制是点对点通信量的控制,是一个端到端的问题,主要就是抑制发送端发送数据的速率,以便接收端来得及接收。滑动窗口解决 发送方和接收方 / 客户端和服务端 本身的问题。

参考: TCP滑动窗口和拥塞控制机制_滑动窗口协议-CSDN博客