**為了提高通道的利用率tcp協議不使用停止等待協議,而是使用連續arq協議,意思就是可以連續發出若干個分組然後等待確認,而不是傳送乙個分組就停止並等待該分組的確認。
tcp的兩端都有傳送/接收快取和傳送/接收視窗。tcp的快取是乙個迴圈佇列,其中傳送視窗可以用3個指標表示。而傳送視窗的大小受tcp資料報中視窗大小的影響,tcp資料報中的視窗大小是接收端通知傳送端其還可以接收多少資料,所以傳送視窗根據接收的的視窗大小的值動態變化。傳送視窗的大小不能大於接收視窗的大小。**
1、流量控制是管理兩端的流量,以免會產生傳送過塊導致收端溢位,或者因收端處理太快而浪費時間的狀態。用的是:滑動視窗,以位元組為單位
2、視窗有3種動作:展開(右邊向右),合攏(左邊向右),收縮(右邊向左)這三種動作受接收端的控制。
合攏:表示已經收到相應位元組的確認了
展開:表示允許快取傳送更多的位元組
收縮(非常不希望出現的,某些實現是禁止的):表示本來可以傳送的,現在不能傳送;但是如果收縮的是那些已經發出的,就會有問題;為了避免,收端會等待到快取中有更多快取空間時才進行通訊。
發端視窗的大小取決於收端的視窗大小rwnd(tcp報文的視窗大小字段)和擁塞視窗大小cwnd(見擁塞控制) 發端視窗大小 = min;
3、關閉視窗:視窗縮回有個例外,就是傳送rwnd=0表示暫時不願意接收資料。這種情況下,發端不是把視窗收縮,而是停止傳送資料。(為了比避免死鎖,會用一些探測報定時傳送試探,見定時器一節)
4、問題:某些時候,由於發端或收端的資料很慢,會引起大量的1位元組資料痛惜,浪費很多資源。
(1)、發端的程序產生資料很慢時候,時不時的來個1位元組資料,那麼tcp就會1位元組1位元組的傳送,效率很低。
解決方法(nagle演算法):
a、將第一塊資料發出去
b、然後等到傳送快取有足夠多的資料(最大報文段長度),或者等到收端確認的ack時再傳送資料。
c、重複b的過程
(2)、收端程序由於消耗資料很慢,所以可能會有這麼一種情況,收端會傳送其視窗大小為1的資訊,然後有是1位元組的傳輸
解決辦法(2種)
a、clark方法:在接收快取的一半變空,或者有足夠空間放最大報文長度之前,宣告接收視窗大小為0
b、推遲確認:在對收到的報文段確認之前等待到足夠的接收快取,或者等待到乙個時間段
自動重傳協議,是osi模型中資料鏈路層的錯誤糾正協議之一。它通過使用確認和超時這兩個機制,在不可靠服務的基礎上實現可靠的資訊傳輸。如果傳送方在傳送後一段時間之內沒有收到確認幀,它通常會重新傳送。
arq包括停止等待arq協議、回退arq協議、和連續arq協議。
當傳送視窗和接收視窗的大小都等於 1時,就是停止等待協議。
當傳送視窗和接收視窗的大小均大於1時,就是選擇重發協議
注:部分段落來自博文 tcp的流量 TCP流量控制
一般來說,我們總是希望資料傳輸的更快一些,但如果傳送方把資料傳送的很快,而接收方來不及接收,這就可能造成資料的丟失。流量控制就是讓傳送方的傳送速率不要太快,讓接收方來得及接收。對於成塊資料流,tcp利用滑動視窗機制來實現流量的控制,對於互動資料流,tcp利用捎帶ack和nagle演算法來實現流量的控...
TCP流量控制
如果傳送端傳送的速度較快,接收端接收到資料後處理的速度較慢,而接收緩衝區的大小是固定的,就會丟失資料。tcp協議通過 滑動視窗 sliding window 機制解決這一問題。滑動視窗 傳送端發起連線,宣告最大段尺寸是1460,初始序號是0,視窗大小是4k,表示 我的接收緩衝區還有4k位元組空閒,你...
TCP流量控制
流量控制 一般來說,我們總是希望資料傳輸的更快一些,但如果傳送方把資料傳送的很快,而接收方來不及接收,這就可能造成資料的丟失。流量控制就是讓傳送方的傳送速率不要太快,讓接收方來得及接收。對於成塊資料流,tcp利用滑動視窗機制來實現流量的控制,對於互動資料流,tcp利用捎帶ack和nagle演算法 來...