精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

全局250毫秒延遲的實(shí)時(shí)1V1答疑 RUDP傳輸?shù)膬?yōu)化實(shí)踐

原創(chuàng)
網(wǎng)絡(luò) 網(wǎng)絡(luò)管理
在UDP之上做一層可靠,很多朋友認(rèn)為這是很不靠譜的事情,也有朋友認(rèn)為這是一個(gè)大殺器,可以解決實(shí)時(shí)領(lǐng)域里大部分問題。作為在教育公司來說,學(xué)霸君在很多實(shí)時(shí)場景下確實(shí)使用RUDP技術(shù)來解決我們的問題,不同場景我們采用的RUDP方式也不一樣。

最近和很多實(shí)時(shí)音視頻領(lǐng)域的朋友交流中都有談?wù)摰絉UDP(Reliable UDP),這其實(shí)是個(gè)老生常談的問題,RUDP在很多著名的項(xiàng)目上都有使用,例如google的QUIC和webRTC。在UDP之上做一層可靠,很多朋友認(rèn)為這是很不靠譜的事情,也有朋友認(rèn)為這是一個(gè)大殺器,可以解決實(shí)時(shí)領(lǐng)域里大部分問題。作為在教育公司來說,學(xué)霸君在很多實(shí)時(shí)場景下確實(shí)使用RUDP技術(shù)來解決我們的問題,不同場景我們采用的RUDP方式也不一樣。先來看看學(xué)霸君哪些場景使用了RUDP:

  1. 全局250毫秒延遲的實(shí)時(shí)1V1答疑,采用的是RUDP + 多點(diǎn)relay智能路由方案。
  2. 500毫秒1080P視頻連麥互動系統(tǒng),采用的是RUDP + PROXY調(diào)度傳輸方案。
  3. 6方實(shí)時(shí)同步書寫系統(tǒng),采用的是RUDP+redo log的可靠傳輸技術(shù)。
  4. 弱網(wǎng)WIFI下Pad的720P同屏傳輸系統(tǒng),采用的是RUDP +GCC實(shí)時(shí)流控技術(shù)。
  5. 大型直播的P2P分發(fā)系統(tǒng),通過RUDP + 多點(diǎn)并聯(lián)relay技術(shù)節(jié)省了75%以上的分發(fā)帶寬。

涉及到實(shí)時(shí)傳輸我們都會先考慮RUDP,RUDP應(yīng)用在學(xué)霸君核心傳輸體系的各個(gè)方面,但不同的系統(tǒng)場景我們設(shè)計(jì)了不同的RUDP方式,所以基于那些激烈的討論和我們使用的經(jīng)驗(yàn)我扒一扒RUDP。其實(shí)在實(shí)時(shí)通信領(lǐng)域存在一個(gè)三角平衡關(guān)系:成本,質(zhì)量,時(shí)延三者的制約關(guān)系(圖1)

blob.png

圖1

也就是說投入的成本、獲得的質(zhì)量和通信的時(shí)延之間是一個(gè)三角制約(LEQ)關(guān)系,所以實(shí)時(shí)通信系統(tǒng)的設(shè)計(jì)者會在這三個(gè)制約條件下找到一個(gè)平衡點(diǎn),TCP屬于是通過增大延遲和傳輸成本來保證質(zhì)量的通信方式,UDP是通過犧牲質(zhì)量來保證時(shí)延和成本的通信方式,所以在一些特定場景下RUDP更容易找到這樣的平衡點(diǎn)。RUDP是怎么去找這個(gè)平衡點(diǎn)的,就要先從RUDP的可靠概念和使用場景來分析。

可靠的概念

在實(shí)時(shí)通信過程中,不同的需求場景對可靠的需求是不一樣的,我們在這里總體歸納為三類定義:

  • 盡力可靠:通信的接收方要求發(fā)送方的數(shù)據(jù)盡量完整到達(dá),但業(yè)務(wù)本身的數(shù)據(jù)是可以允許缺失的。例如:音視頻數(shù)據(jù)、冪等性狀態(tài)數(shù)據(jù)。

  • 無序可靠:通信的接收方要求發(fā)送方的數(shù)據(jù)必須完整到達(dá),但可以不管到達(dá)先后順序。例如:文件傳輸、白板書寫、圖形實(shí)時(shí)繪制數(shù)據(jù)、日志型追加數(shù)據(jù)等。

  • 有序可靠:通信接收方要求發(fā)送方的數(shù)據(jù)必須按順序完整到達(dá)。

RUDP是根據(jù)這三類需求和圖1的三角制約關(guān)系來確定自己的通信模型和機(jī)制的,也就是找通信的平衡點(diǎn)。 

UDP為什么要可靠

