TCP-IP之滑動窗口

前言

TCP在OSI七層模型中,屬於第四層(傳輸層),幫咱們處理了傳輸層的細節。包括限流、丟包、網絡傳輸亂序等問題。那TCP究竟是如何實現限流的呢?算法

若是你須要複習一下基礎知識,請戳這裏《TCP/IP基礎十分鐘入門》 ,博主比較懶,下週補上網絡

接收端緩衝區被塞滿

若是sender發送速度快,reciever處理速度慢。會發生什麼事? ide

過一段時間,reciever的緩衝區被打滿。動畫

  • 當reciever緩衝區被打滿後,經過ack(win=0)告訴sender不要給我發送數據了,我處理不了了。
  • sender就會中止發送數據。
  • 過一會,reciever處理數據後,緩衝區有了空閒空間。
  • 經過ack聲明本身的窗口大小
  • sender繼續發送數據

滑動窗口出場

TCP-IP之滑動窗口
經過動畫咱們能夠直觀的看到窗口向右滑動,因此叫作滑動窗口。blog

分解動做

滑動前

TCP-IP之滑動窗口
圖示都包含哪些信息呢?咱們分解來看。ci

  • 接收端的窗口大小爲6
  • 窗口外,左側爲已經發送且已經收到ack,這部分數據能夠丟棄了。
  • 12-14爲已經發送,但未收到ack。(不能丟棄,有可能須要重發)
  • 15-17爲未發送數據,因爲未確認數據小於6,因此能夠很快發送
  • 窗口外,右側爲未發送數據,但因爲窗口已滿,不能發送

滑動後

TCP-IP之滑動窗口

  • sender收到ack=12的確認包
  • 窗口向右滑動
  • 窗口內的數據改成13-18

    總結

    以上就是TCP/IP中的滑動窗口。
    滑動窗口也是服務限流的一種算法。it

    其餘

    有些同窗可能會問,若是首先收到ack=13的確認包,滑動窗口是什麼樣的呢?咱們直接上圖吧!
    TCP-IP之滑動窗口入門

相關文章
相關標籤/搜索