ip層是基於塊狀的packet報文來分片傳送的,因此,tcp協議需要將應用交付給它的字元流拆分成多個packet(在tcp傳輸層被稱為segment)傳送,由於網速有變化且接收主機的處理效能有限,tcp還要決定何時傳送這些segment。tcp滑動視窗解決了client、server這兩台主機的問題,但沒有去管連線中大量路由器、交換機**ip報文的問題,因此當瓶頸路由器的輸入流大於其輸出流時,便會發生擁塞。如果傳送方不管不顧,那麼瓶頸路由器的緩衝佇列填滿後便會發生大量丟包,且此時rtt(報文往返時間)由於存在長佇列而極高。
如上圖,最好的狀態是沒有佇列,此時rtt最低,而state2中rtt公升高,但沒有丟包,到state 3佇列滿時開始發生丟包
tcp的擁塞控制便用於解決上述問題。在bbr出現前,擁塞控制分為四個部分:慢啟動、擁塞避免、快速重傳、快速恢復。它的意義是在不知道連線的瓶頸頻寬時,以起始較低的傳送速率,以每rtt兩倍的速度快速增加傳送速率,直到到達乙個閾值,到該閾值後,進入線性提高傳送速率的階段,該階段叫做擁塞避免,直到發生丟包,。丟包後,發速速率大幅下降,針對丟包使用快速重傳演算法重送傳送,同時也使用快速恢復演算法把傳送速率盡量平滑的公升上來。如果瓶頸路由器的快取特別大,那麼這種以丟包作為探測依據的擁塞演算法將會導致嚴重問題:tcp鏈路上長時間rtt變大,但吞吐量維持不變。
如cubic這樣基於丟包的擁塞控制演算法在圖2中的第2條灰色豎線發生作用,這已經太晚了,因為此時瓶頸路由器已經達到上限,緩衝佇列已經滿載。更好的作用點是bdp上限開始發揮作用時,也就是第1條灰色豎線,是瓶頸路由器的緩衝佇列剛剛開始積壓時的節點。bbr通過檢測rtprop和btlbw來實現擁塞控制。
rtprop:光訊號從a端到b端的最小時延(其實是2倍時延,因為是乙個來回),這取決於物理距離。
btlbw:在a到b的鏈路中,它的頻寬取決於最慢的那段鏈路的頻寬,稱為瓶頸頻寬。
bdp:整條物理鏈路(不含路由器快取)所能儲藏的位元資料之和,bdp = btlbw * rtprop
tcp bbr協議定義的頻寬(delivery rate)= 資料量/從傳送出去至收到ack的時長
這裡注意,rtporp和rtt是不一樣的,rtt裡含有報文在路由器佇列裡的排隊時間、ack的延遲確認時間等。tcp每個報文必須被確認,確認動作是通過接收端傳送ack報文實現的,但由於tcp和ip頭部有40個位元組,如果不攜帶資料只為傳送ack網路效率過低,所以會讓獨立的ack報文等一等,看看有沒有資料發的時候順便帶給對方,或者等等看多個ack一起發,叫做延遲確認。所以,可以用下列公式表示rtt與rtprop的差別:
rtt我們可以測量得出,我們只需要找到瓶頸路由器隊列為空時多次rtt測量的最小值即為rtporo
當rtprop公升高時我們便得到了btlbw,這便找到第1條灰色豎線最好的擁塞控制點,也有了後續傳送速率的依據。基於bbr演算法,由於瓶頸路由器的隊列為空,最直接的影響就是rtt大幅下降,而因為沒有丟包,bbr傳輸速率也會有大幅提公升。
除此之外,bbr會嘗試週期性的探測新的瓶頸頻寬,這個週期值為1.25、0.75、1、1、1、1,以此來應對鏈路發生了切換,新的瓶頸頻寬變大或者變小的情況。1.25會使得bbr嘗試傳送更多的報文,而如果產生了佇列積壓,0.75則會釋放佇列。
下圖是10mbps、40ms網路的慢啟動階段,該網路中未確認的位元組數應為10mbps*0.04s=0.05mb。棕色線條是cubic演算法下已傳送位元組數,而藍色是ack已確認位元組數,綠色則是bbr演算法下的已傳送位元組數。顯然,最初cubic與bbr演算法相同,在0.25秒時飛行位元組數顯然遠超過了0.05mb位元組數,大約在 0.1mb位元組數也就是2倍bdp。大約在0.3秒時,cubic開始線性增加擁塞視窗,而到了0.5秒後bbr開始降低傳送速率,即排空瓶頸路由器的擁塞佇列,到0.75秒時飛行位元組數調整到了bdp大小,這是最合適的傳送速率。
當繁忙的網路出現大幅丟包時,bbr的表現也遠好於cubic演算法。下圖中,丟包率從0.001%到50%時,可以看到綠色的bbr遠好於紅色的cubic。大約當丟包率到0.1%時,cubic由於不停的觸發擁塞演算法,所以吞吐量極速降到10mbps只有原先的1/10,而bbr直到5%丟包率才出現明顯的吞吐量下降。cubic造成瓶頸路由器的緩衝佇列越來越滿,rtt時延就會越來越大,而作業系統對三次握手的建立是有最大時間限制的,這導致建cubic下的網路極端擁塞時,新連線很難建立成功。
bbr演算法的優勢:
集群技術綜述
摘自 北京中科紅旗軟體技術 red flag server 4.0集群技術 一 什麼是集群 多台同構或異構的計算機用某種方式連線起來協同完成特定的任務就構成了集群系統,根據所要完成的任務的不同,集群通常分為三種型別 1 科學計算集群 主要用以進行大規模數值計算,解決複雜的科學問題。在這種集群上執行是...
資訊隱藏技術綜述
資訊隱藏技術綜述 蔡洪亮 李波 盧星 楊明 摘要 介紹了資訊隱藏技術的概念 模型及分類 給出了資訊隱藏技術的五大特徵 分析了兩種典型的資訊隱藏演算法 時域替換技術和變換域技術 描述了資訊隱藏在現實中主要的應用領域 指出了資訊隱藏技術今後的發展方向。1.資訊隱藏的概念 模型及分類 資訊隱藏技術是利用載...
演算法 排序演算法綜述
排序演算法有很多種,本文主要介紹基本的排序演算法和實現,並分析複雜度和穩定性。一 n2 的演算法 1 插入排序 插入排序十分好理解,在無序的陣列中選擇乙個數值,插入到有序的陣列當中,這個過程是穩定的。實現 如下 1 template 2 void insertionsort vector arr i...