滑動窗口協(xié)議如何實現(xiàn)流量控制

一、關(guān)于滑動窗口
1、什么是滑動窗口
滑動窗口是類似于窗口一樣的東西,用來告訴發(fā)送端一次可以發(fā)送數(shù)據(jù)的大小。即窗口標(biāo)記了接收端緩存區(qū)的大小;
2、滑動窗口出現(xiàn)的原因
(1)對每一個發(fā)送的數(shù)據(jù)段,都要給一個ACK確認(rèn)應(yīng)答,收到ACK后發(fā)送下一個數(shù)據(jù)段。這樣做大大降低了傳遞效率。
(2)使用滑動窗口,可以一次發(fā)送多條數(shù)據(jù),提高性能。
3、滑動窗口的一些知識點
(1)接收端將自己緩沖區(qū)大小放進TCP頭部的“窗口大小”字段,通過ACK告知發(fā)送端;
(2)窗口大小是指無需等待確認(rèn)應(yīng)答而可以一次連續(xù)發(fā)送數(shù)據(jù)的最大值;
(3)操作系統(tǒng)內(nèi)核為了維護滑動窗口,需開辟發(fā)送緩沖區(qū),來記錄哪些數(shù)據(jù)還沒有被應(yīng)答,只有確認(rèn)應(yīng)答后才從緩沖區(qū)刪除;
(4)接收端發(fā)現(xiàn)自己緩存區(qū)快滿了,將窗口大小設(shè)置更小發(fā)送給發(fā)送端,發(fā)送端收到后就會減慢發(fā)送速度;
(5)接收端發(fā)現(xiàn)自己緩沖區(qū)滿了,將窗口大小設(shè)置為0,此時發(fā)送端停止發(fā)送數(shù)據(jù),而是定期發(fā)送一個窗口探測數(shù)據(jù)段,讓接收端告訴它的窗口大小;
二、關(guān)于流量控制
1、什么是流量控制
流量控制的目標(biāo)是接收端,防止發(fā)送方發(fā)的太快,耗盡接收方資源,使接收方來不及處理;
流量控制的機制是丟包。
2、通過滑動窗口實現(xiàn)流量控制
通過設(shè)置滑動窗口大小,用ACK告知發(fā)送端自己緩存區(qū)還有多大,讓發(fā)送端以合適的速度發(fā)送數(shù)據(jù)
三、關(guān)于擁塞控制
1、什么是擁塞控制
防止發(fā)送方發(fā)的太快,使網(wǎng)絡(luò)來不及處理,導(dǎo)致網(wǎng)絡(luò)擁塞。
2、擁塞控制出現(xiàn)的原因
流量控制雖然可以高效的傳遞大量數(shù)據(jù),但是如果剛開始階段就發(fā)送大量數(shù)據(jù),可能導(dǎo)致網(wǎng)絡(luò)擁塞
3、擁塞控制實現(xiàn)的機制
(1)慢啟動
(2)加法增加:執(zhí)行擁塞控制算法后,在收到對報文的確認(rèn)后,就把擁塞窗口cwnd增加一個MSS大小,使擁塞窗口緩慢增大,防止網(wǎng)絡(luò)過早出現(xiàn)擁塞;
(3)乘法減少:出現(xiàn)一次超時(網(wǎng)絡(luò)擁塞)就把慢開始門限值ssthresh設(shè)置為當(dāng)前擁塞窗口值的0.5倍。
4、發(fā)送端如何判斷網(wǎng)絡(luò)出現(xiàn)擁塞(丟包)
(1)定時器超時(沒有在規(guī)定時間內(nèi)收到某個發(fā)出去的包ACK)
(2)收到三個重復(fù)的ACK
