實(shí)時(shí)通訊中擁塞控制算法

擁塞控制算法分類

  • 基于丟包(loss rate)的擁塞控制算法
    例如TCP中早期的擁塞控制算法Reno, 會(huì)帶來較高的時(shí)延

  • 基于雙向時(shí)延(rtt)的擁塞控制算法
    TCP中較新的cubic, 還有BBR算法基于瓶頸帶寬和rtt, 考量的是雙向時(shí)延硅则, 帶寬利用率不夠高,且對時(shí)延的控制不夠精確翩剪。

  • 基于單向時(shí)延(one way delay)的擁塞控制算法
    典型的是webrtc中的GCC算法腕柜, 是目前實(shí)時(shí)通訊場景的一個(gè)較優(yōu)選擇膀篮。

實(shí)時(shí)通訊領(lǐng)域的擁塞控制

實(shí)時(shí)通訊的需求不斷增長毯焕, 低延時(shí)的擁塞控制就顯得由為重要衍腥。這樣就有一個(gè)組織叫RMCAT專門來負(fù)責(zé)制定用于實(shí)時(shí)通訊的擁塞控制的標(biāo)準(zhǔn)。
目前RMCAT下共有三個(gè)大的擁塞算法:GCC, SCReAM, NADA纳猫。這三個(gè)算法由三個(gè)不同公司開發(fā)婆咸,各有優(yōu)劣。
GCC有兩個(gè)版本的算法:REMB-GCC , TFB-GCC芜辕, 原理幾乎是一樣的尚骄。

三大標(biāo)準(zhǔn)算法對比

從學(xué)術(shù)界給出評測數(shù)據(jù)表明: GCC的公平性更好,能較好的對抗丟包鏈路侵续,但收斂的較慢乖仇,較長時(shí)間達(dá)到穩(wěn)定帶寬; SCReAM時(shí)延更小询兴,但帶寬利用較低,吞吐量小一些起趾; NADA的公平性差一些诗舰,收斂較快。

GCC: 基于單向時(shí)延(one way delay)的變化來預(yù)測數(shù)據(jù)包在網(wǎng)絡(luò)隊(duì)列中的排隊(duì)情況, 進(jìn)而調(diào)節(jié)發(fā)送帶寬训裆。 原理見下一節(jié)眶根。
SCReAM: 基于單向隊(duì)列時(shí)延(one way queue delay)的變化在預(yù)測數(shù)據(jù)包在網(wǎng)絡(luò)隊(duì)列中的排隊(duì)情況, 進(jìn)而調(diào)節(jié)擁塞窗口边琉。算法如下:


scream.png

NADA: 基于單向時(shí)延(one way delay)的變化和丟包時(shí)延補(bǔ)償來預(yù)測數(shù)據(jù)包在網(wǎng)絡(luò)隊(duì)列中的排隊(duì)情況属百, 進(jìn)而調(diào)節(jié)發(fā)送帶寬。原理如下:


nada.png

xn(ti) = ?d(ti) (即one way delay) + Dloss (丟包預(yù)計(jì)時(shí)延) · ploss(ti) (丟包率)

REMB-GCC vs TFB-GCC

REMB-GCC : 擁塞判斷基于數(shù)據(jù)包的時(shí)延變化变姨, 收端做擁塞估計(jì)族扰,通過REMB報(bào)文反饋給發(fā)端做擁塞調(diào)節(jié)。 在webrtc的M55版本之前的版本支持定欧。
TFB-GCC : 擁塞判斷基于數(shù)據(jù)包的時(shí)延變化渔呵, 收端通過Transport Feedback反饋收包時(shí)間給發(fā)端,發(fā)端做擁塞估計(jì)和擁塞調(diào)節(jié)砍鸠。在webrtc的M55版本之后支持扩氢。
TFB-GCC 在工程調(diào)試上較REMB-GCC方便,因?yàn)樗兴惴ㄓ?jì)算都在一端爷辱。在效果上录豺,差別不太大朦肘。

TFB-GCC算法的原理

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


    tcc-flow.png

同REMB-GCC的兩個(gè)主要區(qū)別:

  • 反饋包文件不一樣, 這里是Transport feedback,攜帶的收包時(shí)間等信息双饥, 而REMB-GCC是REMB攜帶估算帶寬等信息媒抠。
  • TrendlineFilter取代了卡爾曼濾波。
  1. 同REMB-GCC一樣兢哭, 基于數(shù)據(jù)包的單向時(shí)延變化


    one_way_delay.png

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

