天天看點

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

  1. TCP的滑動視窗協定是什麼

    滑動視窗協定,用于網絡資料傳輸時的流量控制,以避免擁塞的發生。該協定允許發送方在停止并等待确認前發送多個資料分組。由于發送方不必每發一個分組就停下來等待确認,是以該協定可以加速資料的傳輸,提高網絡吞吐量。它本質上是描述接收方的TCO資料報緩沖區大小的資料,發送方根據這個資料來計算自己最多能發送多長的資料。這個視窗大小為0時,發送方将停止發送資料。啟動定時器,等待這個視窗變成非0。

      滑動視窗協定必須保證資料包的按序傳輸,發送視窗中的序列号代表已發送但尚未收到确認的資料包,發送視窗可持續地維持一系列未經确認的資料包,因為發送方視窗内的資料包可能在傳輸過程中丢失或損壞,是以發送過程必須把發送視窗中的所有資料包儲存起來以備重傳。發送視窗一旦達到最大值,發送過程就必須停止接收新的資料包,直到有空閑緩存區。接收視窗外的資料包都要丢棄,當序列号等于接收視窗下限的資料包到達時,把它送出給應用程式并向發送端發送确認,接收視窗向前移動一位。發送視窗和接收視窗上下限無需相同,大小也無需相同,但接收視窗大小需保持固定,發送視窗大小可随着資料包而改變。

  2. 滑動視窗的大小會變化嗎

    TCP是雙工的協定,會話的雙方都可以同時接收、發送資料。TCP會話的雙方都各自維護一個發送視窗和一個接收視窗,各自的接收視窗大小取決于應用、系統、硬體的限制。當鍊路變好或者變差,這個視窗會發生變化。

  3. 這個協定什麼情況下會死鎖,怎麼解決死鎖

    當接收端向發送端發送零視窗封包段後不久,接收端的接收緩存又有了一些存儲空間,于是接收端向發送端發送了Windows size = 2的封包段,然而這個封包段在傳輸過程中丢失了。發送端一直等待收到接收端發送的非零視窗的通知,而接收端一直等待發送端發送資料,這樣就死鎖了。

      解決死鎖的方法是:TCP為每個連接配接設有一個持續計時器。隻要TCP連接配接的一方收到對方的零視窗通知,就啟動持續計時器,若持續計時器設定的時間到期,就發送一個零視窗探測封包段(僅攜帶1位元組的資料),而對方就在确認這個探測封包段時給出了現在的視窗值。

參考(摘抄的文字版權屬于原作者):

https://blog.csdn.net/m0_37962600/article/details/79951780

https://baike.baidu.com/item/滑動視窗協定/10291557?fr=aladdin

https://www.jianshu.com/p/07bd39becbfd

作者:編碼磚家

公衆号:編碼磚家

出處:https://www.cnblogs.com/xiaoyangjia/

本文版權歸作者和部落格園共有,任何人或團體、機構全部轉載或者部分轉載、摘錄,請在文章明顯位置注明作者和原文連結。

繼續閱讀