TCP的AIMD(加法增大乘法减小)算法详解
字数 1632 2025-11-12 02:22:02

TCP的AIMD(加法增大乘法减小)算法详解

一、AIMD算法的基本概念
AIMD(Additive Increase Multiplicative Decrease)是TCP拥塞控制的核心算法之一,用于动态调整发送方的拥塞窗口(cwnd)大小。其核心思想是:

  • 加法增大(Additive Increase):在网络未检测到拥塞时,每经过一个RTT(往返时间),cwnd线性增加1个MSS(最大报文段长度),缓慢探测可用带宽。
  • 乘法减小(Multiplicative Decrease):当检测到拥塞(如超时重传或收到重复ACK)时,立即将cwnd减半(乘以0.5),快速缓解网络拥塞。

二、AIMD的详细工作流程

  1. 初始阶段

    • 连接建立后,cwnd初始化为1个MSS(慢启动阶段实际使用指数增长,但AIMD特指拥塞避免阶段的行为)。
    • 当cwnd达到慢启动阈值(ssthresh)后,进入拥塞避免阶段,启动AIMD算法。
  2. 加法增大过程

    • 发送方每收到一个新的ACK(非重复ACK),表明数据包成功到达接收方且网络通畅。
    • 此时cwnd的更新规则为:
      cwnd = cwnd + 1/cwnd(以字节为单位时)
      或更直观的:每收到1个ACK,cwnd增加1/cwnd个MSS(例如cwnd=10时,每ACK增加0.1个MSS)。
    • 效果:经过1个RTT内所有ACK后,cwnd总共增加1个MSS(因为1个RTT内会收到cwnd个ACK)。例如:
      • 当前cwnd=10 MSS,每ACK增加0.1 MSS,收到10个ACK后增加1 MSS,最终cwnd=11 MSS。
  3. 乘法减小过程

    • 触发条件
      • 收到3个重复ACK(快速重传机制):说明部分数据包丢失,但网络仍有流动性。
      • 发生超时重传:说明网络拥塞严重,连ACK都无法返回。
    • 操作步骤:
      • 将ssthresh更新为当前cwnd的一半:ssthresh = max(cwnd/2, 2 MSS)
      • 若是超时重传,cwnd直接重置为1 MSS(进入慢启动);若是快速重传,cwnd设为ssthresh+3 MSS(进入快速恢复,后接拥塞避免)。

三、AIMD的公平性证明
AIMD的经典之处在于其公平性。假设多个TCP连接共享同一瓶颈链路:

  1. 收敛到公平
    • 当多个连接同时使用AIMD时,若某个连接占用过多带宽,其遇到拥塞的概率更高,会频繁触发“乘法减小”,从而让出带宽。
    • 经过多次增减周期后,所有连接的cwnd会趋于相等(公平带宽分配)。
  2. 效率与稳定性
    • 加法增大避免激进占用带宽,乘法减小确保拥塞快速缓解,使网络总吞吐量保持在接近瓶颈带宽的水平。

四、实例演示
假设TCP连接初始cwnd=10 MSS,ssthresh=16 MSS(已进入拥塞避免阶段):

  1. 正常传输
    • RTT1:发送10个报文,收到10个ACK后,cwnd=11 MSS。
    • RTT2:发送11个报文,收到11个ACK后,cwnd=12 MSS。
    • 持续线性增长至cwnd=20 MSS。
  2. 发生拥塞
    • 假设cwnd=20时收到3个重复ACK,触发快速重传。
    • 执行乘法减小:ssthresh = 20/2 = 10 MSS,cwnd = ssthresh + 3 = 13 MSS。
    • 进入快速恢复重传丢失包,之后回到拥塞避免阶段,从cwnd=10 MSS重新开始加法增大。

五、AIMD的局限性及改进

  1. 对高带宽延迟积(BDP)网络响应慢
    • 线性增长导致需要多个RTT才能充分利用高速网络带宽(如1Gbps链路需数千RTT)。
    • 改进:HighSpeed TCP、CUBIC等算法优化了增长函数。
  2. 对非TCP流不公平
    • UDP等无拥塞控制的流会挤占TCP带宽。
    • 解决方案:网络层设备采用AQM(主动队列管理)如RED(随机早期检测)。