說到這里可能很多人會說:干嘛那么麻煩,直接用TCP好了!確實(shí)很多人也都是這樣做的,TCP是個(gè)基于公平性的可靠通信協(xié)議,在一些苛刻的網(wǎng)絡(luò)條件下TCP要么不能提供正常的通信質(zhì)量保證,要么成本過高。為什么要在UDP之上做可靠保證,究其原因就是在保證通信的時(shí)延和質(zhì)量的條件下盡量降低成本,RUDP主要解決以下相關(guān)問題:

  • 端對端連通性問題:一般終端直接和終端通信都會涉及到NAT穿越,TCP在NAT穿越實(shí)現(xiàn)非常困難,相對來說UDP穿越NAT卻簡單很多,如果是端到端的可靠通信一般用RUDP方式來解決,場景有:端到端的文件傳輸、音視頻傳輸、交互指令傳輸?shù)鹊取?/p>

  • 弱網(wǎng)環(huán)境傳輸問題:在一些WIFI或者3G/4G移動網(wǎng)下,需要做低延遲可靠通信,如果用TCP通信延遲可能會非常大,這會影響用戶體驗(yàn)。例如:實(shí)時(shí)的操作類網(wǎng)游通信、語音對話、多方白板書寫等,這些場景可以采用特殊的RUDP方式來解決這類問題。

  • 帶寬競爭問題:有時(shí)候客戶端數(shù)據(jù)上傳需要突破本身TCP公平性的限制來達(dá)到高速低延時(shí)和穩(wěn)定,也就是說要用特殊的流控算法來壓榨客戶端上傳帶寬,例如:直播音視頻推流,這類場景用RUDP來實(shí)現(xiàn)不僅能壓榨帶寬,也能更好的增加通信的穩(wěn)定性,避免類似TCP的頻繁斷開重連。

  • 傳輸路徑優(yōu)化問題:在一些對延時(shí)要求很高的場景下,會用應(yīng)用層relay的方式來做傳輸路由優(yōu)化,也就是動態(tài)智能選路,這時(shí)雙方采用RUDP方式來傳輸,中間的延遲進(jìn)行relay選路優(yōu)化延時(shí)。還有一類基于傳輸吞吐量的場景,例如:服務(wù)與服務(wù)之間數(shù)據(jù)分發(fā)、數(shù)據(jù)備份等,這類場景一般會采用多點(diǎn)并聯(lián)relay來提高傳輸?shù)乃俣龋彩且⒃赗UDP上的(這兩點(diǎn)在后面著重來描述)。

  • 資源優(yōu)化問題:某些場景為了避免TCP的三次握手和四次揮手的過程,會采用RUDP來優(yōu)化資源的占用率和響應(yīng)時(shí)間,提高系統(tǒng)的并發(fā)能,例如:QUIC.

不管哪類場景,都是要保證可靠性,也就是質(zhì)量,那么在UDP之上怎么實(shí)現(xiàn)可靠呢?答案就是重傳。

重傳模式

IP協(xié)議在設(shè)計(jì)的時(shí)候就不是為了數(shù)據(jù)可靠到達(dá)而設(shè)計(jì)的,所以UDP要保證可靠,就依賴于重傳,這也就是我們通常意義上的RUDP行為,在描述RUDP重傳之前先來了解下RUDP基本框架,如圖:

blob.png

 圖2

RUDP在分為發(fā)送端和接收端,每一種RUDP在設(shè)計(jì)的時(shí)候會做不一樣的選擇和精簡,概括起來就是圖中的單元。RUDP的重傳是發(fā)送端通過接收端ACK的丟包信息反饋來進(jìn)行數(shù)據(jù)重傳,發(fā)送端會根據(jù)場景來設(shè)計(jì)自己的重傳方式,重傳方式分為三類:定時(shí)重傳,請求重傳和FEC選擇重傳。

定時(shí)重傳

定時(shí)重傳很好理解,就是發(fā)送端如果在發(fā)出數(shù)據(jù)包(T1)時(shí)刻一個(gè)RTO之后還未收到這個(gè)數(shù)據(jù)包的ACK消息,那么發(fā)送就重傳這個(gè)數(shù)據(jù)包。這種方式依賴于接收端的ACK和RTO,容易產(chǎn)生誤判,主要有兩種情況:

對方收到了數(shù)據(jù)包,但是ACK發(fā)送途中丟失。

ACK在途中,但是發(fā)送端的時(shí)間已經(jīng)超過了一個(gè)RTO。

所以超時(shí)重傳的方式主要集中在RTO的計(jì)算上,如果你的場景是一個(gè)對延遲敏感但對流量成本要求不高的場景,就可以將RTO的計(jì)算設(shè)計(jì)比較小,這樣能盡***可能保證你的延時(shí)足夠小。例如:實(shí)時(shí)操作類網(wǎng)游、教育領(lǐng)域的書寫同步,是典型的用expense換latency和Quality的場景,適合用于小帶寬低延遲傳輸。如果是大帶寬實(shí)時(shí)傳輸,定時(shí)重傳對帶寬的消耗是很大的,極端情況會用20%的重復(fù)重傳率,所以在大帶寬模式下一般會采用請求重傳模式。

請求重傳

請求重傳就是接收端在發(fā)送ACK的時(shí)候攜帶自己丟失報(bào)文的信息反饋,發(fā)送端接收到ACK信息時(shí)根據(jù)丟包反饋進(jìn)行報(bào)文重傳。如下圖:

blob.png 

圖3

這個(gè)反饋過程最關(guān)鍵的步驟就是回送ACK的時(shí)候應(yīng)該攜帶哪些丟失報(bào)文的信息,因?yàn)閁DP在網(wǎng)絡(luò)傳輸過程中會亂序會抖動,接收端在通信的過程中要評估網(wǎng)絡(luò)的jitter time,也就是rtt_var(RTT方差值),當(dāng)發(fā)現(xiàn)丟包的時(shí)候記錄一個(gè)時(shí)刻t1,當(dāng)t1 + rtt_var < curr_t(當(dāng)前時(shí)刻),我們就認(rèn)為它丟失了,這個(gè)時(shí)候后續(xù)的ACK就需要攜帶這個(gè)丟包信息并更新丟包時(shí)刻t2,后續(xù)持續(xù)掃描丟包隊(duì)列,如果他t2 + RTO <curr_t,再次在ACK攜帶這個(gè)丟包信息,以此類推,直到收到報(bào)文為止。這種方式是由丟包請求引起的重發(fā),如果網(wǎng)絡(luò)很不好,接收端會不斷發(fā)起重傳請求,造成發(fā)送端不停的重傳,引起網(wǎng)絡(luò)風(fēng)暴,通信質(zhì)量會下降,所以我們在發(fā)送端設(shè)計(jì)一個(gè)擁塞控制模塊來限流,這個(gè)后面我們重點(diǎn)分析。除了網(wǎng)絡(luò)風(fēng)暴以外,整個(gè)請求重傳機(jī)制也依賴于jitter time和RTO這個(gè)兩個(gè)時(shí)間參數(shù),評估和調(diào)整這兩個(gè)參數(shù)和對應(yīng)的傳輸場景也息息相關(guān)。請求重傳這種方式比定時(shí)重傳方式的延遲會大,一般適合于帶寬較大的傳輸場景,例如:視頻、文件傳輸、數(shù)據(jù)同步等。

