TCP的擁塞控制(詳解)


在某段時間,若對網絡中某一資源的需求超過了該資源所能提供的可用部分,網絡性能就要變壞,這種情況就叫做網絡擁塞。

在計算機網絡中數位鏈路容量(即帶寬)、交換結點中的緩存和處理機等,都是網絡的資源。

若出現擁塞而不進行控制,整個網絡的吞吐量將隨輸入負荷的增大而下降。

 

 

當輸入的負載到達一定程度 吞吐量不會增加,即一部分網絡資源會丟失掉,網絡的吞吐量維持在其所能控制的最大值,轉發節點的緩存不夠大這造成分組的丟失是擁塞的征兆。
TCP的四種擁塞控制算法
1.慢開始
2.擁塞控制
3.快重傳
4.快恢復
假定:
1.數據是單方向傳送,而另一個方向只傳送確認
2.接收方總是有足夠大的緩存空間,因而發送發發送窗口的大小由網絡的擁塞程度來決定
3.以TCP報文段的個數為討論問題的單位,而不是以字節為單位

 

 

示例如下:
傳輸輪次:發送方給接收方發送數據報文段后,接收方給發送方發回相應的確認報文段,一個傳輸輪次所經歷的時間就是往返時間RTT(RTT並非是恆定的數值),使用傳輸輪次是為了強調,把擁塞窗口cwnd所允許發送的報文段都連續發送出去,並收到了對已發送的最后一個報文段的確認,擁塞窗口cwnd會隨着網絡擁塞程度以及所使用的擁塞控制算法動態變化。

在tcp雙方建立邏輯鏈接關系時, 擁塞窗口cwnd的值被設置為1,還需設置慢開始門限ssthresh,在執行慢開始算法時,發送方每收到一個對新報文段的確認時,就把擁塞窗口cwnd的值加一,然后開始下一輪的傳輸,當擁塞窗口cwnd增長到慢開始門限值時,就使用擁塞避免算法。

慢開始:
假設當前發送方擁塞窗口cwnd的值為1,而發送窗口swnd等於擁塞窗口cwnd,因此發送方當前只能發送一個數據報文段(擁塞窗口cwnd的值是幾,就能發送幾個數據報文段),接收方收到該數據報文段后,給發送方回復一個確認報文段,發送方收到該確認報文后,將擁塞窗口的值變為2,

發送方此時可以連續發送兩個數據報文段,接收方收到該數據報文段后,給發送方一次發回2個確認報文段,發送方收到這兩個確認報文后,將擁塞窗口的值加2變為4,發送方此時可連續發送4個報文段,接收方收到4個報文段后,給發送方依次回復4個確認報文,
發送方收到確認報文后,將擁塞窗口加4,置為8,發送方此時可以連續發送8個數據報文段,接收方收到該8個數據報文段后,給發送方一次發回8個確認報文段,發送方收到這8個確認報文后,將擁塞窗口的值加8變為16,

當前的擁塞窗口cwnd的值已經等於慢開始門限值,之后改用擁塞避免算法。

擁塞避免:
也就是每個傳輸輪次,擁塞窗口cwnd只能線性加一,而不是像慢開始算法時,每個傳輸輪次,擁塞窗口cwnd按指數增長。同理,16+1……直至到達24,假設24個報文段在傳輸過程中丟失4個,接收方只收到20個報文段,給發送方依次回復20個確認報文段,一段時間后,丟失的4個報文段的重傳計時器超時了,發送發判斷可能出現擁塞,更改cwnd和ssthresh.並重新開始慢開始算法,如圖所示:

 

 

 

 

快速重傳:
發送方發送1號數據報文段,接收方收到1號報文段后給發送方發回對1號報文段的確認,在1號報文段到達發送方之前,發送方還可以將發送窗口內的2號數據報文段發送出去,接收方收到2號報文段后給發送方發回對2號報文段的確認,在2號報文段到達發送方之前,發送方還可以將發送窗口內的3號數據報文段發送出去,

假設該報文丟失,發送方便不會發送針對該報文的確認報文給發送方,發送方還可以將發送窗口內的4號數據報文段發送出去,接收方收到后,發現這不是按序到達的報文段,因此給發送方發送針對2號報文段的重復確認,表明我現在希望收到的是3號報文段,
但是我沒有收到3號報文段,而收到了未按序到達的報文段,發送方還可以將發送窗口中的5號報文段發送出去,接收方收到后,發現這不是按序到達的報文段,因此給發送方發送針對2號報文段的重復確認,表明我現在希望收到的是3號報文段,但是我沒有收
到3號報文段,而收到了未按序到達的報文段,,發送方還可以將發送窗口內的最后一個數據段即6號數據報文段發送出去,接收方收到后,發現這不是按序到達的報文段,因此給發送方發送針對2號報文段的重復確認,表明我現在希望收到的是3號報文段,但
是我沒有收到3號報文段,而收到了未按序到達的報文段,

此時,發送方收到了累計3個連續的針對2號報文段的重復確認,立即重傳3號報文段,接收方收到后,給發送方發回針對6號報文的確認,表明,序號到6為至的報文都收到了,這樣就不會造成發送方對3號報文的超時重傳,而是提早收到了重傳。

 

 

 

————————————————
原文鏈接:https://blog.csdn.net/qq_41431406/article/details/97926927


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM