网工干货知识

超全学习笔记
当前位置:首页 > 干货知识

AIMD算法

更新时间:2026年03月27日   作者:spoto   标签(Tag):

AIMD是一种反馈控制算法,它被TCP协议在TCP/IP堆栈的传输层中使用。AI阶段负责在不存在拥塞的情况下,使发送方的拥塞窗口能够线性增长。而MD阶段则负责在检测到拥塞时,对发送方的拥塞窗口进行指数级的缩减。这两种阶段可以有不同的组合方式:加法型和乘法型。

AIAD、MIAD和MIMD是另外三种组合方式。 但是,它们并不能确保公平性。 相反,AIMD能够在与其他TCP流竞争网络带宽时确保公平性。 当网络中不存在拥塞情况时,MIMD算法会使拥塞窗口呈指数级增长。这样一来,出现拥塞的可能性就会增加,而且大部分带宽会被这一特定流量所占用,从而影响到其他流量的性能表现。 由于其呈指数级增长的特点,拥堵现象出现的频率会大大增加。 MIMD和AIMD都无法达到稳定性,所有的TCP流也无法在利用网络带宽的情况下实现收敛。

加成增长与减法效应(Additive Increase Multiplicative Decrease):

它被称为“拥塞避免算法”(不过这个名称其实并不准确)。 它并不能真正避免拥堵现象的发生。 实际上,并不存在用于避免拥堵的算法。 它非常谨慎地控制着“拥塞窗口”的增长速度,从而最大限度地减少进一步出现拥塞的可能性。 拥堵窗口(cwnd)的大小会随着每次传输所花费的RTT时间增加“一个”段。这就是人工智能处理过程的一部分。 与“慢启动”方式不同,在慢启动中,每收到一个“ACK”信号时,cwnd就会增加1个单位。 在检测到数据包丢失时,cwnd会减少一半。这就是MD阶段的表现。

示例:在下载或上传文件的过程中,可以查看“剩余时间”。最初,速度会呈指数级上升,而剩余的时间则相对较少。然而,一旦发生数据包丢失的情况,速度就会减半,而剩余的时间则大约会翻倍。如果继续发生数据包丢失的情况,那么速度将进一步下降,而剩余的时间则再次翻倍。

AIMD的主要目标:

与“慢启动”阶段相比,AIMD的探测过程要“缓慢”得多。 缓慢的启动会导致拥塞窗口的大小呈指数级增长(每RTT增加一倍),而AIMD则会使cwnd以线性方式增加(每RTT增加1)。 在TCP被引入之前,并不存在任何拥塞控制机制。 在TCP协议中,发送方通常会一次性发送完整个传输带宽范围内的数据包,而并不关心中间设备是否会出现数据包丢失的情况。 这些路由器无法处理如此大量的数据包,因此这些数据包最终被丢失了。 那么,这种缓慢的启动方式就是为了应对这种情况而设计的,因此才被称为“缓慢启动”。 与原始的TCP发送速率和相关的标准相比,这一过程的开始速度较慢。而原来的TCP系统在处理拥塞情况时表现得相当不灵活。

AIMD的第二个目标是确保那些争夺带宽资源的各个数据流能够公平地共享资源。 如果网络中出现拥塞情况,那么将cwnd减半后,网络的使用量也会相应减少一半或更低。这样一来,其他TCP数据流(即客户端)就可以继续使用这些资源了。 当所有流量都能获得相等的带宽分配时,这个系统就被称为“公平系统”。 在1000个分段中,有50%的段数为500个;而在100个分段中,有50个分段处于拥塞状态。因此,拥塞的TCP数据流能够给其他TCP客户端分配适当的网络资源,从而确保连接的公平性。

算法:

每当收到一个ACK信号时,就将cwnd的值增加(1 ÷ cwnd),并在网络中发送1个新的数据包。

  1. cwnd = cwnd + (1 ÷ cwnd)
  2. in-flight = in-flight - 1 + 1 // 减1是因为我们收到了确认信号;加1是因为我们发送了1个新的数据包。

假设当我们收到ACK时,cwnd的值为10。

