擁塞控制的基本方法

計(jì)算機(jī)網(wǎng)絡(luò)系列文章匯總

介紹

在某段時(shí)間內(nèi),若對(duì)網(wǎng)絡(luò)中某一資源的需求超過(guò)了該資源所能提供的可用部分,網(wǎng)絡(luò)性能就要變壞,這種情況就叫做擁塞。

可以通過(guò)擁塞控制方法來(lái)進(jìn)行控制,控制的是發(fā)送窗口的大小,也就是一次性可以發(fā)送多少字節(jié),如果趨向于擁塞,就少發(fā)送,如果不發(fā)生擁塞,就多發(fā)送。

擁塞的危害:
若出現(xiàn)擁塞而不進(jìn)行控制,整個(gè)網(wǎng)絡(luò)的吞吐量將隨輸入負(fù)荷的增大而下降

擁塞的危害.png

擁塞控制

準(zhǔn)備條件

原理:
根本原理是當(dāng)擁塞發(fā)生時(shí)就將發(fā)送窗口減小,當(dāng)沒(méi)有發(fā)生擁塞時(shí)就將發(fā)送窗口增大,而是否發(fā)生擁塞是通過(guò)是否發(fā)送超時(shí)重傳決定的。

假定條件:

  • 數(shù)據(jù)是單方向傳送,而另一個(gè)方向只傳送確認(rèn)。
  • 接收方總是有足夠大的緩存空間,因而發(fā)送方發(fā)送窗口的大小由網(wǎng)絡(luò)的擁塞程度來(lái)決定的,避免接收方所決定的發(fā)送窗口干擾。
  • 以最大報(bào)文段MSS的個(gè)數(shù)為討論問(wèn)題的單位,而不是以字節(jié)為單位

概念:

  • cwnd為擁塞窗口: 也就是此時(shí)的發(fā)送窗口
    • 在慢開(kāi)始算法時(shí)呈指數(shù)增長(zhǎng)
    • 擁塞避免算法時(shí)+1線性增長(zhǎng)
  • 慢開(kāi)始門限ssthresh:
    • cwnd>ssthresh時(shí),進(jìn)行慢開(kāi)始算法
    • cwnd<ssthresh時(shí),開(kāi)始擁塞避免算法
    • cwnd==ssthresh時(shí),都可以
  • swnd發(fā)送窗口:
    • 在這個(gè)場(chǎng)景中就固定=cwnd

算法認(rèn)識(shí)

慢開(kāi)始算法(slow-start)

慢開(kāi)始算法.png

說(shuō)明:

  • 可以看到慢開(kāi)始門限設(shè)置為16,cwnd在到達(dá)16前需要指數(shù)增長(zhǎng)
  • 當(dāng)傳輸輪次為0時(shí),起始位置為1
  • cwnd = 2^(n-1),n為傳輸輪次

擁塞避免算法

擁塞避免算法.png

說(shuō)明:

  • 思路:讓擁塞窗口 cwnd 緩慢地增大,避免快速出現(xiàn)擁塞。
  • 每經(jīng)過(guò)一個(gè)傳輸輪次,擁塞窗口 cwnd = cwnd + 1。

快重傳

有個(gè)別報(bào)文段在網(wǎng)絡(luò)中丟失,但是實(shí)際上網(wǎng)絡(luò)并未發(fā)生擁塞,此時(shí)的發(fā)送方超時(shí)重傳會(huì)導(dǎo)致網(wǎng)絡(luò)誤以為發(fā)生了擁塞并啟動(dòng)擁塞控制算法,這樣就降低了發(fā)送效率。因此需要采用快重傳。

原理: 快重傳算法的根本原理就是讓發(fā)送方盡早知道發(fā)生了個(gè)別報(bào)文段的丟失,而不需要啟動(dòng)超時(shí)重傳機(jī)制

作用: 提高了傳輸效率,快重傳可以使整個(gè)網(wǎng)絡(luò)的吞吐量提高約20%

快重傳.png

說(shuō)明:

  • 要求接收方不要等待自己發(fā)送數(shù)據(jù)時(shí)才進(jìn)行捎帶確認(rèn),而是要立即發(fā)送確認(rèn)
  • 即使受到了失序的報(bào)文段也要立即發(fā)出對(duì)已收到的報(bào)文段的重復(fù)確認(rèn)
  • 發(fā)送方一旦受到3個(gè)連續(xù)的重復(fù)確認(rèn),就將相應(yīng)的報(bào)文段立即重傳
    • 這樣就不需要等到超時(shí)機(jī)制觸發(fā)后進(jìn)行重傳
    • 也就不會(huì)進(jìn)行擁塞控制了

快恢復(fù)

在快重傳后如何進(jìn)行擁塞窗口的控制呢?
發(fā)送方一旦受到3個(gè)重復(fù)確認(rèn)報(bào)文,就知道現(xiàn)在只是丟失了個(gè)別的報(bào)文段,而不是發(fā)生了擁塞,所以就啟動(dòng)快恢復(fù)算法。

算法過(guò)程:

  • 發(fā)送方將慢開(kāi)始門限ssthresh值和擁塞窗口cwnd值調(diào)整為當(dāng)前窗口的一半
  • 并開(kāi)始執(zhí)行擁塞避免算法

擁塞控制的過(guò)程

擁塞控制有兩種,一種是超時(shí)重傳后進(jìn)入到慢開(kāi)始階段,一種是收到3個(gè)重復(fù)確認(rèn)報(bào)文后開(kāi)始的快恢復(fù)階段。

超時(shí)重傳

超時(shí)重傳.png
快恢復(fù)的控制
快恢復(fù)的控制.png

過(guò)程說(shuō)明:
1、首先進(jìn)行慢開(kāi)始算法,cwnd指數(shù)增長(zhǎng)
2、一直增長(zhǎng)到cwnd>=ssthreesh,也就是達(dá)到了慢開(kāi)始門限閾值,開(kāi)始進(jìn)行擁塞避免算法
3、擁塞避免算法是cwnd+1
4、當(dāng)發(fā)生超時(shí)重傳時(shí),cwnd=1,ssthresh = cwnd/2 = 12
5、此時(shí)繼續(xù)進(jìn)行慢開(kāi)始算法,指數(shù)增長(zhǎng)
6、cwnd達(dá)到12后開(kāi)始擁塞避免算法,cwnd = cwnd+1
7、當(dāng)cwnd = 16時(shí),收到3個(gè)重復(fù)確認(rèn),此時(shí)就需要進(jìn)行快重傳
8、快重傳就是ssthresh = cwnd/2 = 16/2 = 8,而cwnd = ssthresh
9、在這個(gè)基礎(chǔ)上繼續(xù)開(kāi)始快恢復(fù)。這里的快恢復(fù)直接就開(kāi)始了擁塞避免算法

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容