皮皮甜一定要會(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è)典型例子,放大招上圖:

這種模式的擁塞控制都會(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ù)包

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

接收方發(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í)

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)始使用擁塞避免算法