FEC選擇重傳

除了定時(shí)重傳和請求重傳模式以外,還有一種方式就是以FEC分組方式選擇重傳,F(xiàn)EC(Forward Error Correction)是一種前向糾錯(cuò)技術(shù),一般是通過XOR類似的算法來實(shí)現(xiàn),也有多層的EC算法和raptor涌泉碼技術(shù),其實(shí)是一個(gè)解方程的過程。應(yīng)用到RUDP上示意圖如下:

blob.png

 圖4

在發(fā)送方發(fā)送報(bào)文的時(shí)候,會根據(jù)FEC方式把幾個(gè)報(bào)文進(jìn)行FEC分組,通過XOR的方式得到若干個(gè)冗余包,然后一起發(fā)往接收端,如果接收端發(fā)現(xiàn)丟包但能通過FEC分組算法還原,就不向發(fā)送端請求重傳,如果分組內(nèi)包是不能進(jìn)行FEC恢復(fù)的,就請求想發(fā)送端請求原始的數(shù)據(jù)包。FEC分組方式適合解決要求延時(shí)敏感且隨機(jī)丟包的傳輸場景,在一個(gè)帶寬不是很充裕的傳輸條件下,F(xiàn)EC會增加多余的冗余包,可能會使得網(wǎng)絡(luò)更加不好。FEC方式不僅可以配合請求重傳模式,也可以配合定時(shí)重傳模式。

RTT與RTO的計(jì)算

在上面介紹重傳模式時(shí)多次提到RTT、RTO等時(shí)間度量闡述,RTT(Round Trip Time)即網(wǎng)絡(luò)環(huán)路延時(shí),環(huán)路延遲是通過發(fā)送的數(shù)據(jù)包和接收到的ACK包計(jì)算了,示意圖如下:

blob.png

 圖5

RTT = T2 - T1,這個(gè)計(jì)算方式只是計(jì)算了某一個(gè)報(bào)文時(shí)刻的RTT,但網(wǎng)絡(luò)是會波動的,這難免會有噪聲現(xiàn)象,所以在計(jì)算的過程中引入了加權(quán)平均收斂的方法(具體可以參考RFC793)。

SRTT = (α * SRTT) + (1-α)RTT,這樣可以求得新逼近的SRTT,在公式總一般α=0.8,確定了SRTT,下一步就是計(jì)算RTT_VAR(方差),我們設(shè)RTT_VAR = |SRTT – RTT|

那么SRTT_VAR =(α * SRTT_VAR) + (1-α) RTT_VAR,這樣可以得到RTT_VAR的值,但最終我們是需要去頂RTO,因?yàn)樯婕暗綀?bào)文重傳,RTO就是一個(gè)報(bào)文的重傳周期,從網(wǎng)絡(luò)的通信流程我們很容易知道,重傳一個(gè)包以后,如果一個(gè)RTT+RTT_VAR之后的時(shí)間還沒收到確定,那我們就可以再次重傳,則可知:

RTO = SRTT + SRTT_VAR

但一般網(wǎng)絡(luò)在嚴(yán)重抖動的情況下還是會有較大的重復(fù)率問題,所以:

RTO = β*(SRTT + RTT_VAR)

1.2 <β<2.0,可以根據(jù)不同的傳輸場景來選擇β的值。

RUDP是通過重傳來保證可靠的,重傳在三角平衡關(guān)系中其實(shí)是用Expense和latency來換取Quality的行為,所以重傳會引來兩個(gè)問題,一個(gè)是延時(shí),一個(gè)是重傳的帶寬,尤其是后者,如果控制不好會引來網(wǎng)絡(luò)風(fēng)暴,所以在發(fā)送端會設(shè)計(jì)一個(gè)窗口擁塞機(jī)制了避免并發(fā)帶寬占用過高的問題。

窗口與擁塞控制

  • 窗口

RUDP需要一個(gè)收發(fā)的滑動窗口系統(tǒng)來配合對應(yīng)的擁塞算法來做流量控制,有些RUDP需要嚴(yán)格的發(fā)送端和接收端的窗口對應(yīng),有些RUDP是不要收發(fā)窗口嚴(yán)格對應(yīng)。如果涉及到可靠有序的RUDP,接收端就要做窗口就要做排序和緩沖,如果是無序可靠或者盡力可靠的場景,接收端一般就不做窗口緩沖,只做位置滑動。先來看收發(fā)窗口關(guān)系圖:

blob.png

 圖6

上圖描述的是發(fā)送端從發(fā)送窗口中發(fā)了6個(gè)數(shù)據(jù)報(bào)文給接收端,接收端收到101,102,103,106時(shí)會先判斷報(bào)文的連續(xù)性并滑動窗口開始位置到103,,然后每個(gè)包都回應(yīng)ACK,發(fā)送端在接收到ACK的時(shí)候,會確認(rèn)報(bào)文的連續(xù)性,并滑動窗口到103,發(fā)送端會再判斷窗口的空余,然后填補(bǔ)新的發(fā)送數(shù)據(jù),這就是整個(gè)窗口滑動的流程。這里值的一提的是在接收端收到106時(shí)的處理,如果是有序可靠,那么106不會通知上層業(yè)務(wù)進(jìn)行處理,而是等待104,105。如果是盡力可靠和無序可靠場景,會將106通知給上層業(yè)務(wù)先進(jìn)行處理。在收到ACK后,發(fā)送端的窗口要滑動多少是由自己的擁塞機(jī)制定的,也就是說窗口的滑動速度受擁塞機(jī)制控制,擁塞控制實(shí)現(xiàn)要么基于丟包率來實(shí)現(xiàn),要么基于雙方的通信時(shí)延來實(shí)現(xiàn),下面來看幾種典型的擁塞控制。

  • 經(jīng)典擁塞算法

TCP經(jīng)典擁塞算法分為四個(gè)部分:慢啟動、擁塞避免、擁塞處理和快速恢復(fù),這四個(gè)部分都是為了決定發(fā)送窗和發(fā)送速度而設(shè)計(jì)的,其實(shí)就是為了在當(dāng)前網(wǎng)絡(luò)條件下通過網(wǎng)絡(luò)丟包來判斷網(wǎng)絡(luò)擁塞狀態(tài),從而確定比較適合的發(fā)送傳輸窗口。經(jīng)典算法是建立在定時(shí)重傳的基礎(chǔ)上的,如果RUDP采用這種算法來做擁塞控制,一般的場景是為了保證有序可靠傳輸?shù)耐瑫r(shí)又兼顧網(wǎng)絡(luò)傳輸?shù)墓叫栽瓌t。先逐個(gè)來解釋下這幾部分

  • 慢啟動(slow start)

當(dāng)連接鏈路剛剛建立后,不可能一開始將cwnd設(shè)置的很大,這樣容易造成大量重傳,經(jīng)典擁塞里面會在開始將cwnd = 1,讓后根據(jù)通信過程的丟包來逐步擴(kuò)大cwnd來適應(yīng)當(dāng)前的網(wǎng)絡(luò)狀態(tài),直到達(dá)到慢啟動的門限閾值(ssthresh),步驟如下:

1) 初始化設(shè)置cwnd = 1,并開始傳輸數(shù)據(jù)

2) 收到回饋的ACK,會將cwnd 加1

3) 當(dāng)一個(gè)發(fā)送端一個(gè)RTT后且未發(fā)現(xiàn)有丟包重傳,就會將cwnd = cwnd * 2.

4) 當(dāng)cwnd >= ssthresh或發(fā)生丟包重傳時(shí)慢啟動結(jié)束,進(jìn)入擁塞避免狀態(tài)。

  • 擁塞避免

當(dāng)通信連接結(jié)束慢啟動后,有可能還未到網(wǎng)絡(luò)傳輸速度的上線,這個(gè)時(shí)候需要進(jìn)一步通過一個(gè)緩慢的調(diào)節(jié)過程來進(jìn)行適配。一般是一個(gè)RTT后如果未發(fā)現(xiàn)丟包,就是將cwnd = cwnd + 1。一但發(fā)現(xiàn)丟包和超時(shí)重傳,就進(jìn)入擁塞處理狀態(tài)。

  • 擁塞處理

擁塞處理在TCP里面實(shí)現(xiàn)很暴力,如果發(fā)生丟包重傳,直接將cwnd = cwnd / 2,然后進(jìn)入快速恢復(fù)狀態(tài)。

  • 快速恢復(fù)

快速恢復(fù)是通過確認(rèn)丟包只發(fā)生在窗口一個(gè)位置的包上來確定是否進(jìn)行快速恢復(fù),如圖6中描述,如果只是104發(fā)生了丟失,而105,106是收到了的,那么ACK總是會將ack的base = 103,如果連續(xù)3次收到base為103的ACK,就進(jìn)行快速恢復(fù),也就是將并立即重傳104,而后如果收到新的ACK且base > 103,

將cwnd = cwnd + 1,并進(jìn)入擁塞避免狀態(tài)。

經(jīng)典擁塞控制是基于丟包檢測和定時(shí)重傳模式來設(shè)計(jì)的,在三角平衡關(guān)系中是一個(gè)典型的以Latency換取Quality的案例,但由于其公平性設(shè)計(jì)避免了過高的Expense,也就會讓這種傳輸方式很難壓榨網(wǎng)絡(luò)帶寬,很難保證網(wǎng)絡(luò)的大吞吐量和小時(shí)延。

  • BRR擁塞算法

對于經(jīng)典擁塞算法的延遲和帶寬壓榨問題google設(shè)計(jì)了基于發(fā)送端延遲和帶寬評估的BBR擁塞控制算法。這種擁塞算法致力于解決兩個(gè)問題:

  1. 在一定丟包率網(wǎng)絡(luò)傳輸鏈路上充分利用帶寬
  2. 降低網(wǎng)絡(luò)傳輸中的buffer延遲

BBR的主要策略是就是周期性通過ACK和NACK返回來評估鏈路的min_rtt和max_bandwidth。***吞吐量(cwnd)的大小就是:

  1. cwnd = max_bandwidth / min_rtt 

傳輸模型如下:

blob.png

 圖7

BBR整個(gè)擁塞控制是一個(gè)探測帶寬和Pacing rate的狀態(tài),有是個(gè)狀態(tài):

Startup:啟動狀態(tài)(相當(dāng)于慢啟動),增益參數(shù)為max_gain  = 2.85

DRAIN:滿負(fù)荷傳輸狀態(tài)

PROBE_BW:帶寬評估狀態(tài),通過一個(gè)較小的BBR增益參數(shù)來遞增(1.25)或者遞減(0.75).

PROBE_RTT:延遲評估狀態(tài),通過維持一個(gè)最小發(fā)送窗口(4個(gè)MSS)進(jìn)行的RTT采樣。

