TCP流量控制,擁塞控制,差錯控制

2021-06-21 10:26:43 字數 2093 閱讀 3534

流量控制:

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、推遲確認:在對收到的報文段確認之前等待到足夠的接收快取,或者等待到乙個時間段(現在一般定義500ms)

擁塞控制:

1、如果網路上的負載(傳送到網路上的分組數)大於網路上的容量(網路同時能處理的分組數),就可能引起擁塞,判斷網路擁塞的兩個因素:延時和吞吐量。擁塞控制機制是:開環(預防)和閉環(消除)(見網路原理相關書籍,略)

tcp處理擁塞的三種策略:慢啟動(指數增大),擁塞避免(加法增大),擁塞檢測(除2減少,或叫做乘法減少)

2、慢啟動:指數增大

/* ssthresh是慢開始門限,slow start threshold表示乙個上限,一般的實現為65535b */

cwnd = 1;(1表示乙個mss報文段,不是乙個位元組)

while ( cwnd < ssthresh )

if( 發出的報文段確認 )

cwd *= 2;

3、擁塞避免:加法增大

當到達ssthresh之後,就是加法階段了,每收到乙個確認,cwd += 1;

4、擁塞檢測:乘法減少(除2減少)

當報文需要重傳時,說明擁塞可能發生了,由於重傳有2種情況,所以也分兩種處理

(1)、由於超時重傳,這是擁塞的可能性比較大,如下做強反映調整

a、 ssthresh /= 2;

b、 cwnd = 1;

重新慢啟動過程

(2)、由於收到3個重複的ack的重傳,採取弱反映:

a、ssthresh /= 2;

b、cwnd = ssthresh;

c、開始擁塞避免過程

差錯控制:

1、tcp必須保證資料:按序,沒有差錯,沒有部分丟失,沒有重複的交給應用層。方法就是:校驗和,確認,超時重傳

2、校驗和:和udp的做法一樣,也要偽首部,和udp不同的是這個功能在tcp中是必須的

3、確認:ack的確認機制(下面是一些原則)

a、ack報文不需要確認,也不消耗序號

b、當一端傳送資料時,盡量包含捎帶確認。

c、收端推遲傳送ack報文段,如果僅有乙個未確認的按序報文段;延遲到500ms,或者有第二個報文段接收時**d),或者有資料要傳送時**b)

d、任何時候,不能有兩個(以上)未確認的報文段(就是說如果收端有兩個未確認的按序報文段,就馬上傳送ack報文段進行確認)

e、當收到乙個序號比期望序號還大的報文段時,馬上傳送ack,讓發端進行快重傳

f、收到重複的報文段,就立即傳送確認(解決ack丟失問題)

g、丟失的報文段到達,傳送確認,表示已經收到了丟失的報文

4、確認型別

選擇確認(sack):在某些新tcp實現裡面實現了這個東西,報告失序和重複的資料,作偽tcp首部選項欄位的一部分。

5、重傳(兩種情況) : 重傳定時器時間到,或者 發端收到重複的三個ack(快重傳)

TCP協議的流量控制 擁塞控制和差錯控制

流量控制 1 流量控制是管理兩端的流量,以免會產生傳送過塊導致收端溢位,或者因收端處理太快而浪費時間的狀態。用的是 滑動視窗,以位元組為單位 2 視窗有3種動作 展開 右邊向右 合攏 左邊向右 收縮 右邊向左 這三種動作受接收端的控制。合攏 表示已經收到相應位元組的確認了 展開 表示允許快取傳送更多...

TCP流量控制 擁塞控制

如果傳送者傳送資料過快,接收者來不及接收,那麼就會有分組丟失。為了避免分組丟失,控制傳送者的傳送速度,使得接收者來得及接收,這就是流量控制。流量控制根本目的是防止分組丟失,它是構成tcp可靠性的一方面。主要的方式就是接收方返回的 ack 中會包含自己的接收視窗的大小,並且利用大小來控制傳送方的資料傳...

TCP流量控制 擁塞控制

什麼是流量控制?流量控制的目的?如果傳送者傳送資料過快,接收者來不及接收,那麼就會有分組丟失。為了避免分組丟失,控制傳送者的傳送速度,使得接收者來得及接收,這就是流量控制。流量控制根本目的是防止分組丟失,它是構成tcp可靠性的一方面。如何實現流量控制?由滑動視窗協議 連續arq協議 實現。滑動視窗協...