計算機網絡之TCP擁塞控制
1. 首先,擁塞控制和流量控制是不一樣的。
擁塞控制是防止過多的數據註入到網絡中,可以使網絡中的路由器或鏈路不致過載,是一個全局性的過程。
流量控制是點對點通信量的控制,是一個端到端的問題,主要就是抑制發送端發送數據的速率,以便接收端來得及接收。
2. 擁塞的標誌:1.重傳計時器超時 2.接收到三個重復確認
3. 發送方維持一個叫做擁塞窗口的狀態變量。擁塞窗口的大小取決於網絡的擁塞程度,且動態地在變化。
慢開始和擁塞避免:
1.慢開始算法的思路就是,不要一開始就發送大量的數據,先探測一下網絡的擁塞程度,也就是說由小到大(指數的增長)逐漸增加擁塞窗口的大小。擁塞避免則是讓擁塞窗口緩慢地增大,即每經過一個往返時間RTT就把發送方的擁塞控制窗口加一
為了防止擁塞窗口增長過大引起網絡擁塞,設置一個慢開始門限(ssthresh狀態變量)
當擁塞窗口<ssthresh,使用慢開始算法(指數增長)
當擁塞窗口=ssthresh,既可使用慢開始算法,也可以使用擁塞避免算法(線性增長)
當擁塞窗口>ssthresh,使用擁塞避免算法
但是無論是在慢開始階段還是在擁塞避免階段,只要發送方判斷網絡出現擁塞(其根據就是沒有收到確認,雖然沒有收到確認可能是其他原因的分組丟失,但是因為無法判定,所以都當做擁塞來處理),就把慢開始門限設置為出現擁塞時的發送窗口大小的一半。然後把擁塞窗口設置為1,執行慢開始算法。
4. 快速恢復(與快速重傳配合使用)
1.采用快速恢復算法時,慢開始只在TCP連接建立時和網絡出現超時時才使用。
2.當發送方連續收到三個重復確認時,就執行“乘法減小”算法,把ssthresh門限減半。但是接下去並不執行慢開始算法。
3.考慮到如果網絡出現擁塞的話就不會收到好幾個重復的確認,所以發送方現在認為網絡可能沒有出現擁塞。所以此時不執行慢開始算法,而是將cwnd設置為ssthresh的大小,然後執行擁塞避免算法。
計算機網絡之TCP擁塞控制