TCP/IP詳解---滑動視窗機制及其三種協議
在介紹滑動視窗之前先來簡單介紹一下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)
當接收方發現某個幀出錯後(可能未按序到達),它將後面到達的正確的幀放入接收緩衝區中,同時要求傳送方重傳出錯的幀(對按序到達的最大序號進行確認,當傳送方收到重複確認了就知道出錯了),當重傳的幀到達後,將緩衝區中按序一併傳送給高層