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

2021-07-01 20:22:00 字數 2285 閱讀 1002

流量控制:

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、確認型別

累計確認:收端忽略掉所有失序報文,告知發端他期待下乙個收到的序號,叫做肯定累計ack。肯定是說:丟棄的,丟失的,重複的都不報告。

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

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

TCP流量控制和擁塞控制

1 利用滑動視窗實現流量控制 如果傳送方把資料傳送得過快,接收方可能會來不及接收,這就會造成資料的丟失。所謂流量控制就是讓傳送方的傳送速率不要太快,要讓接收方來得及接收。利用滑動視窗機制可以很方便地在tcp連線上實現對傳送方的流量控制。2 設a向b傳送資料。在連線建立時,b告訴了a 我的接收視窗是 ...

TCP擁塞控制和流量控制

tcp作為面向連線的提供全雙工可靠服務協議,具有差錯控制 擁塞控制和流量控制等功能。此處所謂的擁塞控制和流量控制,就是將傳送端傳送能力 接收端接收資訊的能力以及當前的網路環境參與考慮,在網路擁塞情況嚴重或者接收端接收能力有限的情況下,減緩或暫停訊息傳送,當情況改善時,增強訊息傳送能力,加上超時 丟失...

TCP擁塞控制和流量控制

tcp作為面向連線的提供全雙工可靠服務協議,具有差錯控制 擁塞控制和流量控制等功能。此處所謂的擁塞控制和流量控制,就是將傳送端傳送能力 接收端接收資訊的能力以及當前的網路環境參與考慮,在網路擁塞情況嚴重或者接收端接收能力有限的情況下,減緩或暫停訊息傳送,當情況改善時,增強訊息傳送能力,加上超時 丟失...