TCP滑動視窗與流量控制

2021-08-28 06:01:22 字數 2157 閱讀 5336

tcp採用可變滑動視窗來實現流量控制。tcp連線的兩端互動作用,互相提供資料流的相關資訊,包括報文段序列號、ack號和視窗大小(即接收端的可用空間)。傳送端根據這些資訊動態調節視窗大小來控制傳送,以達到流量控制的目的。每個tcp頭部的視窗大小字段表明接收端可用快取空間的大小,以位元組為單位。該字段長度為16位,但視窗縮放選項可用大於65535的值。報文段傳送方在相反方向上可接受的最大序列號值為tcp頭部中ack號和視窗大小欄位之和(單位保持一致)。

tcp連線的兩端都可收發資料,連線的收發資料量是通過一組視窗結構(window structure)來維護的,如下圖所示:

每個tcp連線的兩端都維護一組視窗:傳送視窗結構(send window structure)和接收視窗結構(receive window structure)。tcp以位元組為單位維護其視窗結構。tcp頭部中的視窗大小字段相對ack號有乙個位元組的偏移量。傳送端計算其可用視窗,即它可以立即傳送的資料量。可用視窗(允許傳送但還未傳送)計算值為提供視窗(即由接收端通告的視窗)大小減去在傳(已傳送但未得到確認)的資料量。圖中p1、p2、p3分別記錄了視窗的左邊界、下次傳送的序列號、右邊界。

如上圖所示, 隨著傳送端接收到返回的資料ack,滑動視窗也隨之右移。傳送端根據接收端返回的ack可以得到兩個重要的資訊:一是接收端期望收到的下乙個位元組序號;二是當前的視窗大小(再結合傳送端已有的其他資訊可以得出還能傳送多少位元組資料)。

需要注意的是:傳送視窗的左邊界只能右移,因為它控制的是已傳送並受到確認的資料,具有累積性,不能返回;右邊界可以右移也可以左移(能左移的右邊界會帶來一些缺陷,下文會講到)。

接收端也維護乙個視窗結構,但比傳送視窗簡單(只有左邊界和右邊界)。該視窗結構記錄了已接收並確認的資料,以及它能夠接收的最大序列號,該視窗能保證接收資料的正確性(避免儲存重複的已接收和確認的資料,以及避免儲存不應接收的資料)。由於tcp的累積ack特性,只有當到達資料序列號等於左邊界時,視窗才能向前滑動。

tcp是雙工的可靠傳輸協議,連線的雙方都可以同時接收、傳送資料。tcp連線的雙方都各自維護乙個「傳送視窗」和乙個「接收視窗」。其中各自的「接收視窗」大小取決於應用、系統、硬體的限制(tcp傳輸速率不能大於應用的資料處理速率)。各自的「傳送視窗」則要求取決於對端通告的「接收視窗」,要求相同。

當視窗的左右邊界重合(即視窗大小為0)時,傳送端將停止傳送資料直到視窗大小恢復為非零值,這樣的視窗稱為零視窗。當接收端重新獲得可用空間,會給傳送端傳送乙個視窗更新(window update),告知其可以繼續傳送資料。這樣的視窗更新通常不包含資料(為純ack)。

但接收端傳送的視窗更新是ack報文,不能保證傳輸的可靠性。因此如果乙個包含視窗更新的ack丟失,通訊雙方就會一直處於等待狀態:接收方等待接收資料(它已經傳送了視窗更新),傳送方等待視窗更新告知其可以繼續傳送,這樣就會陷入死鎖狀態。為避免死鎖發生,傳送端會採用乙個持續計時器間歇性地詢問接收端,看其視窗是否增長。持續視窗計時器會觸發視窗探測(window probe)訊息的傳送,強制要求接收端返回ack。視窗探測包含乙個位元組的資料,採用tcp可靠傳輸(重傳),強制要求接收端返回ack,因此可以避免因視窗更新丟失而導致的死鎖。

tcp基於視窗的流量控制機制的缺陷是可能會出現糊塗視窗症候群(silly window syndrome,sws)。當出現該問題時,tcp連線之間的資料交換可能是較小的資料段(極端情況下只有1位元組的資料負載,卻要消耗40位元組的tcp頭部),導致傳輸效率低下,造成資源浪費。一些針對這一特性的網路攻擊的原理是,在tcp連線建立後,要麼不做任何行為,要麼只產生很小的應答,使得傳送速率不斷減慢。

tcp連線的收發方兩者都可能導致sws的出現:接收端的通告視窗較小(例如沒有等到視窗變大才通告),或者傳送端傳送的資料段較小(沒有等待其他資料組合成乙個更大的報文段)。引起sws的原因不同,解決方案也不同。

對於接收端來說,不應通告較小的視窗值。某些協議規定,在視窗可增至乙個全長的報文段(mss)或者接收端快取空間的一半(取兩者中的較小者)之前,不能通告比當前視窗更大的視窗值。

而對於傳送端來說,不應傳送較小的報文段。具體實現的規則有所不同。

滑動視窗 TCP流量控制

問題 如果傳送端傳送的速度較快,接收端接收到資料後處理的速度較慢,而接收緩衝區的大小是固定的,就會丟失資料。tcp協議通過 滑動視窗 sliding window 機制解決這一問題。看下圖的通訊過程 1.傳送端發起連線,宣告最大段尺寸是 1460 初始序號是 0,視窗大小是 4k,表示 我的接收緩衝...

TCP的流量控制機制與滑動視窗

所謂的流量控制,就是告誡對方傳送速率不要太快,要讓接收來來得及接收資料。形容如下 甲向乙傳送資料。經過tcp三握手連線以後,當乙告訴甲 我的接受視窗rwnd 400 這裡rwnd表示receiver window的意思 所以,傳送方的傳送視窗不能超過接收方給出的接受視窗的數值。而tcp視窗的單位是位...

流量控制 滑動視窗

1.流量控制 我們都知道當網路上資料流量超過網路硬體負荷時就會出現網路擁塞,就是我們平常遇到的網路緩慢的現象。對應影響網路速度的原因主要有網路傳輸裝置的效能和傳輸的資料多少,網路傳輸裝置包含傳送接收主機 路由器 傳輸線路等。為了解決這個問題,tcp引入了流量控制,顧名思義,就是採用某種方法,控制收發...