实时通讯中拥塞控制算法

拥塞控制算法分类

  • 基于丢包(loss rate)的拥塞控制算法
    例如TCP中早期的拥塞控制算法Reno, 会带来较高的时延

  • 基于双向时延(rtt)的拥塞控制算法
    TCP中较新的cubic, 还有BBR算法基于瓶颈带宽和rtt, 考量的是双向时延, 带宽利用率不够高,且对时延的控制不够精确。

  • 基于单向时延(one way delay)的拥塞控制算法
    典型的是webrtc中的GCC算法, 是目前实时通讯场景的一个较优选择。

实时通讯领域的拥塞控制

实时通讯的需求不断增长, 低延时的拥塞控制就显得由为重要。这样就有一个组织叫RMCAT专门来负责制定用于实时通讯的拥塞控制的标准。
目前RMCAT下共有三个大的拥塞算法:GCC, SCReAM, NADA。这三个算法由三个不同公司开发,各有优劣。
GCC有两个版本的算法:REMB-GCC , TFB-GCC, 原理几乎是一样的。

三大标准算法对比

从学术界给出评测数据表明: GCC的公平性更好,能较好的对抗丢包链路,但收敛的较慢,较长时间达到稳定带宽; SCReAM时延更小,但带宽利用较低,吞吐量小一些; NADA的公平性差一些,收敛较快。

GCC: 基于单向时延(one way delay)的变化来预测数据包在网络队列中的排队情况, 进而调节发送带宽。 原理见下一节。
SCReAM: 基于单向队列时延(one way queue delay)的变化在预测数据包在网络队列中的排队情况, 进而调节拥塞窗口。算法如下:


scream.png

NADA: 基于单向时延(one way delay)的变化和丢包时延补偿来预测数据包在网络队列中的排队情况, 进而调节发送带宽。原理如下:


nada.png

xn(ti) = ˜d(ti) (即one way delay) + Dloss (丢包预计时延) · ploss(ti) (丢包率)

REMB-GCC vs TFB-GCC

REMB-GCC : 拥塞判断基于数据包的时延变化, 收端做拥塞估计,通过REMB报文反馈给发端做拥塞调节。 在webrtc的M55版本之前的版本支持。
TFB-GCC : 拥塞判断基于数据包的时延变化, 收端通过Transport Feedback反馈收包时间给发端,发端做拥塞估计和拥塞调节。在webrtc的M55版本之后支持。
TFB-GCC 在工程调试上较REMB-GCC方便,因为所有算法计算都在一端。在效果上,差别不太大。

TFB-GCC算法的原理

  1. 拥塞控制的流程如下:


    tcc-flow.png

同REMB-GCC的两个主要区别:

  • 反馈包文件不一样, 这里是Transport feedback,携带的收包时间等信息, 而REMB-GCC是REMB携带估算带宽等信息。
  • TrendlineFilter取代了卡尔曼滤波。
  1. 同REMB-GCC一样, 基于数据包的单向时延变化


    one_way_delay.png

delay(i) = (G(i).recvTime - G(i-1).recvTime) - (G(i).sendTiem - G(i-1).sendTime)

略有不同的是, 不是计算每个包P(i)的时延,而对包进行分组,每5s间隔内的包为一组, G(i).sendTime即第i组包的第一个包的发送时间, G(i-1).recvTime即这一组时间内最后收到的那个包的时间, 以sendTime分组。这样做主要为了减少发端的时延来来的干扰,发端pacer时间分片5ms,可近似认为5ms的数据是均匀。

可以简单这么理解:
delay(i) > 0 -- > overuse 网络拥塞了 ;
delay(i) < 0 --> underuse 网络变好了;
delay(i) == 0 -- > normal 网络较平稳;

Trendline Filter计算

  1. 将delay做累加和平滑:


    smoothDelay.png

smoothingCoef是个经验值, 在webrtc trendline_estimator.cc中取0.9。

另外还有一个相对接收时间recvTime = recvTime(i) - firstRecvTime;
接着将recvTime, accumulatedDelay和smoothedDelay保存到一个固定窗口大小的队列HistoryQueue中,

  1. 然后按以下公式计算线性斜率:


    slope.png

    为了限制slope不让它跑偏了,
    在HistoryQueue中取前80%的包中最小的accumlatedDelay(k), 以及这个包对应的recvTime(k),
    在HistoryQueue中取后80%的包中最大的accumlatedDelay(m), 以及这个包对应的recvTime(k)


    slopemax.png

slope不能大于slope(max)。

当链路排列列队减少时,slope的值也会减少, 因此slope值反映了网络带宽变化趋势。


trendline.png

slope值即GCC论文中的蓝色线m。
动态门限值threshold(线色线)的计算,同REMB-GCC:


threshold.png

当slope > threshold时, overuse
当slope < -threshold时, underuse
其他情况时, normal.

有了以上三种网络状态后,就可以对带宽进行调节:


stat_machine_gcc.png

简单来说就是: 如果是Decrease, 在接收带宽基础上倍数下降, 如果是Increase, 在上一时刻估计的带宽基础上递增, 其他情况则保持不变。 即AIMD算法。


AIMD.png

有了时延估算的带宽,收端带宽, 再加上丢包率,就可以综合评估出当前带宽了:


loss_bitrate.png
  1. TrendlineFilter: goog_cc/trendline_estimator.cc slope计算 -- UpdateTrendline方法, threshold计算: UpdateThreshold
  2. OveruseDetector: goog_cc/trendline_estimator.cc Detect方法
  3. AIMD : remote_bitrate_estimator/aimd_rate_control.cc
  4. Delay base estimator: goog_cc/delay_based_bwe.cc
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335