實時通訊中擁塞控制算法

擁塞控制算法分類

  • 基于丟包(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閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380