TCP與BBR

可靠傳輸

可靠傳輸基於滑動窗口
存在兩個窗口,容許發送窗口和容許接收窗口,
接收窗口當且僅當前綴徹底收到才能右移
發送窗口須要發送且收到確認才能右移(右端點不必定會移動,這取決於窗口值)算法

當確認丟失時須要採用超時重傳的機制緩存

超時重傳的時機依靠RTT
RTTs樣本計算:\(RTTs=(1-α)RTTs+αRTT\)
超市計數器時間RTO計算:\(RTO=RTTs+4RTT_D\)
其中誤差值\(RTT_D=3/4RTT_D+1/4|RTTs-RTT|\)網絡

流量控制

流量控制基於rwnd併發

注意rwnd的值僅在ACK=1的狀況下生效
當rwnd=0時接收方(指接收rwnd值的一方,平時是做爲發送方)須要等待發送方一個新的窗口值纔會繼續發送流量優化

一種狀況:B發送rwnd爲0後,發現內部存在緩存可用,從新發送窗口值後丟失了,產生死鎖spa

解決方法:持續計數器,當且僅當rwnd=0時啓動,到期則發送1B大小的零窗口探測報文(接收rwnd一方發出),若得出值爲0則維持現狀,reset計數器,不然解除死鎖隊列

TCP傳輸的時機有ip

  • 到達MSS
  • push
  • TCP內部有緩存且到達計數時間

解決小報文段的捎帶傳輸的實現:ci

Naggle算法:
1.發送第一個數據字節,後面的進行緩存
2.收到該字節的確認後,把緩存全部字節發送出去,隨後到達的繼續緩存
3.收到前面的確認後再以此類推路由

此時可改良網絡速率慢而數據到達速率快的狀況,而且能捎帶傳輸(先緩存下來而不是急於發送)

擁塞控制

發送發維護擁塞窗口cwnd,且讓發送窗口值等於cwnd

判斷擁塞依據:路由器的分組丟棄致使的超時

  • 慢開始
    避免開始把大量數據注入網絡,cwnd設置爲2-4個SMSS
    且每次cwnd增長量=MIN(N,SMSS),N爲剛確認的字節數
    一個輪次須要一次RTT時間,每次都會把cwnd翻倍
    細節:並非RTT事後直接倍增,是收到一個確認馬上增長對應的大小,詳看頁尾註釋
  • 擁塞避免
    1.慢開始過程具備門限ssthreash,一旦cwnd超過該門限則進入擁塞避免算法,進行線性遞增,使網絡不易擁塞
    2.當出現超時(認爲擁塞)時,ssthresh折半且cwnd=1,回到慢開始環節
  • 快重傳
    爲了儘早讓發送方得知個別報文丟失而不是誤判爲擁塞,接收方不使用捎帶確認的緩存算法,而是當即發送確認(失序也要)
    好比2 4 5 收到,認爲3丟了,會發送2的確認,此時2的兩次確認(4沒確認)表示3丟了,日後5也會發送2的重複確認,當ACK達到3時發送方確信是丟失了而馬上重發(3-ACK)
  • 快恢復
    當得知只是部分丟失時,發送發直接把ssthread=cwnd/2且cwnd=ssthread,直接進入擁塞避免過程

四個階段的優化

1.慢啓動過程對高RTT不友好,能夠把cwnd適當加大
2.避免超時重傳可採用受限傳輸機制:發送方至少接收到一個重複ACK才傳輸新的數據報文段
(公平隊列。。。)

BBR原理

組成

  • 即時帶寬
  • RTT跟蹤
  • pipe狀態機
  • pacing rate和cwnd

BW計算

\(BW=delivered/interval_us\)
其中delivered是應答數據的個數,interval_us是應答所用的時間

其中應答部分不區分是正常發送仍是重傳

pacing rate和cwnd計算

\(pr=G \cdot BW\)\(G\)爲增益係數

BBR中RTT只論曾經到達的最佳RTT,而不會加權平均(目標是再次令RTT最小)

此時\(cwnd = G' \dcot BDP\)
其中BDP爲帶寬和時延的乘積

G和G'由BBR狀態機給出

狀態機

每一次ACK都會計算BW,且把結果反饋給pipe狀態機,從而獲得G和G'
注意狀態機的多種狀態是具備必定針對性的,這裏不展開

補充說明

傳統TCP中輸出只有cwnd,而BBR還多輸出了一個pacing rate,用於控制cwnd的發送狀況,前者會在cwnd富裕的狀況下一併發出,然後者是根據pacing rate表示窗口內的數據包以多久的時間間隔發送,減小RTT抖動的可能性

補充補充說明

計網博大精深,雖然只挑了很小的方面去了解,但目前寫的這些都是十分粗略的,各位過客請別嫌棄。。

相關文章
相關標籤/搜索