前言
TCP在OSI七層模型中,屬于第四層(傳輸層)报咳,幫我們處理了傳輸層的細(xì)節(jié)侠讯。包括限流、丟包暑刃、網(wǎng)絡(luò)傳輸亂序等問題厢漩。那TCP到底是如何實(shí)現(xiàn)限流的呢?
如果你需要復(fù)習(xí)一下基礎(chǔ)知識(shí)岩臣,請(qǐng)戳這里《TCP/IP基礎(chǔ)十分鐘入門》 溜嗜,博主比較懶,下周補(bǔ)上
接收端緩沖區(qū)被塞滿
如果sender發(fā)送速度快架谎,reciever處理速度慢炸宵。會(huì)發(fā)生什么事?
過一段時(shí)間谷扣,reciever的緩沖區(qū)被打滿土全。
當(dāng)reciever緩沖區(qū)被打滿后,通過ack(win=0)告訴sender不要給我發(fā)送數(shù)據(jù)了,我處理不了了裹匙。
sender就會(huì)停止發(fā)送數(shù)據(jù)野哭。
過一會(huì),reciever處理數(shù)據(jù)后幻件,緩沖區(qū)有了空閑空間。
通過ack聲明自己的窗口大小
sender繼續(xù)發(fā)送數(shù)據(jù)
滑動(dòng)窗口出場(chǎng)
通過動(dòng)畫我們可以直觀的看到窗口向右滑動(dòng)蛔溃,所以叫做滑動(dòng)窗口绰沥。
分解動(dòng)作
滑動(dòng)前
圖示都包含哪些信息呢?我們分解來看贺待。
接收端的窗口大小為6
窗口外徽曲,左側(cè)為已經(jīng)發(fā)送且已經(jīng)收到ack,這部分?jǐn)?shù)據(jù)可以丟棄了。
12-14為已經(jīng)發(fā)送麸塞,但未收到ack秃臣。(不能丟棄,有可能需要重發(fā))
15-17為未發(fā)送數(shù)據(jù)哪工,由于未確認(rèn)數(shù)據(jù)小于6奥此,所以可以很快發(fā)送
窗口外,右側(cè)為未發(fā)送數(shù)據(jù)雁比,但由于窗口已滿稚虎,不能發(fā)送
滑動(dòng)后
sender收到ack=12的確認(rèn)包
窗口向右滑動(dòng)
窗口內(nèi)的數(shù)據(jù)改為13-18
總結(jié)
以上就是TCP/IP中的滑動(dòng)窗口。
滑動(dòng)窗口也是服務(wù)限流的一種算法偎捎。
其他
有些同學(xué)可能會(huì)問蠢终,如果首先收到ack=13的確認(rèn)包,滑動(dòng)窗口是什么樣的呢茴她?我們直接上圖吧寻拂!