TCP擁塞控制的基本原理:
發(fā)送方限制發(fā)送速率:
lastByteSent-lastByteAcked<=CongWin(擁塞窗口)
通過動態(tài)設(shè)置擁塞窗口來調(diào)整速率的大小
CongWin:
動態(tài)調(diào)整以改變發(fā)送速率
反應(yīng)鎖感知到的網(wǎng)絡(luò)擁塞
如何感知垦缅?:
Loss事件=timeout或者受到3個重復(fù)的ACK
發(fā)生loss事件之后,發(fā)送方降低速率
如何合理第調(diào)整發(fā)送速率?
加性增-乘性減:AIMD(add increase mul des)
慢啟動:SS
AIDM:
原理:逐漸增加發(fā)送速率,謹慎探測可用帶寬,知道發(fā)生loss
方法:
1.Additive increase:每個RTT將CongWin增大一個MSS(最大段的長度)---擁塞避免
2.Multiplicative Decrease:發(fā)生loss后將CongWin減半
SS:
TCP建立連接時糯俗,CongWin設(shè)置為1
原理:當(dāng)連接開始時禁熏,指數(shù)型增長敏簿,每個RTT將CongWin翻倍涎跨,
初始速率很慢,但是快速攀升
如圖:
通過AIDM和SS的動態(tài)切換崭歧,來進行擁塞控制
如何進行切換隅很?當(dāng)CongWin達到loss時間前值的1/2時
實現(xiàn)方法:
設(shè)置變量Threshold
當(dāng)loss事件發(fā)生時,threshold被設(shè)置為loss時間前CongWin值的1/2
對loss事件的處理
3個重復(fù)的ack:
CongWin切到一半,然后線性增長
Timeout事件:
CongWin直接設(shè)置為1個MSS
然后指數(shù)增長
達到Threshold后叔营,再線性增長
原理:3個重復(fù)的ACKs表示網(wǎng)絡(luò)還能傳輸一些segments
timeout事件表明擁塞更為嚴(yán)重
TCP擁塞控制算法: