目录
本文介绍了一些基础的拥塞控制算法,欲了解更多,请查看新的博客:
(11条消息) 拥塞控制算法总结_爱嘤嘤嘤斯坦i的博客-CSDN博客
一、Tcp拥塞控制算法的发展历程及种类
有以下几种类型的分类:
- 基于丢包的拥塞控制:将丢包视为出现拥塞,采取缓慢探测的方式,逐渐增大拥塞窗口,当出现丢包时,将拥塞窗口减少,如Tahoe、Reno、BIC-TCP、Cubic等;
- 基于时延的拥塞控制:将时延增长视为出现拥塞,延时增长时增大拥塞窗口,延时减少时减少拥塞窗口,如Vegas、Westwood等;
- 基于链路容量的拥塞控制:实时测量网络带宽和时延,认为网络上报文总量大于带宽时延乘积时出现了拥塞,如BBR;
- 基于学习的拥塞控制:没有特定的拥塞信号,而是借助评价函数,基于训练数据,使用机器学习的方法造成一个控制策略,如Remy。
二、Reno算法
课本上的四个阶段:慢启动阶段、拥塞避免阶段、快重传阶段、快速恢复阶段。就是reno算法
下面这个链接详细介绍了这四个过程
https://www.cnblogs.com/MnHoy/p/16369215.html
基础核心概念:
补充:补充一些核心概念,参考自如下文章
https://blog.csdn.net/dog250/article/details/51439747#comments_20896403
先介绍了一下慢启动,ssthresh,拥塞避免。Ack确认,拥塞是怎么搞的,以及为什么每次拥塞之后窗口要设为一半。
然后介绍了一下慢启动的hystatr优化
ssthresh的快速穿越问题
AIMD的公平性收敛:降窗比率和RTT,两个因素会主要影响两个共享链路的tcp的带宽。
三、bic算法、Cubic算法
BIC和CUBIC的慢启动、快速重传恢复阶段与Reno相同。不同在于拥塞避免阶段。Reno是线性的(每个rtt增加1),bic是二分,cubic是三次函数
3.1bic算法
二分查找的思想
https://www.likecs.com/show-305496303.html
稳定拥塞避免阶段(Steady State)和空闲资源探测阶段(Max Probing)
3.2Cubic算法
锯齿状?
其窗口增长仅取决于两个连续拥塞事件之间的时间。窗口增长与RTT无关。
四、vegas算法
时延增加:说明路由器交换机开始排队了,此时降窗,保证了公平性
时延降低:说明路由器交换机的排队正在缓解,可以适当增窗,保证带宽满负荷
出现丢包:重传丢包,不调整窗口,因为算法过程完全接管窗口调整,丢包与窗口无关
会监控 RTT
会尝试增加发送速率来探测链路带宽
如果丢包或者 RTT 增⼤就降低发送速率
缺点:
CWND 增⻓是线性的,不能很好利⽤⽹络传输速率
不能跟基于丢包的算法共存
五、Bbr算法
QUIC也使用了BBR作为拥塞控制算法。
因为最优带宽和延迟无法同时测量(btlBw的测量会造成存在网络缓存增加RTT,而RTprop的测量要求网络缓存为空),所以分别估计带宽(btlBw)和延迟(RTprop),最后计算出cwnd。同时增加变量pacing rate(btlBw * 增益系数),用于控制发送端的发送速率,以解决发送端突发造成的网络排队问题。
四个状态:
Startup:类似于慢启动,发送大量包
Drain
ProbeBW:探测带宽
ProbeRTT:探测延迟
补充:inflight是指在途数据包数目,即发送方暂时未确认的
了解更多,请查看新的博客: