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