1. 程式人生 > >TCP可靠傳輸:校驗和,重傳控制,序號標識,滑動窗口、確認應答

TCP可靠傳輸:校驗和,重傳控制,序號標識,滑動窗口、確認應答

控制 增加 接受 方向 技術分享 一個數 應用程序 text 成了

Tcp通過校驗和,重傳控制,序號標識,滑動窗口、確認應答實現可靠傳輸

應答碼:ACK

TCP的滑動窗口機制
TCP這個協議是網絡中使用的比較廣泛,他是一個面向連接的可靠的傳輸協議。既然是一個可靠的傳輸協議就需要對數據進行確認。TCP協議裏窗口機制有2種:一種是固定的窗口大小;一種是滑動的窗口。這個窗口大小就是我們一次傳輸幾個數據。對所有數據幀按順序賦予編號,發送方在發送過程中始終保持著一個發送窗口,只有落在發送窗口內的幀才允許被發送;同時接收方也維持著一個接收窗口,只有落在接收窗口內的幀才允許接收。這樣通過調整發送方窗口和接收方窗口的大小可以實現流量控制。

TCP滑動窗口技術通過動態改變窗口大小來調節兩臺主機間數據傳輸。每個TCP/IP主機支持全雙工數據傳輸,因此TCP有兩個滑動窗口:一個用於接收數據,另一個用於發送數據。TCP使用肯定確認技術,其確認號指的是下一個所期待的字節。

假定發送方設備以每一次三個數據包的方式發送數據,也就是說,窗口大小為3。發送方發送序列號為1、2、3的三個數據包,接收方設備成功接收數據包,用序列號4確認。發送方設備收到確認,繼續以窗口大小3發送數據。當接收方設備要求降低或者增大網絡流量時,可以對窗口大小進行減小或者增加,本例降低窗口大小為2,每一次發送兩個數據包。當接收方設備要求窗口大小為0,表明接收方已經接收了全部數據,或者接收方應用程序沒有時間讀取數據,要求暫停發送。發送方接收到攜帶窗口號為0的確認,停止這一方向的數據傳輸。

   


我們可以看下面一張圖來分析一下固定窗口大小有什麽問題。
技術分享圖片
這裏我們可以看到假設窗口的大小是1,也是就每次只能發送一個數據只有接受方對這個數據進行確認了以後才能發送第2個數據。我們可以看到發送方每發送一個數據接受方就要給發送方一個ACK對這個數據進行確認。只有接受到了這個確認數據以後發送方才能傳輸下個數據。 這樣我們考慮一下如果說窗口過小,那麽當傳輸比較大的數據的時候需要不停的對數據進行確認,這個時候就會造成很大的延遲。如果說窗口的大小定義的過大。我們假設發送方一次發送100個數據。但是接收方只能處理50個數據。這樣每次都會只對這50個數據進行確認。發送方下一次還是發送100個數據,但是接受方還是只能處理50個數據。這樣就避免了不必要的數據來擁塞我們的鏈路。所以我們就引入了滑動窗口機制,窗口的大小並不是固定的而是根據我們之間的鏈路的帶寬的大小,這個時候鏈路是否擁護塞。接受方是否能處理這麽多數據了。
我們看看滑動窗口是如何工作的。我們看下面幾張圖。

技術分享圖片


首先是第一次發送數據這個時候的窗口大小是根據鏈路帶寬的大小來決定的。我們假設這個時候窗口的大小是3。這個時候接受方收到數據以後會對數據進行確認告訴發送方我下次希望手到的是數據是多少。這裏我們看到接收方發送的ACK=3(這是發送方發送序列2的回答確認,下一次接收方期望接收到的是3序列信號)。這個時候發送方收到這個數據以後就知道我第一次發送的3個數據對方只收到了2個。就知道第3個數據對方沒有收到。下次在發送的時候就從第3個數據開始發。這個時候窗口大小就變成了2
技術分享圖片

這個時候發送方發送2個數據。

技術分享圖片


看到接收方發送的ACK是5就表示他下一次希望收到的數據是5,發送方就知道我剛才發送的2個數據對方收了這個時候開始發送第5個數據。
這就是滑動窗口的工作機制,當鏈路變好了或者變差了這個窗口還會發生變話,並不是第一次協商好了以後就永遠不變了。
滑動窗口協議
滑動窗口協議,是TCP使用的一種流量控制方法。該協議允許發送方在停止並等待確認前可以連續發送多個分組。由於發送方不必每發一個分組就停下來等待確認,因此該協議可以加速數據的傳輸。
只有在接收窗口向前滑動時(與此同時也發送了確認),發送窗口才有可能向前滑動。
收發兩端的窗口按照以上規律不斷地向前滑動,因此這種協議又稱為滑動窗口協議。
當發送窗口和接收窗口的大小都等於1時,就是停止等待協議。

TCP可靠傳輸:校驗和,重傳控制,序號標識,滑動窗口、確認應答