略有不同的是领舰, 不是計(jì)算每個(gè)包P(i)的時(shí)延,而對包進(jìn)行分組迟螺,每5s間隔內(nèi)的包為一組冲秽, G(i).sendTime即第i組包的第一個(gè)包的發(fā)送時(shí)間, G(i-1).recvTime即這一組時(shí)間內(nèi)最后收到的那個(gè)包的時(shí)間矩父, 以sendTime分組锉桑。這樣做主要為了減少發(fā)端的時(shí)延來來的干擾,發(fā)端pacer時(shí)間分片5ms窍株,可近似認(rèn)為5ms的數(shù)據(jù)是均勻民轴。

可以簡單這么理解:
delay(i) > 0 -- > overuse 網(wǎng)絡(luò)擁塞了 ;
delay(i) < 0 --> underuse 網(wǎng)絡(luò)變好了球订;
delay(i) == 0 -- > normal 網(wǎng)絡(luò)較平穩(wěn)后裸;

Trendline Filter計(jì)算

  1. 將delay做累加和平滑:


    smoothDelay.png

smoothingCoef是個(gè)經(jīng)驗(yàn)值, 在webrtc trendline_estimator.cc中取0.9冒滩。

另外還有一個(gè)相對接收時(shí)間recvTime = recvTime(i) - firstRecvTime;
接著將recvTime, accumulatedDelay和smoothedDelay保存到一個(gè)固定窗口大小的隊(duì)列HistoryQueue中微驶,

  1. 然后按以下公式計(jì)算線性斜率:


    slope.png

    為了限制slope不讓它跑偏了,
    在HistoryQueue中取前80%的包中最小的accumlatedDelay(k), 以及這個(gè)包對應(yīng)的recvTime(k),
    在HistoryQueue中取后80%的包中最大的accumlatedDelay(m), 以及這個(gè)包對應(yīng)的recvTime(k)


    slopemax.png

slope不能大于slope(max)开睡。

當(dāng)鏈路排列列隊(duì)減少時(shí)因苹,slope的值也會(huì)減少, 因此slope值反映了網(wǎng)絡(luò)帶寬變化趨勢篇恒。


trendline.png

slope值即GCC論文中的藍(lán)色線m扶檐。
動(dòng)態(tài)門限值threshold(線色線)的計(jì)算,同REMB-GCC:


threshold.png

當(dāng)slope > threshold時(shí)胁艰, overuse
當(dāng)slope < -threshold時(shí)款筑, underuse
其他情況時(shí), normal.

有了以上三種網(wǎng)絡(luò)狀態(tài)后腾么,就可以對帶寬進(jìn)行調(diào)節(jié):


stat_machine_gcc.png

簡單來說就是: 如果是Decrease, 在接收帶寬基礎(chǔ)上倍數(shù)下降醋虏, 如果是Increase, 在上一時(shí)刻估計(jì)的帶寬基礎(chǔ)上遞增, 其他情況則保持不變哮翘。 即AIMD算法颈嚼。


AIMD.png

有了時(shí)延估算的帶寬,收端帶寬饭寺, 再加上丟包率阻课,就可以綜合評估出當(dāng)前帶寬了:


loss_bitrate.png
  1. TrendlineFilter: goog_cc/trendline_estimator.cc slope計(jì)算 -- UpdateTrendline方法叫挟, threshold計(jì)算: 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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市限煞,隨后出現(xiàn)的幾起案子抹恳,更是在濱河造成了極大的恐慌,老刑警劉巖署驻,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奋献,死亡現(xiàn)場離奇詭異,居然都是意外死亡旺上,警方通過查閱死者的電腦和手機(jī)瓶蚂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宣吱,“玉大人窃这,你說我怎么就攤上這事≌骱颍” “怎么了杭攻?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長疤坝。 經(jīng)常有香客問我兆解,道長,這世上最難降的妖魔是什么跑揉? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任痪宰,我火速辦了婚禮,結(jié)果婚禮上畔裕,老公的妹妹穿的比我還像新娘。我一直安慰自己乖订,他們只是感情好扮饶,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著乍构,像睡著了一般甜无。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上哥遮,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天岂丘,我揣著相機(jī)與錄音,去河邊找鬼眠饮。 笑死奥帘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的仪召。 我是一名探鬼主播寨蹋,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼松蒜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了已旧?” 一聲冷哼從身側(cè)響起秸苗,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤惊楼,失蹤者是張志新(化名)和其女友劉穎檀咙,沒想到半個(gè)月后攀芯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侣诺,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡氧秘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了搔确。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灭忠。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡涕蜂,死狀恐怖机隙,靈堂內(nèi)的尸體忽然破棺而出有鹿,到底是詐尸還是另有隱情谎脯,我是刑警寧澤柄冲,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布撬讽,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜顶吮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧搞莺,春花似錦、人聲如沸绍刮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至坤学,卻和暖如春压怠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背飞苇。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工菌瘫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人布卡。 一個(gè)月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓雨让,卻偏偏與公主長得像,于是被迫代替她去往敵國和親忿等。 傳聞我的和親對象是個(gè)殘疾皇子栖忠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345