通过以上步骤,AIMD以简单而优雅的方式实现了拥塞控制的核心目标:公平性、效率与稳定性。

TCP的AIMD(加法增大乘法减小)算法详解 一、AIMD算法的基本概念 AIMD(Additive Increase Multiplicative Decrease)是TCP拥塞控制的核心算法之一,用于动态调整发送方的拥塞窗口(cwnd)大小。其核心思想是: 加法增大(Additive Increase) :在网络未检测到拥塞时,每经过一个RTT(往返时间),cwnd线性增加1个MSS(最大报文段长度),缓慢探测可用带宽。 乘法减小(Multiplicative Decrease) :当检测到拥塞(如超时重传或收到重复ACK)时,立即将cwnd减半(乘以0.5),快速缓解网络拥塞。 二、AIMD的详细工作流程 初始阶段 : 连接建立后,cwnd初始化为1个MSS(慢启动阶段实际使用指数增长,但AIMD特指拥塞避免阶段的行为)。 当cwnd达到慢启动阈值(ssthresh)后,进入拥塞避免阶段,启动AIMD算法。 加法增大过程 : 发送方每收到一个 新的ACK (非重复ACK),表明数据包成功到达接收方且网络通畅。 此时cwnd的更新规则为: cwnd = cwnd + 1/cwnd (以字节为单位时) 或更直观的:每收到1个ACK,cwnd增加1/cwnd个MSS(例如cwnd=10时,每ACK增加0.1个MSS)。 效果 :经过1个RTT内所有ACK后,cwnd总共增加1个MSS(因为1个RTT内会收到cwnd个ACK)。例如: 当前cwnd=10 MSS,每ACK增加0.1 MSS,收到10个ACK后增加1 MSS,最终cwnd=11 MSS。 乘法减小过程 : 触发条件 : 收到3个重复ACK(快速重传机制):说明部分数据包丢失,但网络仍有流动性。 发生超时重传:说明网络拥塞严重,连ACK都无法返回。 操作步骤: 将ssthresh更新为当前cwnd的一半: ssthresh = max(cwnd/2, 2 MSS) 。 若是超时重传,cwnd直接重置为1 MSS(进入慢启动);若是快速重传,cwnd设为ssthresh+3 MSS(进入快速恢复,后接拥塞避免)。 三、AIMD的公平性证明 AIMD的经典之处在于其公平性。假设多个TCP连接共享同一瓶颈链路: 收敛到公平 : 当多个连接同时使用AIMD时,若某个连接占用过多带宽,其遇到拥塞的概率更高,会频繁触发“乘法减小”,从而让出带宽。 经过多次增减周期后,所有连接的cwnd会趋于相等(公平带宽分配)。 效率与稳定性 : 加法增大避免激进占用带宽,乘法减小确保拥塞快速缓解,使网络总吞吐量保持在接近瓶颈带宽的水平。 四、实例演示 假设TCP连接初始cwnd=10 MSS,ssthresh=16 MSS(已进入拥塞避免阶段): 正常传输 : RTT1:发送10个报文,收到10个ACK后,cwnd=11 MSS。 RTT2:发送11个报文,收到11个ACK后,cwnd=12 MSS。 持续线性增长至cwnd=20 MSS。 发生拥塞 : 假设cwnd=20时收到3个重复ACK,触发快速重传。 执行乘法减小:ssthresh = 20/2 = 10 MSS,cwnd = ssthresh + 3 = 13 MSS。 进入快速恢复重传丢失包,之后回到拥塞避免阶段,从cwnd=10 MSS重新开始加法增大。 五、AIMD的局限性及改进 对高带宽延迟积(BDP)网络响应慢 : 线性增长导致需要多个RTT才能充分利用高速网络带宽(如1Gbps链路需数千RTT)。 改进:HighSpeed TCP、CUBIC等算法优化了增长函数。 对非TCP流不公平 : UDP等无拥塞控制的流会挤占TCP带宽。 解决方案:网络层设备采用AQM(主动队列管理)如RED(随机早期检测)。 通过以上步骤,AIMD以简单而优雅的方式实现了拥塞控制的核心目标:公平性、效率与稳定性。