流量控制:
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協議 實現。滑動視窗協...