TCP流量控制

2021-07-09 21:57:24 字數 1172 閱讀 2827

如果傳送端傳送的速度較快,接收端接收到資料後處理的速度較慢,而接收緩衝區的大小是固定的,就會丟失資料。tcp協議通過「滑動視窗(sliding window)」機制解決這一問題。

滑動視窗

傳送端發起連線,宣告最大段尺寸是1460,初始序號是0,視窗大小是4k,表示「我的接收緩衝區還有4k位元組空閒,你發的資料不要超過4k」。接收端應答連線請求,宣告最大段尺寸是1024,初始序號是8000,視窗大小是6k。傳送端應答,三方握手結束。

傳送端發出段4-9,每個段帶1k的資料,傳送端根據視窗大小知道接收端的緩衝區滿了,因此停止傳送資料。

接收端的應用程式提走2k資料,接收緩衝區又有了2k空閒,接收端發出段10,在應答已收到6k資料的同時宣告視窗大小為2k。

接收端的應用程式又提走2k資料,接收緩衝區有4k空閒,接收端發出段11,重新宣告視窗大小為4k。

傳送端發出段12-13,每個段帶2k資料,段13同時還包含fin位。

接收端應答接收到的2k資料(6145-8192),再加上fin位佔乙個序號8193,因此應答序號是8194,連線處於半關閉狀態,接收端同時宣告視窗大小為2k。

接收端的應用程式提走2k資料,接收端重新宣告視窗大小為4k。

接收端的應用程式提走剩下的2k資料,接收緩衝區全空,接收端重新宣告視窗大小為6k。

接收端的應用程式在提走全部資料後,決定關閉連線,發出段17包含fin位,傳送端應答,連線完全關閉。

上圖在接收端用小方塊表示1k資料,實心的小方塊表示已接收到的資料,虛線框表示接收緩衝區,因此套在虛線框中的空心小方塊表示視窗大小,從圖中可以看出,隨著應用程式提走資料,虛線框是向右滑動的,因此稱為滑動視窗。

從這個例子還可以看出,傳送端是1k、1k地傳送資料,而接收端的應用程式可以2k、2k地提走資料,當然也有可能一次提走3k或6k資料,或者一次只提走幾個位元組的資料。

也就是說,應用程式所看到的資料是乙個整體,或說是乙個流(stream),在底層通訊中這些資料可能被拆成很多資料報來傳送,但是乙個資料報有多少位元組對應用程式是不可見的,因此tcp協議是面向流的協議。而udp是面向訊息的協議,每個udp段都是一條訊息,應用程式必須以訊息為單位提取資料,不能一次提取任意位元組的資料,這一點和tcp是很不同的。

學習資料來自linux c 程式設計一站式學習

TCP流量控制

一般來說,我們總是希望資料傳輸的更快一些,但如果傳送方把資料傳送的很快,而接收方來不及接收,這就可能造成資料的丟失。流量控制就是讓傳送方的傳送速率不要太快,讓接收方來得及接收。對於成塊資料流,tcp利用滑動視窗機制來實現流量的控制,對於互動資料流,tcp利用捎帶ack和nagle演算法來實現流量的控...

TCP流量控制

流量控制 一般來說,我們總是希望資料傳輸的更快一些,但如果傳送方把資料傳送的很快,而接收方來不及接收,這就可能造成資料的丟失。流量控制就是讓傳送方的傳送速率不要太快,讓接收方來得及接收。對於成塊資料流,tcp利用滑動視窗機制來實現流量的控制,對於互動資料流,tcp利用捎帶ack和nagle演算法 來...

TCP流量控制

為了提高通道的利用率tcp協議不使用停止等待協議,而是使用連續arq協議,意思就是可以連續發出若干個分組然後等待確認,而不是傳送乙個分組就停止並等待該分組的確認。tcp的兩端都有傳送 接收快取和傳送 接收視窗。tcp的快取是乙個迴圈佇列,其中傳送視窗可以用3個指標表示。而傳送視窗的大小受tcp資料報...