1. 概述
AIMD (Additive Increase Multiplicative Decrease) 是现代计算机网络传输控制协议(TCP)中用于资源分配和拥塞避免的核心算法机制。作为一个闭环反馈控制系统,AIMD 旨在在竞争性网络环境中实现带宽资源的公平性 (Fairness) 与 收敛性 (Convergence)。
该机制通过线性增加发送窗口来探索可用带宽,并在检测到拥塞(通常表现为丢包)时指数级减少发送窗口,从而在保证网络利用率的同时防止拥塞崩溃。其数学模型构成了 TCP Reno、NewReno 等标准协议实现的理论基础。
2. 核心组件与数据结构
在操作系统内核的网络协议栈实现中(以 Linux Kernel tcp_sock 结构为例),AIMD 的状态维护依赖于以下关键变量。
2.1 控制变量定义
| 变量名称 | 符号表示 | 数据类型 | 物理含义与作用 |
|---|---|---|---|
| Congestion Window | cwnd | uint32 | 拥塞窗口。发送端在收到 ACK 之前允许发送的最大字节数或段数(MSS)。它是 AIMD 算法直接操作的对象。 |
| Slow Start Threshold | ssthresh | uint32 | 慢启动阈值。决定状态机从指数增长(慢启动)切换至线性增长(拥塞避免)的临界点。 |
| Receiver Window | rwnd | uint32 | 接收窗口。由接收端通告的缓冲区大小,用于流量控制。实际发送窗口为 min(cwnd, rwnd)。 |
| Round Trip Time | RTT | uint32 | 往返时间。用于计算重传超时(RTO)及作为控制循环的时间基准。 |
2.2 状态机逻辑视图
AIMD 并非独立存在,而是嵌入在 TCP 拥塞控制状态机中。下图展示了状态流转逻辑:
cwnd >= ssthresh
Timeout / Duplicate ACK x3 / Timeout / New ACK
Connection Start -> Slow Start -> Congestion Avoidance
AIMD: Additive Increase (Loss Detected) -> Fast Recovery
AIMD: Multiplicative Decrease
3. 算法逻辑与数学模型
AIMD 算法主要运行在拥塞避免 (Congestion Avoidance) 阶段。其控制律可表述为:
I: w(t+1) = w(t) + α/w(t) 若收到非重复 ACK
D: (t+) = (t) × ( - β) 若检测到拥塞

