Tcp的慢開始和擁塞避免
1、發(fā)送端主機(jī)在確認(rèn)發(fā)送報(bào)文段的速率時(shí),既要根據(jù)接收端的接收能力,又要從全局考慮不要使網(wǎng)絡(luò)發(fā)生擁塞。
2、因此,每一個(gè)tcp連接需要有以下兩個(gè)狀態(tài)變量:a、接收端窗口。b、擁塞窗口。
3、接收端窗口:是接收端根據(jù)其目前的接收緩存大小所許諾的最新窗口值,是來(lái)自接收端的流量控制。接收端將此窗口值放在TCP報(bào)文的首部中的窗口字段,傳給發(fā)送端。
4、擁塞窗口:是發(fā)送端根據(jù)自己估計(jì)的網(wǎng)絡(luò)擁塞程度而設(shè)置的窗口值,是來(lái)自發(fā)送端的流量控制。
5、發(fā)送端的發(fā)送窗口的上限值取自接收端窗口和擁塞窗口兩者中較小的一個(gè)。
慢開始算法原理
1、在主機(jī)剛剛開始發(fā)送報(bào)文段時(shí),可先把擁塞窗口的值設(shè)置為一個(gè)最大報(bào)文段的MSS的數(shù)值。
2、在每收到一個(gè)對(duì)新的報(bào)文段的確認(rèn)后,將擁塞窗口增加至多一個(gè)最大報(bào)文段MSS的數(shù)值。
3、用這種方法逐步增大發(fā)送端的擁塞窗口,這可以使分組注入到網(wǎng)絡(luò)的速率更加合理。
慢開始階段和擁塞避免階段
1、當(dāng)TCP連接進(jìn)行初始化時(shí),將擁塞窗口置為1。慢開始的門限值ssthresh初始值設(shè)置為16 。
2、發(fā)送端的發(fā)送窗口不能超過(guò)擁塞窗口和接收窗口中的最小值。假定接收端窗口值足夠大,那么發(fā)送窗口的值就等于擁塞窗口的數(shù)值。
3、在執(zhí)行慢開始算法時(shí),擁塞窗口初始值為1 。 發(fā)送第一個(gè)報(bào)文段M0 。 在發(fā)送端收到ACK(接收端確認(rèn)收到M0,期望收到M1)后,擁塞窗口增大到2,發(fā)送端連續(xù)發(fā)送M1和M2兩個(gè)報(bào)文,這樣擁塞窗口成指數(shù)增長(zhǎng),報(bào)文發(fā)送量同時(shí)增長(zhǎng)。直至達(dá)到慢開始的門限值ssthresh。然后進(jìn)入擁塞避免階段。此時(shí),改為擁塞窗口按線性規(guī)律增長(zhǎng)。
4、當(dāng)擁塞窗口增大到一定程度時(shí),發(fā)生超時(shí)(擁塞)時(shí),更新門限值ssthresh變?yōu)槌瑫r(shí)時(shí)的0.5 并執(zhí)行慢開始算法。

擁塞避免算法
1、乘法減小
a、“乘法減小”指不論在慢開始階段還是擁塞避免階段,只要出現(xiàn)一次超時(shí)(即網(wǎng)絡(luò)擁塞),就把慢開始門限值ssthresh設(shè)置為當(dāng)前擁塞窗口值乘以0.5。
b、當(dāng)網(wǎng)絡(luò)頻繁出現(xiàn)擁塞時(shí),ssthresh值就下降的很快,以大大減少注入到網(wǎng)絡(luò)中的分組數(shù)。
2、加法增大
“加法增大”是指執(zhí)行擁塞避免算法后,當(dāng)收到對(duì)所有報(bào)文段的確認(rèn)就將擁塞窗口增加一個(gè)報(bào)文MSS大小,是擁塞窗口緩慢增大,以防止網(wǎng)絡(luò)過(guò)早出現(xiàn)擁塞。
“擁塞避免”并非指能完全避免擁塞。只能控制擁塞窗口按線性增長(zhǎng)規(guī)律,使網(wǎng)絡(luò)比較不容易出現(xiàn)擁塞。