那么這幾種狀態(tài)是怎么且來回切換的呢?以下是QUIC中BBR大致的步驟如下:

  1. 初始化連接時(shí)會將設(shè)置一個(gè)初始的cwnd = 8, 并將狀態(tài)設(shè)置Startup
  2. 在Startup下發(fā)送數(shù)據(jù),根據(jù)ACK數(shù)據(jù)的采樣周期性判斷是否可以增加帶寬,如果可以,將cwnd = cwnd *max_gain。如果時(shí)間周期數(shù)超過了預(yù)設(shè)的啟動周期時(shí)間或者發(fā)生了丟包,進(jìn)行DRAIN狀態(tài)
  3. 在DRAIN狀態(tài)下,如果flight_size(發(fā)送出去但還未確認(rèn)的數(shù)據(jù)大小) >cwnd,繼續(xù)保證DRAIN狀態(tài),如果flight_size<cwd,進(jìn)入PROBE_BW狀態(tài)
  4. 在PROBE_BW狀態(tài)下,如果未發(fā)生丟包且flight_size<cwnd * 1.25,將維持原來的cwnd,并進(jìn)入StartUp,如果發(fā)生丟包或者flight_size > cwnd,將cwnd = cwnd * 1.25,如果發(fā)生丟包,cwnd = cwnd * .075
  5. 在Startup/DRAIN/PROBE_BW三個(gè)狀態(tài)中,如果持續(xù)10秒鐘的通信中沒有出現(xiàn)RTT <= min_rtt,就會進(jìn)入到PROBE_RTT狀態(tài),并將cwnd = 4 *MSS
  6. 在PROBE_RTT狀態(tài),會在收到ACK返回的時(shí)候持續(xù)判斷flight_size >= cwnd并且無丟包,將本次統(tǒng)計(jì)的最小RTT作為min_rtt,進(jìn)入Startup狀態(tài)。

BBR是通過以上幾個(gè)步驟來周期性計(jì)算cwnd,也就是網(wǎng)絡(luò)***吞吐量和最小延遲,然后通過pacing rate來確定這一時(shí)刻發(fā)送端的碼率,最終達(dá)到擁塞控制的目的。BBR適合在隨機(jī)丟包且網(wǎng)絡(luò)穩(wěn)定的情況下做擁塞,如果在網(wǎng)絡(luò)信號極不穩(wěn)定的WIFI或者4G上,容易出現(xiàn)網(wǎng)絡(luò)泛洪和預(yù)測不準(zhǔn)的問題,BBR在多連接公平性上也存在小RTT的連接比大RTT的連接更吃帶寬的情況,容易造成大RTT的連接速度過慢的情況。BBR擁塞算法在三角平衡關(guān)系中是采用Expense換取latency和Quality的案例。

  • webRTC gcc

說到音視頻傳輸就必然會想到webRTC系統(tǒng),在webRTC中對于視頻傳輸也實(shí)現(xiàn)了一個(gè)擁塞控制算法(gcc),webRTC的gcc是一個(gè)基于發(fā)送端丟包率和接收端延遲帶寬統(tǒng)計(jì)的擁塞控制,而且是一個(gè)盡力可靠的傳輸算法,在傳輸?shù)倪^程中如果一個(gè)報(bào)文重發(fā)太多次后會直接丟棄,這符合視頻傳輸?shù)膱鼍埃栌?a >weizhenwei同學(xué)一張圖來看個(gè)究竟:

blob.png

 圖8

gcc的發(fā)送端會根據(jù)丟包率和一個(gè)對照表來pacing rate,當(dāng)loss < 2%時(shí),會加大傳輸帶寬,當(dāng)loss >=2% &&loss <10%,會保持當(dāng)前碼率,當(dāng)loss >=10%,會認(rèn)為傳輸過載,進(jìn)行調(diào)小傳輸帶寬.

gcc的接收端是根據(jù)數(shù)據(jù)到達(dá)的延遲方差和大小進(jìn)行KalmanFilter進(jìn)行帶寬逼近收斂,具體的細(xì)節(jié)不介紹了,請查看http://www.jianshu.com/p/bb34995c549a

這里值得一說的是gcc引入接收端對帶寬進(jìn)行KalmanFilter評估是一個(gè)非常新穎的擁塞控制思路,如果實(shí)現(xiàn)一個(gè)盡力可靠的RUDP傳輸系統(tǒng)不失為是一個(gè)很好的參考。但這種算法也有個(gè)缺陷,就是在網(wǎng)絡(luò)間歇性丟包情況下,gcc可能收斂的速度比較慢,在一定程度上有可能會造成REMB很難反饋給發(fā)送端,容易出現(xiàn)發(fā)送端流控失效。gcc在三角平衡關(guān)系算一個(gè)以Quality和Expense換取latency的案例。

  • 弱窗口擁塞機(jī)制

其實(shí)在很多場景是不用擁塞控制或者只要很弱的擁塞控制即可,例如:師生雙方書寫同步、實(shí)時(shí)游戲,因?yàn)楸旧淼膫鬏數(shù)臄?shù)據(jù)量不大,只要保證足夠小的延時(shí)和可靠性就行,一般會采用固定窗口大小來進(jìn)行流控,我們在系統(tǒng)中一般采用一個(gè)cwnd =32這樣的窗口來做流控,ACK確認(rèn)也是通過整個(gè)接收窗口數(shù)據(jù)狀態(tài)反饋給發(fā)送方,簡單直接,也很容易適應(yīng)弱網(wǎng)環(huán)境。

傳輸路徑

RUDP除了優(yōu)化連接、壓榨帶寬、適應(yīng)弱網(wǎng)環(huán)境等以外,它也繼承了UDP天然的動態(tài)性,可以在中間應(yīng)用層鏈路上做傳輸優(yōu)化,一般分為多點(diǎn)串聯(lián)優(yōu)化和多點(diǎn)并聯(lián)優(yōu)化。我們具體來說一說。

  • 多點(diǎn)串聯(lián)relay

在實(shí)時(shí)通信中一些對業(yè)務(wù)場景對延遲非常敏感,例如:實(shí)時(shí)語音、同步書寫、實(shí)時(shí)互動、直播連麥等,如果單純的服務(wù)中轉(zhuǎn)或者P2P通信,很難無法滿足其需求,尤其是在物理距離很大的情況下。在解決這個(gè)問題上SKYPE率先提出全球RTN(實(shí)時(shí)多點(diǎn)傳輸網(wǎng)絡(luò)),其實(shí)就是在通信雙方之間通過幾個(gè)relay節(jié)點(diǎn)來動態(tài)智能選路,這種傳輸方式很適合RUDP,我們只要在通信雙方構(gòu)建一個(gè)RUDP通道,中間鏈路只是一個(gè)無狀態(tài)的relay cache集合,relay與relay之間進(jìn)行路由探測和選路,以此來做到鏈路的高可用和實(shí)時(shí)性。如下圖:

