可靠傳輸基於滑動窗口
存在兩個窗口,容許發送窗口和容許接收窗口,
接收窗口當且僅當前綴徹底收到才能右移
發送窗口須要發送且收到確認才能右移(右端點不必定會移動,這取決於窗口值)算法
當確認丟失時須要採用超時重傳的機制緩存
超時重傳的時機依靠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
解決小報文段的捎帶傳輸的實現:ci
Naggle算法:
1.發送第一個數據字節,後面的進行緩存
2.收到該字節的確認後,把緩存全部字節發送出去,隨後到達的繼續緩存
3.收到前面的確認後再以此類推路由
此時可改良網絡速率慢而數據到達速率快的狀況,而且能捎帶傳輸(先緩存下來而不是急於發送)
發送發維護擁塞窗口cwnd,且讓發送窗口值等於cwnd
判斷擁塞依據:路由器的分組丟棄致使的超時
1.慢啓動過程對高RTT不友好,能夠把cwnd適當加大
2.避免超時重傳可採用受限傳輸機制:發送方至少接收到一個重複ACK才傳輸新的數據報文段
(公平隊列。。。)
\(BW=delivered/interval_us\)
其中delivered是應答數據的個數,interval_us是應答所用的時間
其中應答部分不區分是正常發送仍是重傳
\(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抖動的可能性
計網博大精深,雖然只挑了很小的方面去了解,但目前寫的這些都是十分粗略的,各位過客請別嫌棄。。