皮皮甜一定要會(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
)的大小寫在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ù)類推。
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è)門限(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)始門限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)始門限ssthresh減半(就是上圖中的24修改為12)胸囱。
b)快恢復(fù):把cwnd值設(shè)置為門限ssthresh減半后的數(shù)值(即12)祷舀,然后開(kāi)始執(zhí)行的是擁塞避免算法,使擁塞窗口緩慢地線性增大
快恢復(fù)就是擁塞窗口不會(huì)從1開(kāi)始而是從門限的二分之一處開(kāi)始使用擁塞避免算法