cwnd = 10 + (1 ÷ cwnd), since the cwnd increases by 1 per RTT, means when all the ACK comes. So, for 1 ACK, cwnd increases by 1/cwnd.在飞行过程中 = 10 - 1 = 9 + 1, inflight must be equal to cwnd, So, 1 new packet is send to compensate 1 ACK packet.

因此,如果所有数据段都成功被确认了,那么cwnd的值最终会增加“1”。

例如:假设 cwnd = 10,inflight = 10。当第一个ACK到达时,cwnd变为10.1;当第二个ACK到达时,cwnd变为10.2;以此类推,当第十个ACK到达时,cwnd变为11。因此,最初有10个段,而当这10个段的全部ACK都到达时,cwnd就变为11了。

通过SSR+AIMD来避免拥塞现象

重要提示:

当缓慢的启动过程达到ssthresh值时,系统就会将控制权交给AIMD。

在慢启动阶段出现丢包情况时,ssthresh会被设置为cwnd的一半,此时AIMD阶段开始。

当缓慢的启动过程持续1秒后,它会以cwnd=initcwnd=1的状态重新启动。

在AIMD阶段出现数据包丢失的情况下,ssthresh的值会减半,而cwnd则会被重置为inticwnd。之后,慢启动阶段会重新开始。

使用AIMD的协议

只有TCP协议在检测到拥塞时,会同时使用AIMD技术和慢启动重启技术来采取相应的纠正措施。

AIMD与Slow Start Restart机制非常兼容。这种组合方式几乎被所有TCP协议所采用,比如Tahoe、Reno、NewReno和Cubic等。当流量开始增加时,会采用Slow Start Restart机制;当该机制达到某个阈值时,就会转为AIMD机制。如果检测到拥塞情况,AIMD又会重新切换到Slow Start Restart机制。从网络公平性的角度来看,AIMD机制非常有效,而且不会对其他TCP流造成负面影响。

AIMD的性能指标

  1. 兼容性:如今,几乎每台设备都使用某种版本的TCP协议。AIMD则是所有TCP协议的不可或缺的一部分。它兼容所有的TCP版本。拥塞避免功能实际上是一种反馈机制,它向发送方通报链路或路由器出现拥塞的情况,从而让发送方停止发送数据包。其重点在于……“当”而不是如果.
  2. 有效性:AIMD是一种非常有效的拥塞避免算法。当链路中出现数据包丢失时,该算法就会开始发挥作用。它会逐步探测网络状况,并采取有效的措施来避免进一步的数据包丢失。
  3. 响应速度:它是最具有响应性的设备。一旦检测到数据包丢失的情况,之前正在运行的算法就会立即停止,并将控制权交给AIMD。如果在AIMD阶段再次出现数据包丢失的情况,那么设备会立即将控制权交给“慢启动重启”机制。

AIMD算法的影响

例如,假设 cwnd 为 1000 个段。当发生数据包丢失时,慢启动机制会被触发,从而开始 AIMD 阶段。在这种情况下,cwnd 会下降到 500 个段(即 1000 个段的一半)。如果使用 AI 阶段来恢复 cwnd,那么需要大约 500 个 RTT 时间才能让 cwnd 重新达到 1000 个段。如果每个 RTT 为 100 毫秒,那么 500 个 RTT 就是 500 × 100 毫秒 = 50000 毫秒,也就是 50 秒!因此,AIMD 对客户端性能的影响非常大。

建议的解决方案

出现了一种新的拥塞控制算法类别,被称为“高速”拥塞控制算法。这类算法的具体实现方式如下:HighSpeed TCP中,当AI参数的值为cwnd时,其拥塞控制策略为cwnd + a;而当MD参数为cwnd时,其拥塞控制策略则为cwnd × b。此外,还有可扩展的TCP算法,该算法需要固定的RTT次数才能恢复到原来的cwnd值。另外还有一种名为Binary Increase Congestion Control(BIC)的算法,它实际上是CUBIC算法的前身。还有另一种名为HighSpeed TCP的算法,以及CUBIC算法本身。CUBIC算法的设计目的是为了解决BIC算法所存在的公平性问题。

              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

相关资讯

即刻预约

免费试听-咨询课程-获取免费资料