全网最强TCP/IP拥塞控制总结( 五 )


全网最强TCP/IP拥塞控制总结

文章插图
 
实际上还有更细粒度的分类 , 由于不是今天的重点 , 就不再深入展开了 , 当前使用的拥塞控制算法还是基于丢包Loss-Based作为主流 。
五.复杂的网络环境和拥塞控制我们知道在网络链路中连接的数量是动态变化且数量巨大的 , 每一条连接都面临着一个黑盒子式的网络环境 , 这并不像我们平时出行时看看地图就知道哪里堵了 , 为了维护一个好的网络环境 , 每一条连接都需要遵守一些约定 。
如果连接端都无所顾忌地发生数据包 , 那么网络链路很快就到了瓶颈了 , 数据通信完全无法保障 , 所以要到达一个稳定高效的网络环境还是需要费很大心思的 , 这其中有两个重要的概念:公平性和收敛性 。
说来惭愧笔者在网络上找了很多资料去理解TCP拥塞控制的公平性和收敛性 , 但是仍然没有获得一个很好的权威解释 , 所以只能结合一些资料和自身的理解去阐述所谓的公平性和收敛性 。
5.1 AIMD特性笔者认为公平性是相对于网络链路中的所有连接而言的 , 这些共享链路的连接启动和结束的时间不同 , 在实际的交互过程中每条连接占有带宽的机会是均等的 , 并且由于带宽限制连接双方通信的数据量是动态调整并且近似收敛于某个值 , 也就是呈现一个锯齿状或者更加平滑的波动曲线 , 对于基于丢包的拥塞控制算法而言AIMD线性增乘性减策略起了关键控制作用 。
接下来我们来重点看下AIMD特性 , 先来贴一张经典的图 , 直观看AIMD的过程:
全网最强TCP/IP拥塞控制总结

文章插图
 
看看维基百科对于AIMD的定义:
The additive-increase/multiplicative-decrease(AIMD) algorithm is a feedback control algorithm best known for its use in TCP congestion control.
AIMD combines linear growth of the congestion window with an exponential reduction when congestion is detected.
Multiple flows using AIMD congestion control will eventually converge to use equal amounts of a shared link.
The related schemes of multiplicative-increase/multiplicative-decrease (MIMD) and additive-increase/additive-decrease (AIAD) do not reach stability.
简单翻译一下:线性增加乘性减少算法是一个反馈控制算法 , 因其在TCP拥塞控制中的使用而广为人知 , AIMD将线性增加拥塞窗口和拥塞时乘性减少窗口相结合 , 基于AIMD的多个连接理想状态下会达到最终收敛 , 共享相同数量的网络带宽 , 与其相关的乘性增乘性减MIMD策略和增性加增性减少AIAD都无法保证稳定性 。
AIMD相比MIMD和AIAD在连接进入拥塞避免阶段使用试探线性加策略而不是乘性加策略更加安全 , 在探测丢包时则大幅度乘性减少到1/2这样对于缓解拥塞会有比较好的效果更加快速 , 相反如果探测到丢包时采用线性减少AD可能拥塞持续的时间会更长 , 总体来说AIMD算是一个比较简单使用的工程版本的反馈控制 , 也具备可工程收敛性 , 因而被广泛实用 。
5.2 弱网络环境下的AIMD时间拉回20多年前 , 在互联网早期几乎所有的设备都是通过有线网络进行连接通信的 , 这也是拥塞控制在设计之后一直都起到不错作用的重要因素 , 有线连接的网络稳定性比较好 , 因此把丢包作为网络拥堵的一个特征也很正常 。
再拉回到现在 , 从2010年之后移动互联网蓬勃发展 , 移动终端的持有量已经可以称为海量 , 无线网络的引入让网络环境变得更加复杂 , 因此不稳定丢包变得更加频繁 , 但是这时的丢包就不一定是网络拥堵造成的了 , 因为整个数据包经过多种路由、交换机、基站等基础通信设备每个环节都可能发生异常 。
在弱网环境下 , 尤其是移动互联网中之前的基于AIMD的拥塞控制策略可能会由于丢包的出现而大幅降低网络吞吐量 , 从而对网络带宽的利用率也大大下降 , 这时我们采用更加激进的控制策略 , 或许可以获得更好的效果和用户体验 。
恶意丢包的情况下 , 基于AIMD的拥塞控制确实就相当于被限速了 , 因为AIMD确实有些保守谨慎了 , 这个其实也很好理解的哈 。


推荐阅读