WEBRTC浅析(十)拥塞控制算法的演化历史
评价拥塞控制算法的三个标准:
-
充分利用网络带宽
-
将数据丢失和延迟降至最低
-
在所有连接中保持公平
这三个目标之间存在明确的权衡。尽管您想充分利用网络带宽,但您不想过冲,因为这会导致数据丢失。您可以不惜一切代价优先考虑公平性,但这可能会导致您未充分利用网络带宽。
一:TCP(1974)中的拥塞控制策略
基于丢包的带宽估计
拥塞窗口
TCP 的工作原理:慢启动和拥塞避免
-
慢启动:始时将拥塞窗口设置得非常小,并在每个 RTT 期间加倍
- 以丢包的形式出现
- 或者当拥塞窗口超过某个阈值。
- 到达一定的时间,比如20s(Reno 1990)。
-
拥塞避免
- 控制拥塞窗口的大小:
- 上探:在成功接收到 ACK 时增加
- 下调:在检测到数据包丢失时减小
- 控制拥塞窗口的大小:
TCP中的演化版本:
-
Reno 1990
- 慢启动:在前 20 秒的缓慢启动
- 拥塞控制:
- 上探:每此接收到数据的 ACK 后,适度的增加拥塞窗口。
- 下调:发现丢包,拥塞窗口大小减半
-
Cubic 1998
- 拥塞控制:差别在于拥塞上探过程中的差异
- 上探过程:
- 最初:急剧增加其拥塞窗口
- 然后:随着接近 W 逐渐减慢拥塞窗口的增长
- 如果拥塞窗口超过 W 而没有看到丢包:Cubic 会逐渐增加拥塞窗口的增长
- 下调:发现丢包,拥塞窗口大小减半
- 上探过程:
- 拥塞控制:差别在于拥塞上探过程中的差异
-
Vegas
- 把 RTT 加入到评判是否拥塞的标准中。
- 好处:可以更早的发现拥塞,开始下调 拥塞窗口。
- 坏处:在与其他tcp 策略(cubic)竞争中,经常处于弱势,难以获取带宽。
- 把 RTT 加入到评判是否拥塞的标准中。
二:基于UDP的拥塞控制策略
-
GCC,REMB (基于延迟和丢包的带宽估计策略)::后续补充
-
BBR(2019):基于模型的带宽估计
BBR 通过为瓶颈宽度的单个链接来对整个网络进行建模。它探测网络以推断瓶颈带宽,然后调整其发送速率以匹配该带宽。-
慢启动:
- 慢启动不断地增加带宽到带宽不再增长
- 或者发生丢包现象
- 或者达到最带宽最大值
-
拥塞控制:
-
计算 pace rate和cwnd
- bandwith:使用时间窗口内(默认10轮采样)最大BW
- gain : 带宽发送的增益
- 上探: gain = 1.25
- 排空:gain = 0.75
- 保持稳定:gain = 1
- pace rate = bandwith * gain
- rtt_min: 一段时间内的最小RTT
- 管道的最大容量(BDP): bdp= bandwith * rtt_min;
- 拥塞窗口(cwnd): cwnd其实描述了一条网络管道,因此cwnd其实就是这个管道的容量,也就是BDP。
cwnd = bdp * gain
-
按照pace rate发送数据,当发现 data in fly > cwnd时,认为管道已经被填满,就停止发送数据。
-
-
遇到的问题:
- Padding 占用带宽问题
- BBR 模型偏离现实太远时,BBR 会做出错误的判断(比如网络带宽足够时,判断当前带宽不足,会导致强行把信源码率压住)
-
3. PCC( PERFORMANCE-ORIENTED CONGESTION CONTROL)
http://pccproject.net/
基于性能导向拥塞控制(无模型方法)
-
在线速率选择算法:U = X – pD X – pL X
- U 是性能分数
- X 是发送速率
- pD 表示为包延迟的惩罚
- pL 表示为丢包的惩罚
-
PCC的模式:
- 慢启动模式:
- 每个 RTT 中加倍速率。这一直持续到效用分数停止上升
- 拥塞控制:
- 首先:PCC 可以以略高于 r 的2% 的速率发送并检查派生的效用值,
- 然后:以略低于 r 的 2% 的速率发送,并再次检查派生的效用。
- 最终:在评估以更高和更低的速率发送如何影响性能(即效用值)之后,PCC 可以切换到更低或更高的速率,这取决于哪个产生了最高的性能分数。
- 慢启动模式: