TCP的擁塞控制機(jī)制主要是以下四種機(jī)制:
慢啟動(慢開始)
擁塞避免
快速重傳
快速恢復(fù)
(1)慢啟動(慢開始)
在開始發(fā)送的時候設(shè)置cwnd = 1(cwnd指的是擁塞窗口)
思路:開始的時候不要發(fā)送大量數(shù)據(jù),而是先測試一下網(wǎng)絡(luò)的擁塞程度,由小到大增加擁塞窗口的大小。
為了防止cwnd增長過大引起網(wǎng)絡(luò)擁塞,設(shè)置一個慢開始門限(ssthresh 狀態(tài)變量)當(dāng)cnwd < ssthresh,使用慢開始算法當(dāng)cnwd = ssthresh,既可使用慢開始算法,也可以使用擁塞避免算法當(dāng)cnwd > ssthresh,使用擁塞避免算法
(2)擁塞避免
擁塞避免未必能夠完全避免擁塞,是說在擁塞避免階段將擁塞窗口控制為按線性增長,使網(wǎng)絡(luò)不容易出現(xiàn)阻塞。
思路: 讓擁塞窗口cwnd緩慢的增大,即每經(jīng)過一個返回時間RTT就把發(fā)送方的擁塞控制窗口加一
無論是在慢開始階段還是在擁塞避免階段,只要發(fā)送方判斷網(wǎng)絡(luò)出現(xiàn)擁塞,就把慢開始門限設(shè)置為出現(xiàn)擁塞時的發(fā)送窗口大小的一半。然后把擁塞窗口設(shè)置為1,執(zhí)行慢開始算法。如圖所示:
其中,判斷網(wǎng)絡(luò)出現(xiàn)擁塞的根據(jù)就是沒有收到確認(rèn),雖然沒有收到確認(rèn)可能是其他原因的分組丟失,但是因為無法判定,所以都當(dāng)做擁塞來處理。
(3)快速重傳
快重傳要求接收方在收到一個失序的報文段后就立即發(fā)出重復(fù)確認(rèn)(為的是使發(fā)送方及早知道有報文段沒有到達(dá)對方)。發(fā)送方只要連續(xù)收到三個重復(fù)確認(rèn)就立即重傳對方尚未收到的報文段,而不必繼續(xù)等待設(shè)置的重傳計時器時間到期。
由于不需要等待設(shè)置的重傳計時器到期,能盡早重傳未被確認(rèn)的報文段,能提高整個網(wǎng)絡(luò)的吞吐量
(4)快速恢復(fù)
當(dāng)發(fā)送方連續(xù)收到三個重復(fù)確認(rèn)時,就執(zhí)行“乘法減小”算法,把ssthresh門限減半。但是接下去并不執(zhí)行慢開始算法。
考慮到如果網(wǎng)絡(luò)出現(xiàn)擁塞的話就不會收到好幾個重復(fù)的確認(rèn),所以發(fā)送方現(xiàn)在認(rèn)為網(wǎng)絡(luò)可能沒有出現(xiàn)擁塞。所以此時不執(zhí)行慢開始算法,而是將cwnd設(shè)置為ssthresh的大小,然后執(zhí)行擁塞避免算法。