TCP中的流量控制和擁塞控制

皮皮甜一定要會(huì)降龍十八掌,這樣走遍天下就無(wú)敵手


流量控制和擁塞控制都是為了保證TCP的可靠傳輸?shù)摹?br> 區(qū)別:
(一)流量控制:
控制發(fā)送方發(fā)送的數(shù)據(jù)速度小于接受法接受數(shù)據(jù)的速度
目的:防止因?yàn)榻邮辗絹?lái)不及接收數(shù)據(jù)造成數(shù)據(jù)丟失
發(fā)送方如何知道接收方的接受窗口大?。寒?dāng)接收方收到發(fā)送方的數(shù)據(jù)以后,會(huì)發(fā)送一個(gè)ACK,接受方會(huì)將控制窗口(cwnd)的大小寫(xiě)在ACK里面
如何做到流量控制:每次接收方發(fā)送回的ACK都會(huì)返回最新控制窗口的大小,當(dāng)cwnd的大小為0時(shí),發(fā)送方將不能在發(fā)送數(shù)據(jù)了

擁塞控制:避免過(guò)多數(shù)據(jù)注入到網(wǎng)絡(luò)中
如何控制:
1)慢開(kāi)始算法+擁塞避免算法
實(shí)現(xiàn)思路:
發(fā)送方維護(hù)一個(gè)叫做擁塞窗口的變量,只要網(wǎng)絡(luò)沒(méi)有出現(xiàn)擁塞,擁塞窗口就再增大一些,以便把更多的數(shù)據(jù)發(fā)送出去。但只要網(wǎng)絡(luò)出現(xiàn)擁塞,擁塞窗口就減小一些,以減少注入到網(wǎng)絡(luò)中的數(shù)據(jù)。
慢開(kāi)始:開(kāi)始發(fā)送數(shù)據(jù)時(shí),并不清楚網(wǎng)絡(luò)的負(fù)荷情況,會(huì)先設(shè)置擁塞窗口的大小為1,當(dāng)收到接收方的確認(rèn)后,會(huì)將擁塞窗口設(shè)置為2,繼而4個(gè),8個(gè)以此指數(shù)類(lèi)推。
PayAttention:慢開(kāi)始的“慢”并不是指擁塞窗口的增長(zhǎng)速率慢,而是指在TCP開(kāi)始發(fā)送報(bào)文時(shí)先設(shè)置擁塞窗口=1。
擁塞避免:擁塞窗口緩慢地增大,每次收到接收方發(fā)送的ACK以后擁塞窗口增長(zhǎng)1,而不是爆炸式增長(zhǎng)
一個(gè)典型例子,放大招上圖:

擁塞控制-1.jpg

這種模式的擁塞控制都會(huì)設(shè)置一個(gè)門(mén)限(ssthresh),為了防止擁塞窗口(cwnd)增長(zhǎng)過(guò)快,這里為16。
a)當(dāng) cwnd < ssthresh 時(shí),使用上述的慢開(kāi)始算法
b)當(dāng) cwnd > ssthresh 時(shí),停止使用慢開(kāi)始算法而改用擁塞避免算法
c)當(dāng) cwnd = ssthresh 時(shí),既可使用慢開(kāi)始算法,也可使用擁塞控制避免算法

無(wú)論在慢開(kāi)始階段還是在擁塞避免階段,只要發(fā)送方?jīng)]有收到ACK,就認(rèn)為這時(shí)候擁塞了,就要把慢開(kāi)始門(mén)限ssthresh設(shè)置為此時(shí)發(fā)送方窗口值的一半(上例中是把發(fā)送方窗口值24修改為12)。然后把擁塞窗口cwnd重新設(shè)置為1,執(zhí)行慢開(kāi)始算法。

2)快重傳+快恢復(fù)
快重傳:如果發(fā)送端接收到3個(gè)以上重復(fù)ACK,不需要等到重傳定時(shí)器溢出就重新傳遞,所以叫做快重傳,而快重傳以后,因?yàn)樽叩牟皇锹龁?dòng)而是擁塞避免算法,所以又叫做快速恢復(fù)算法
如果沒(méi)有快速重傳和快速恢復(fù),TCP將會(huì)使用定時(shí)器來(lái)要求傳輸暫停。在暫停這段時(shí)間內(nèi),沒(méi)有新的數(shù)據(jù)包被發(fā)送。所以快速重傳和快速恢復(fù)旨在快速恢復(fù)丟失的數(shù)據(jù)包

迷惑.jpg

文字真是蒼白無(wú)力,需要生動(dòng)的圖片詳解

快重傳.jpg

接收方發(fā)現(xiàn)M3丟失,立即發(fā)送對(duì)M2的重復(fù)確認(rèn)。一旦發(fā)送方一連收到三個(gè)M2的重復(fù)確認(rèn)就應(yīng)當(dāng)立即重傳M3,也就是發(fā)送方收到第四個(gè)對(duì)M2的確認(rèn)時(shí)


擁塞控制-2.jpg

a)當(dāng)發(fā)送方在cwnd=24時(shí)連續(xù)收到三個(gè)重復(fù)確認(rèn),就把慢開(kāi)始門(mén)限ssthresh減半(就是上圖中的24修改為12)。
b)快恢復(fù):把cwnd值設(shè)置為門(mén)限ssthresh減半后的數(shù)值(即12),然后開(kāi)始執(zhí)行的是擁塞避免算法,使擁塞窗口緩慢地線(xiàn)性增大
快恢復(fù)就是擁塞窗口不會(huì)從1開(kāi)始而是從門(mén)限的二分之一處開(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)容

  • 運(yùn)輸層協(xié)議概述 從通信和信息處理的角度看,運(yùn)輸層向它上面的應(yīng)用層提供通信服務(wù),它屬于面向通信部分的最高層,同時(shí)也是...
    srtianxia閱讀 2,762評(píng)論 0 2
  • TCP/IP協(xié)議 作者:xinyuans 本文為參考TCP/IP詳解卷一,某些知識(shí)點(diǎn)加上了作者自己的理解,如有錯(cuò)誤...
    xinyuans閱讀 1,016評(píng)論 0 1
  • 本篇文章主要是從運(yùn)輸層協(xié)議概述、UDP、TCP、可靠傳輸?shù)墓ぷ髟怼CP首部格式、TCP可靠傳輸?shù)膶?shí)現(xiàn)、TCP流...
    SeanMa閱讀 4,207評(píng)論 2 13
  • 前言 這篇文章是整個(gè)讀書(shū)總結(jié)系列的最后一篇,有關(guān)TCP我想總結(jié)的內(nèi)容都會(huì)在這篇文章結(jié)束。當(dāng)然這并不是TCP的全部,...
    Noskthing閱讀 2,231評(píng)論 1 27
  • 六、TCP可靠傳輸?shù)膶?shí)現(xiàn) 首先介紹以字節(jié)為單位的滑動(dòng)窗口。為了講述可靠傳輸原理的方便,假定數(shù)據(jù)傳輸只在一個(gè)方向進(jìn)行...
    dmmy大印閱讀 2,186評(píng)論 0 1

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