TCP 拥塞窗口的两种主要计算情景

在考研计算机网络的题目中,对 TCP 拥塞控制的考察主要围绕拥塞窗口(cwnd)的变化展开。其核心在于理解 TCP 的两个主要阶段:慢启动(Slow Start)和拥塞避免(Congestion Avoidance)。

核心概念

在深入两种情景之前,我们先回顾一下关键概念:

  • 拥塞窗口 (cwnd):发送方维持的一个状态变量,用于控制在收到确认之前可以发送到网络中的数据量。
  • 最大报文段长度 (MSS):一个 TCP 报文段所能携带的数据量的最大值。在计算题中,cwnd 的大小通常以 MSS 的倍数表示。
  • 慢启动阈值 (ssthresh):一个门限值,用于区分慢启动阶段和拥塞避免阶段。

情景一:以轮次(RTT)为单位的宏观计算

这种视角将一个 RTT(Round-Trip Time,往返时间)视为一个整体操作单位,关注在每个 RTT 之后拥塞窗口的整体变化。这在分析慢启动阶段的指数增长时尤为常见。

  • 核心思想:在慢启动阶段,每经过一个 RTT,拥塞窗口 cwnd 就会翻倍。
  • 适用场景
    • 计算 TCP 连接建立初期,经过 N 个 RTT 后 cwnd 的大小。
    • 题目信息较为简化,不涉及对单个 ACK 的精细分析。
  • 解题思路
    1. 初始状态:TCP 连接刚建立时,cwnd 通常初始化为 1 个 MSS。
    2. 指数增长:只要 cwnd 小于慢启动阈值 ssthresh,就执行慢启动算法。
      • 第 1 个 RTT 后,cwnd = 1 * 2 = 2 MSS
      • 第 2 个 RTT 后,cwnd = 2 * 2 = 4 MSS
      • 第 N 个 RTT 后,cwnd = 2^N MSS
    3. 触及阈值:当 cwnd 增长到大于或等于 ssthresh 时,TCP 将进入拥塞避免阶段。

例题:假设初始 ssthresh 为 16 MSS,cwnd 初始为 1 MSS。问经过 4 个 RTT 后,cwnd 是多少?

  • 解答
    • 初始:cwnd = 1 MSS
    • RTT 1 后:cwnd = 2 MSS
    • RTT 2 后:cwnd = 4 MSS
    • RTT 3 后:cwnd = 8 MSS
    • RTT 4 后:cwnd = 16 MSS。此时 cwnd 达到 ssthresh,下个 RTT 将进入拥塞避免阶段。

情景二:以收到单个 ACK 为单位的微观计算

TIP

2016 年 Q41

  • 原题情景: H3 收到的第 8 个确认段所通告的接收窗口是多大?此时 H3 的拥塞窗口变为多少?H3 的发送窗口变为多少?

这种视角关注每当发送方收到一个对数据报文的确认(ACK)时,cwnd 的精细变化。它能更准确地描述拥塞窗口的增长过程,尤其是在拥塞避免阶段。

  • 核心思想
    • 慢启动阶段每收到 1 个 ACK,cwnd 增加 1 个 MSS。 因为在一个 RTT 内会收到前一个窗口所有报文的 ACK,这同样会导致窗口大小翻倍的效果。
    • 拥塞避免阶段:每收到 1 个 ACK,cwnd 增加 MSS/cwnd (即 MSS * (MSS / cwnd_bytes))。 这确保了在一个 RTT 内(即收到一个窗口大小的 ACK 后),cwnd 总共只增加约 1 个 MSS,实现线性增长。
  • 适用场景
    • 需要精确计算拥塞避免阶段 cwnd 的增长。
    • 题目涉及到非整数个 RTT 或者对 ACK 的响应有特殊说明。
    • 分析从慢启动到拥塞避免的平滑过渡。
  • 解题思路
    1. 判断阶段:首先根据当前的 cwndssthresh 判断 TCP 处于慢启动还是拥塞避免阶段。
    2. 计算增长
      • 慢启动new_cwnd = old_cwnd + 1 MSS (每收到一个 ACK)。
      • 拥塞避免new_cwnd = old_cwnd + MSS/cwnd (每收到一个 ACK)。
    3. 处理拥塞事件:当发生网络拥塞(如超时或收到 3 个重复 ACK)时,需要更新 ssthreshcwnd 的值,并可能切换回慢启动阶段。

例题:当 cwnd 为 10 MSS,ssthresh 为 8 MSS 时,发送方连续发送 10 个报文段。当收到这 10 个报文段的 ACK 后,cwnd 变为多大?

  • 解答
    • 判断阶段:因为 cwnd (10) > ssthresh (8),所以 TCP 处于拥塞避免阶段。
    • 计算增长:每收到一个 ACK,cwnd 增加 1/10 MSS。收到全部 10 个 ACK 后,总共增加 10 * (1/10 MSS) = 1 MSS
    • 最终结果:新的 cwnd = 10 MSS + 1 MSS = 11 MSS。

总结

这两种情景并非相互排斥,而是对 TCP 拥塞控制机制不同层面的解读。

特性情景一 (宏观/按 RTT)情景二 (微观/按 ACK)
核心算法慢启动慢启动拥塞避免
计算单位每个 RTT每个 ACK
增长模式指数增长 (cwnd * 2)慢启动:+1 MSS
拥塞避免:+MSS/cwnd
主要用途快速估算慢启动过程精确分析整个拥塞控制流程

在备考时,需要根据题目的具体条件灵活选用合适的模型。如果题目只给出 RTT 轮次,通常使用情景一的简化模型;如果题目涉及到具体的 ACK 回复或者拥塞避免阶段的计算,则必须采用情景二的精细模型。