滑動視窗(通告視窗):接收端根據自己設定的緩衝大小決定該視窗的大小, 緩衝大小的設定根據BDP(Bandwidth Delay Product) 來設定, BDP = link_bandwidth * RTT
擁塞視窗:發送端根據自己估計的網路擁塞程度而設定的視窗值,是來自發送端的流量控制
2. TCP有3種基本機制控制報文的發送
2.1 TCP維持一個變數,它等於最大報文段長度MSS?
2.2 應用程式層指明要求發送報文端, 通過TCP頭部的push 欄位(急迫位元)
2.3 計時器時間到, 把緩衝的資料發送出去
3. Nagle 演算法, TCP_NODELAY 可以關閉該演算法
1. 發送端應用進程將欲發送的資料逐個位元組的送到發送端的TCP緩衝, 則發送端就將第一個字元先發送出去,將後面的字元都緩衝起來
2. 當收到對前一個報文的確認,將緩衝中的所有字元組裝成一個報文段發送出去
3. 當緩衝的字元達到視窗的一半或者以達到最大報文段長度,就立即發送
4. 糊塗視窗綜合症(silly window syndrome) : 可以讓接受端等待一段時間
5. 擁塞控制演算法
慢開始:由小到大逐漸增大發送端的擁塞視窗數值,初始值是一個MSS值,收到確認後增加至多一個MSS值
擁塞避免演算法:擁塞視窗每經過一個返回時延RTT就增加一個MSS的大小
慢開始門限(ssthresh)
當cwnd < ssthresh : 慢開始演算法
當cwnd > ssthresh : 擁塞避免雙方
當cwnd == ssthresh : 兩個都可以
網路出現擁塞處理方法:將慢開始門限ssthresh設定為出現擁塞時的發送視窗值的一半, 將擁塞視窗設定為1,重新執行慢開始演算法
快重傳:發送端只要一串連收到三個重複的ACK,即可斷定有分組丟失
快恢複: cwnd = ssthresh + n* MSS;
乘法減少:ssthresh = cwnd * 0.5
加法增大:cwnd++
6. 隨機早期丟棄(Random Early Discard): 路由器採用的演算法