TCP 的滑動窗口

滑動窗口

在這裏插入圖片描述

  • 在3次握手創建鏈接的時候,就是進行一個重要的工作就是窗口的確認。也就是發送端與接收端要確認發送數據的窗口有多大,或者說緩衝區有多大,實際窗口就是一個緩衝區對於發送端來說比如緩衝區大小是32k,接收端的是16k,這時就要統一成一樣的緩存區大小。取兩者之間最小的那個。這個就是窗口。
  • 所謂滑動窗口,就是這個窗口可以動,就是發送端在發數據的時候,有一個非常大的緩衝區,但是接收端的窗口就那麼大比如16k。
  • 以上發送端發送完16k的數據後,這個窗口就往後滑一下。不斷往後滑,實際的情況和我們上面的圖是一模一樣的,每一個小格就是一個緩存區,滑動窗口我們這裏是4格數據段,每個段假設是1000字節。一共是4個段就是4000字節的數據,那麼對於這個4000字節的緩衝區大小,發送端是一次性發送4000個字節的數據,發送出去之後呢,對方都接收到了之後呢,滑動窗口就可以往後滑了。當我們發送了4個數據包給對方,對方就會給我們回已經收到多少,一般是有一個定時機制,每隔一段實際就會發送一個確認,並不是沒發一個報文就回一個,可能是發送4個只回一個,也有可能先回2個再回2個。只要對方確認收到了,滑動窗口就可以往後滑。那麼之前發送的那兩個數據,就是已經發送了但是還沒有收到確認報文。之後沒有收到確認報文就絕對不能往後滑。因爲如果數據丟失了,那麼還需要再次發送。如果只收到2個確認報文的話,可以再次發送2個報文。
  • 如果4個報文全部收到了,就整體滑過去了。然後再發送4個。就這樣循環往復的發送數據。高效利用帶寬。如果是發送一個確認一個那麼就浪費了大量的帶寬。
  • 有了滑動動窗口那麼ack機制就會有變化,就是 delay ac
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章