TCP協議中的窗口機制------滑動窗口詳解(轉)


原文鏈接:https://blog.csdn.net/ShWe_yayaya/article/details/81433631

另一篇比較好的:https://blog.csdn.net/m0_37962600/article/details/79951780

在介紹滑動窗口之前先來簡單介紹一下TCP可靠傳輸原理中的停止等待協議,該協議就是發送方每發送一個報文段后就停止發送,一直等收到接收方的確認后再發送下一個報文段。

 

TCP通信是全雙工的,這里為了方便理解,就以一個方向為例,假設A為發送方,B為接收方。A會有一個發送窗口,B有一個接收窗口。

發送窗口表示在沒有收到B確認的情況下,A也可以連續把發送窗口的數據發送出去。但是已經發送過的數據在未收到確認之前,它還需要暫時保留,以便於超時重傳時使用。發送窗口越大,它就可以在收到對方確認之前發送更多的數據,因而獲得更高的傳輸效率。(但是A的發送窗口的值不能超過B的接收窗口的大小,還會受到網絡擁塞程度的影響)。

發送窗口的位置由窗口前沿和后沿的位置共同確定。

它后沿變化有兩種,(1)不動(沒有收到新的確定)(2)前移(收到新的確認);

前沿是不斷向前移動的,但也可能不動(1)沒有收到新確認,對方窗口也不變,(2)收到新的確認,對方的接收窗口縮小了,使前沿正好不變)

 

 

P3-P1:A的發送窗口

P2-P1:已發送但是沒有收到確定

P3-P2:允許發送但是未發送(可用窗口)

接收方B只對按序到達的數據中最高序號給出確認。

 

此外發送方和接收方都有自己的緩沖區

 

 

發送緩沖區存放:

1、發送發TCP准備發送的數據

2、TCP已發送但尚未收到確認的數據(為超時重傳准備)

接收緩沖區存放:

1、按序到達但未被應用程序讀取的數據

2、未按序到達的數據

滑動窗口的3種協議

1、1比特滑動窗口協議(發送窗口=1,接收窗口=1)

當發送窗口和接收窗口大小都為1時,滑動窗口協議退化成停止等待協議,因為發送方需要判斷每個發送的幀是新發送的幀還是超時重傳的幀,故給每個幀前都加一個序號,由於停止等待協議中只有當一個幀發送確認后才能發送下一個,所以用1個比特來編號即可。

 

 

2、后退n協議(發送窗口>1,接收窗口>1)

由於停等協議要為每一個幀進行確認后才繼續發送下一幀,大大降低了信道利用率,因此又提出了后退n協議。后退n協議中,發送方在發完一個數據幀后,不停下來等待應答幀,而是連續發送若干個數據幀,即使在連續發送過程中收到了接收方發來的應答幀,也可以繼續發送。且發送方在每發送完一個數據幀時都要設置超時定時器。只要在所設置的超時時間內仍收到確認幀,就要重發相應的數據幀。如:當發送方發送了N個幀后,若發現該N幀的前一個幀在計時器超時后仍未返回其確認信息,則該幀被判為出錯或丟失,此時發送方就不得不重新發送出錯幀及其后的N幀。缺點也很明顯,就是重發出錯的幀和之后的即使沒出錯的幀。

 

3、選擇重傳協議(發送窗口>1,接收窗口>1)

當接收方發現某個幀出錯后(可能未按序到達),它將后面到達的正確的幀放入接收緩沖區中,同時要求發送方重傳出錯的幀(對按序到達的最大序號進行確認,當發送方收到重復確認了就知道出錯了),當重傳的幀到達后,將緩沖區中按序一並發送給高層

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM