面試連環炮系列(二十):TCP的滑動窗口協議是什麼

  1. TCP的滑動窗口協議是什麼
    滑動窗口協議,用於網絡數據傳輸時的流量控制,以免擁塞的發生。該協議容許發送方在中止並等待確認前發送多個數據分組。因爲發送方沒必要每發一個分組就停下來等待確認,所以該協議能夠加速數據的傳輸,提升網絡吞吐量。它本質上是描述接收方的TCO數據報緩衝區大小的數據,發送方根據這個數據來計算本身最多能發送多長的數據。這個窗口大小爲0時,發送方將中止發送數據。啓動定時器,等待這個窗口變成非0。
      滑動窗口協議必須保證數據包的按序傳輸,發送窗口中的序列號表明已發送但還沒有收到確認的數據包,發送窗口可持續地維持一系列未經確認的數據包,由於發送方窗口內的數據包可能在傳輸過程當中丟失或損壞,因此發送過程必須把發送窗口中的全部數據包保存起來以備重傳。發送窗口一旦達到最大值,發送過程就必須中止接收新的數據包,直到有空閒緩存區。接收窗口外的數據包都要丟棄,當序列號等於接收窗口下限的數據包到達時,把它提交給應用程序並向發送端發送確認,接收窗口向前移動一位。發送窗口和接收窗口上下限無需相同,大小也無需相同,但接收窗口大小需保持固定,發送窗口大小可隨着數據包而改變。緩存

  2. 滑動窗口的大小會變化嗎
    TCP是雙工的協議,會話的雙方均可以同時接收、發送數據。TCP會話的雙方都各自維護一個發送窗口和一個接收窗口,各自的接收窗口大小取決於應用、系統、硬件的限制。當鏈路變好或者變差,這個窗口會發生變化。網絡

  3. 這個協議什麼狀況下會死鎖,怎麼解決死鎖
    當接收端向發送端發送零窗口報文段後不久,接收端的接收緩存又有了一些存儲空間,因而接收端向發送端發送了Windows size = 2的報文段,然而這個報文段在傳輸過程當中丟失了。發送端一直等待收到接收端發送的非零窗口的通知,而接收端一直等待發送端發送數據,這樣就死鎖了。
      解決死鎖的方法是:TCP爲每一個鏈接設有一個持續計時器。只要TCP鏈接的一方收到對方的零窗口通知,就啓動持續計時器,若持續計時器設置的時間到期,就發送一個零窗口探測報文段(僅攜帶1字節的數據),而對方就在確認這個探測報文段時給出瞭如今的窗口值。.net

參考(摘抄的文字版權屬於原做者):

https://blog.csdn.net/m0_37962600/article/details/79951780
https://baike.baidu.com/item/%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E5%8D%8F%E8%AE%AE/10291557?fr=aladdin
https://www.jianshu.com/p/07bd39becbfdblog

相關文章
相關標籤/搜索