為什么使用慢啟動算法
當主機開始發送數據時,如果立即將大量數據注入網絡,就有可能引起網絡擁塞。因此,較好的方法是由小到大逐漸增大發送窗口。
初始時,cwnd=1個最大報文段大小(MSS),每收到一個確認后+1。這樣,每過一個傳輸輪次,cwnd的值變為2,4,8,···,指數型增加。
擁塞避免
當cwnd增大到可能會導致網絡擁塞時,需要進行報文重傳。引入慢啟動閥值ssthresh。
慢啟動閥值ssthresh = 當時窗口大小的一半。
重傳有兩種機制:超時重發機制和高速重發機制。兩種機制對應的cwnd的值不同。
cwnd = ssthresh + 3
if
高速重傳機制
cwnd = 1if
超時重發機制
超時重發機制
超時重發機制cwnd=1,接著繼續執行慢啟動算法。當cwnd>=ssthresh時開始線性增加,即為擁塞避免。
高速重傳機制
快重傳
高速重傳機制采用的算法為快重傳算法。快重傳算法沒有超時,而是收到3個以上的重復的ACK即開始重傳,隨后進入快恢復算法。
快恢復
快恢復算法分3個步驟:
- 收到第3個重復確認的ACK時,sstresh=當前cwnd的一半,cwnd=ssthresh+3。發送重傳數據。
- 沒有收到新數據的ACK之前,cwnd+1
if
收到重復的ACK;發送一個報文段if
cwnd > 未確認的報文大小。- 收到新數據的ACK,cwnd=ssthresh(重傳時cwnd的一半),開始擁塞避免。