blob.png

圖9

通過多點(diǎn)relay來保證rudp進(jìn)行傳輸優(yōu)化,這類場景在三角平衡關(guān)系里是典型的用expense來換取latency的案例。

  • 多點(diǎn)并聯(lián)relay

在服務(wù)與服務(wù)進(jìn)行媒體數(shù)據(jù)傳輸或者分發(fā)過程中,需要保證傳輸路徑高可用和提高帶寬并發(fā),這類使用場景也會使用傳輸雙方構(gòu)建一個(gè)RUDP通道,中間通過多relay節(jié)點(diǎn)的并聯(lián)來解決,如下圖所示:

blob.png

圖10

這種模型需要在發(fā)送端設(shè)計(jì)一個(gè)多點(diǎn)路由表探測機(jī)制,以此來判斷各個(gè)路徑同時(shí)發(fā)送數(shù)據(jù)的比例和可以用性,這個(gè)模型除了鏈路備份和增大傳輸并發(fā)帶寬外,還有個(gè)輔助的功能,如果是流媒體分發(fā)系統(tǒng),我們一般會用BGP來做中轉(zhuǎn),如果節(jié)點(diǎn)與節(jié)點(diǎn)之間可以直連,這樣還可以減少對BGP帶寬的占用,以此來減少成本問題。

后記

到這里RUDP的介紹也就結(jié)束了,說了些細(xì)節(jié)和場景相關(guān)的事,也算是個(gè)入門級的科普文章。RUDP的概念從提出到現(xiàn)在也差不多有20年了,很多從業(yè)人員這希望通過一套完善的方案來設(shè)計(jì)一個(gè)通用的RUDP,我個(gè)人覺得這不太可能,就算設(shè)計(jì)出來了,估計(jì)和現(xiàn)在TCP差不多,這樣做的意義不大。RUDP的價(jià)值在于根據(jù)不同的傳輸場景進(jìn)行不同的技術(shù)選型,可能選擇寬松的擁塞方式、也可能選擇特定的重傳模式,但不管怎么選,都是基于Expense(成本)、Latency(時(shí)延)、Quality(質(zhì)量)三者之間來權(quán)衡,通過結(jié)合場景和權(quán)衡三角平衡關(guān)系RUDP或許能幫助開發(fā)者找到一個(gè)比較好的方案。

【作者簡介】

袁榮喜,學(xué)霸君資深架構(gòu)師,16年的C程序員,Golang愛好者,好求甚解,善于構(gòu)建高性能服務(wù)系統(tǒng)和系統(tǒng)性能調(diào)優(yōu),喜好解決系統(tǒng)的疑難雜癥和debug技術(shù)。早年癡迷于P2P通信網(wǎng)絡(luò)、TCP/IP通信協(xié)議棧和鑒權(quán)加密技術(shù),曾基于P2P super node技術(shù)實(shí)現(xiàn)了視頻實(shí)時(shí)傳輸系統(tǒng)。2015年加入學(xué)霸君,負(fù)責(zé)構(gòu)建學(xué)霸君的智能路由實(shí)時(shí)音視頻傳輸系統(tǒng)和網(wǎng)絡(luò),解決音視頻通信的實(shí)時(shí)性的問題。專注于存儲系統(tǒng)和并發(fā)編程,對paxos和raft分布式協(xié)議饒有興趣。尤其喜歡數(shù)據(jù)庫內(nèi)核和存儲引擎,堅(jiān)持不懈對MySQL/innoDB和WiredTiger的實(shí)現(xiàn)和事務(wù)處理模型進(jìn)行探究。熱衷于開源,曾為開源社區(qū)提過些patch。業(yè)余時(shí)間喜歡寫技術(shù)長文,喜歡唐詩。

責(zé)任編輯:王雪燕 來源: 51CTO
相關(guān)推薦

2012-03-11 15:27:57

微軟

2013-11-11 11:17:45

AngularJS性能優(yōu)化

2021-04-27 06:20:25

MySQL集群優(yōu)化

2025-04-03 09:45:51

2014-08-04 15:13:27

光纖

2025-06-27 09:05:47

2018-11-23 10:01:57

5G標(biāo)準(zhǔn)網(wǎng)絡(luò)

2021-01-19 14:53:50

NLP模型開源

2024-11-08 15:08:17

2021-04-22 07:29:46

數(shù)據(jù)展現(xiàn)方式

2019-08-21 14:35:18

壓縮文件優(yōu)化過程Java

2017-05-31 13:58:05

戴爾宕機(jī)服務(wù)器

2025-08-18 03:00:22

Spring樹形結(jié)構(gòu)分類樹

2020-11-12 18:51:43

Java編程語言

2021-08-26 22:26:55

性能優(yōu)化技術(shù)

2022-06-24 11:23:28

網(wǎng)絡(luò)

2018-03-26 14:21:51

音視頻延遲架構(gòu)網(wǎng)絡(luò)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

成人毛片在线观看| 日本黄色免费在线| 另类中文字幕网| 色青青草原桃花久久综合 | 蜜臀a∨国产成人精品| 不卡av在线网站| 亚洲一区二区三区四区五区六区| 成人在线爆射| 亚洲第一搞黄网站| 亚洲高清视频一区| 好吊视频一二三区| 日本伊人精品一区二区三区观看方式| 裸体女人亚洲精品一区| 国产肉体xxxx裸体784大胆| 国产91欧美| 成年人视频在线免费观看| 欧美精品18| 亚洲男女性事视频| 中文字幕一区二区三区四| 亚洲黄色网址| 一区二区三区精密机械公司| 日韩精品伦理第一区| 国产小视频一区| 日av在线不卡| 欧美激情精品久久久久久黑人| 日本欧美一区二区三区不卡视频| 91综合精品国产丝袜长腿久久| 91黄视频在线观看| 美女日批免费视频| 综合久久2019| 一区在线播放视频| 日本一区免费看| 亚洲av成人精品日韩在线播放| 麻豆成人av在线| 97香蕉久久夜色精品国产| 91香蕉国产视频| 亚洲图片久久| 精品不卡在线视频| 深夜视频在线观看| 久久久久久久久成人| 欧美日韩久久一区| 欧美日韩亚洲一二三| 黄色激情在线播放| 午夜久久久久久久久| 国产性生活免费视频| 米奇精品一区二区三区| 国产精品久久久久久久裸模 | 欧美一区二区三区综合| 黄色在线观看网| 91麻豆免费在线观看| 国产91aaa| 亚洲av无码国产精品永久一区| 国产一区欧美一区| 91免费福利视频| 国产精品爽爽久久久久久| 九色porny丨国产精品| 日本精品免费观看| 中文字幕精品三级久久久| 欧美日韩中文一区二区| 一区二区三区四区在线观看视频| 成人精品999| 欧美美乳视频| 亚洲欧美三级在线| 欧美丰满老妇熟乱xxxxyyy| 香蕉视频一区| 亚洲人精选亚洲人成在线| a级大片在线观看| 国产最新精品| 精品国产拍在线观看| 内射一区二区三区| 国产一区二区精品福利地址| 亚洲精品国产综合久久| 欧洲av一区二区三区| 欧美天天综合| 国产亚洲精品va在线观看| 黄大色黄女片18免费| 天天操夜夜操国产精品| 久久伊人色综合| 精品视频在线观看| 偷偷色噜狠狠狠狠的777米奇| 国产伦理久久久久久妇女| 日韩美女视频在线| 风间由美一二三区av片| 欧美限制电影| 欧美日韩成人在线播放| 国产亚洲欧美久久久久| 午夜在线观看免费一区| 国产精品一区二区三| 国产成年妇视频| 不卡大黄网站免费看| 日本视频一区在线观看| caoporm免费视频在线| 午夜成人免费视频| 国产精品一区二区小说| 9l视频自拍蝌蚪9l视频成人| 欧美精品一区二区三区蜜桃视频 | 91毛片在线观看| 亚洲精品在线观看免费| 男人天堂亚洲天堂| 欧美自拍丝袜亚洲| 亚洲一区二区图片| 欧美激情极品| 久热国产精品视频| 国产无遮挡呻吟娇喘视频| 老鸭窝一区二区久久精品| 成人欧美一区二区三区视频xxx| 青春有你2免费观看完整版在线播放高清| caoporn国产一区二区| 日韩av一区二区三区美女毛片| a级网站在线播放| 午夜精品久久久久影视| 99久久99精品| 精品久久久久久久久久久下田 | 羞羞视频在线免费国产| 日本韩国精品一区二区在线观看| 欧美性猛片aaaaaaa做受| 99热一区二区| 亚洲免费福利一区| 欧美高跟鞋交xxxxxhd| 中文字幕第31页| 91麻豆国产精品久久| 黄色a级片免费看| 国产福利一区二区三区在线播放| 亚洲精品久久久久久久久久久久久| 老司机成人免费视频| 日韩va亚洲va欧美va久久| 久久精品日产第一区二区三区乱码 | 精品黑人一区二区三区| proumb性欧美在线观看| 欧美日韩在线免费观看视频| 88xx成人网| 亚洲视频网站在线观看| 国产又黄又猛又粗又爽| 99久久精品国产毛片| 日本阿v视频在线观看| 国产精品一级在线观看| 日韩在线视频国产| 亚洲第一区av| 国产女主播视频一区二区| 欧美xxxxx在线视频| 日韩电影不卡一区| 8x海外华人永久免费日韩内陆视频 | 在线欧美视频| 成人免费观看网站| 免费在线观看的电影网站| 在线播放亚洲一区| 中文字幕欧美激情极品| 日日欢夜夜爽一区| 五月天亚洲综合| 91在线成人| 日韩av中文字幕在线免费观看 | 牛牛国产精品| 91在线免费视频| 在线观看的网站你懂的| 欧美日韩精品一区二区三区| www.4hu95.com四虎| 国产精品视频久久一区| 欧美亚洲免费高清在线观看 | 国产男人精品视频| 午夜在线视频播放| 欧美一卡2卡三卡4卡5免费| 日韩一级av毛片| 美女www一区二区| 欧美h视频在线观看| 精品国模一区二区三区欧美 | 欧洲精品亚洲精品| 成人私拍视频| 在线看日韩欧美| 自拍偷拍校园春色| 最新不卡av在线| 成人在线观看一区二区| 999亚洲国产精| 成人蜜桃视频| 一本色道久久88| 国内精品久久久久久久影视简单| 欧美福利视频在线| 日本福利在线观看| 欧美日韩国产一级| 911国产在线| 精品无人码麻豆乱码1区2区 | 久久久视频6r| 国模娜娜一区二区三区| 成人午夜免费在线| 欧洲杯半决赛直播| 51国偷自产一区二区三区 | 成人www视频在线观看| 18加网站在线| 亚洲欧洲在线播放| 国产一区二区波多野结衣| 亚洲成人av一区二区三区| av男人的天堂av| 日本sm残虐另类| 精品国偷自产一区二区三区| 久久久亚洲欧洲日产| 国产精品69av| 日本理论片午伦夜理片在线观看| 精品无人区太爽高潮在线播放| 一区二区日韩视频| 黄色精品一区二区| 顶臀精品视频www| 国产一区二区三区香蕉| 免费超爽大片黄| 91久久国产| 欧美一区二视频在线免费观看| 欧美影院精品| 国产成人av在线影院| 狠狠久久综合婷婷不卡| 日本美女一区| 久久免费精品日本久久中文字幕| 成人亚洲性情网站www在线观看| 日韩精品一区在线观看| 日韩xxx视频| 日本黄色小视频在线观看| 国产女主播福利| 国产一区福利| 国产色产综合色产在线视频| 91在线视频观看免费| 日韩精品免费一区二区在线观看| 精品国产_亚洲人成在线| 欧美精品影院| 国产精品小说在线| 日韩伦理av| 久久影院免费观看| 欧美孕妇孕交xxⅹ孕妇交| 欧美va在线播放| 中文字幕第三页| 日本二三区不卡| 国产成人在线免费观看视频| 亚洲免费毛片网站| 婷婷伊人五月天| 中文字幕在线一区二区三区| 男人舔女人下部高潮全视频| 成人精品免费网站| 四虎永久免费观看| 成人一道本在线| 免费黄色av网址| 国产乱人伦偷精品视频免下载 | 色在线中文字幕| 欧美精品做受xxx性少妇| 欧美激情办公室videoshd| 中文字幕视频在线免费欧美日韩综合在线看| 91国模少妇一区二区三区| aa视频在线观看| 少妇激情综合网| 邻居大乳一区二区三区| 亚洲精品美女免费| 天天色棕合合合合合合合| 亚洲成年网站在线观看| 性一交一乱一透一a级| 日韩久久免费av| 日韩一级片免费看| 日韩精品有码在线观看| 天堂√在线中文官网在线| 亚洲精品视频网上网址在线观看 | 中文字幕亚洲欧美日韩2019| 日韩黄色影片| 亚洲欧美另类国产| 番号集在线观看| 在线观看日韩欧美| 男女视频在线观看免费| 亚洲第一中文字幕| 黄色小视频免费观看| 日韩高清a**址| 成人在线观看网站| 自拍偷拍亚洲精品| 国产鲁鲁视频在线观看特色| 久久久精品国产网站| 日本动漫理论片在线观看网站 | 国产尤物av一区二区三区| 欧美日韩精品一本二本三本| 欧美一级中文字幕| 午夜国产精品视频| 在线免费观看成人网| 欧美精品激情| 久章草在线视频| 蜜桃精品视频在线| 特黄特色免费视频| 久久亚洲一区二区三区明星换脸| 日韩一级av毛片| 亚洲综合图片区| 精品黑人一区二区三区| 欧美一区欧美二区| 四虎在线视频| 亚洲区小说区图片区qvod| 国产伦精品一区二区三区四区免费 | 亚洲一区二区乱码| 国产精品污网站| 国产高潮流白浆| 一区二区三区小说| 亚洲熟女综合色一区二区三区| 91福利国产成人精品照片| 亚洲国产无线乱码在线观看| 精品伦理精品一区| av男人的天堂在线| 91精品国产91久久久| 成人豆花视频| 免费成人在线观看av| 午夜精品婷婷| 在线观看的毛片| 精品亚洲aⅴ乱码一区二区三区| 亚洲成人日韩在线| 亚洲免费看黄网站| 中文字幕免费高清在线观看| 亚洲国产日韩欧美在线99| 黄色动漫在线| 国产精品高精视频免费| 果冻天美麻豆一区二区国产| 五月天色一区| 校园激情久久| 日韩大尺度视频| 亚洲欧洲无码一区二区三区| 日韩中文字幕在线观看视频| 日韩午夜精品视频| 欧美a在线看| 国产精品扒开腿爽爽爽视频| 国产成人高清精品免费5388| 路边理发店露脸熟妇泻火| 青青国产91久久久久久| 蜜桃精品成人影片| 香蕉乱码成人久久天堂爱免费| aaa一区二区| 日韩在线视频一区| www.成人在线视频| 精品激情国产视频| 日韩人妻精品中文字幕| 欧美本精品男人aⅴ天堂| 777电影在线观看| 国产91网红主播在线观看| 超碰cao国产精品一区二区| 中文字幕久久综合| 久久一二三区| 成年人在线观看av| 精品国产福利在线| 天堂av资源网| 久久亚洲精品成人| 视频91a欧美| 在线国产精品网| 国产一区在线精品| 综合五月激情网| 91精品欧美综合在线观看最新| 欧美一级特黄aaaaaa| 久久久久久久国产| 少妇精品在线| 男人添女荫道口女人有什么感觉| 国产成人免费在线观看不卡| 免费一级suv好看的国产网站| 欧美主播一区二区三区美女| 激情小说 在线视频| 日韩免费观看av| 中文有码一区| 国产亚洲综合视频| 91麻豆国产在线观看| 国产免费一级视频| 国产一区二区动漫| 玖玖精品在线| 亚洲成年人专区| 国产成人av一区二区三区在线观看| 久久黄色免费网站| 亚洲国产精品成人一区二区| 免费看男女www网站入口在线 | 国产激情视频一区| 思热99re视热频这里只精品| 国产又黄又猛视频| 国产精品国产三级国产有无不卡 | 欧美风情在线观看| 粉嫩精品导航导航| 国产一区二区在线视频播放| 久久久www成人免费毛片麻豆 | 国产欧美日韩在线| 天天夜碰日日摸日日澡性色av| 激情国产一区二区| 久久久久亚洲av无码专区| 日韩av综合中文字幕| 免费看av不卡| 最新精品视频| 国产精品99久久久久久宅男| 国产中文字幕免费| 国产午夜精品一区二区三区| av有声小说一区二区三区| 中文字幕一区二区三区在线乱码 | 国内激情久久| 成人免费无码大片a毛片| 欧美色图免费看| 男人天堂久久久| 春色成人在线视频| 乱人伦精品视频在线观看| 狂野欧美性猛交| 欧美电影一区二区三区| 美女91在线看| av动漫免费观看| av中文一区二区三区| 中文字幕有码视频| 97在线视频国产| 偷拍欧美精品| 男人天堂av电影| 91精品国产综合久久福利| 欧美xoxoxo| 东北少妇不带套对白| 国产亚洲成av人在线观看导航 | 一级黄色大片视频|