如果傳送方把資料傳送得過快,接收方可能會來不及接收,這就會造成資料的丟失。所謂流量控制就是讓傳送方的傳送速率不要太快,要讓接收方來得及接收。所以可以說,流量控制是傳送方被動地調整流量。
利用滑動視窗機制可以很方便地在tcp連線上實現對傳送方的流量控制。
設a向b傳送資料。在連線建立時,b告訴了a:「我的接收視窗是 rwnd = 400 」(這裡的 rwnd 表示 receiver window) 。因此,傳送方的傳送視窗不能超過接收方給出的接收視窗的數值。請注意,tcp的視窗單位是位元組,不是報文段。假設每乙個報文段為100位元組長,而資料報文段序號的初始值設為1。大寫ack表示首部中的確認位ack,小寫ack表示確認欄位的值ack。
從圖中可以看出,b進行了三次流量控制。第一次把視窗減少到 rwnd = 300 ,第二次又減到了 rwnd = 100 ,最後減到 rwnd = 0 ,即不允許傳送方再傳送資料了。這種使傳送方暫停傳送的狀態將持續到主機b重新發出乙個新的視窗值為止。b向a傳送的三個報文段都設定了 ack = 1 ,只有在ack=1時確認號字段才有意義。
tcp為每乙個連線設有乙個持續計時器(persistence timer)。只要tcp連線的一方收到對方的零視窗通知,就啟動持續計時器。若持續計時器設定的時間到期,就傳送乙個零視窗控測報文段(攜1位元組的資料),那麼收到這個報文段的一方就重新設定持續計時器。
擁塞控制是傳送方主動地調整流量。
傳送方維持乙個擁塞視窗 cwnd ( congestion window )的狀態變數。擁塞視窗的大小取決於網路的擁塞程度,並且動態地在變化。傳送方讓自己的傳送視窗等於擁塞視窗。
慢開始演算法:
當主機開始傳送資料時,如果立即所大量資料位元組注入到網路,那麼就有可能引起網路擁塞,因為現在並不清楚網路的負荷情況。
因此,較好的方法是 先探測一下,即由小到大逐漸增大傳送視窗,也就是說,由小到大逐漸增大擁塞視窗數值。
通常在剛剛開始傳送報文段時,先把擁塞視窗 cwnd 設定為乙個最大報文段mss的數值。而在每收到乙個對新的報文段的確認後,把擁塞視窗增加至多乙個mss的數值。用這樣的方法逐步增大傳送方的擁塞視窗 cwnd ,可以使分組注入到網路的速率更加合理。
每經過乙個傳輸輪次,擁塞視窗 cwnd 就加倍。乙個傳輸輪次所經歷的時間其實就是往返時間rtt。不過「傳輸輪次」更加強調:把擁塞視窗cwnd所允許傳送的報文段都連續傳送出去,並收到了對已傳送的最後乙個位元組的確認。
另,慢開始的「慢」並不是指cwnd的增長速率慢,而是指在tcp開始傳送報文段時先設定cwnd=1,使得傳送方在開始時只傳送乙個報文段(目的是試探一下網路的擁塞情況),然後再逐漸增大cwnd。
為了防止擁塞視窗cwnd增長過大引起網路擁塞,還需要設定乙個慢開始門限ssthresh狀態變數。慢開始門限ssthresh的用法如下:
擁塞避免演算法:
讓擁塞視窗緩慢增長,即每經過乙個往返時間rtt就把傳送方的擁塞視窗cwnd加1,而不是加倍。這樣擁塞視窗按線性規律緩慢增長。
無論是在慢開始階段還是在擁塞避免階段,只要傳送方判斷網路出現擁塞(其根據就是沒有收到確認,雖然沒有收到確認可能是其他原因的分組丟失,但是因為無法判定,所以都當做擁塞來處理),就把慢開始門限設定為出現擁塞時的傳送視窗大小的一半。然後把擁塞視窗設定為1,執行慢開始演算法。這樣做的目的就是要迅速減少主機傳送到網路中的分組數,使得發生擁塞的路由器有足夠時間把佇列中積壓的分組處理完畢。
如下圖:
乘法減小和加法增大
乘法減小:是指不論在慢開始階段還是擁塞避免階段,只要出現超時,就把慢開始門限減半,即設定為當前的擁塞視窗的一半(於此同時,執行慢開始演算法)。當網路出現頻繁擁塞時,ssthresh值就下降的很快,以大大將小注入到網路中的分組數。
加法增大:是指執行擁塞避免演算法後是擁塞視窗緩慢增大,以防止網路過早出現擁塞。
一條tcp連線有時會因等待重傳計時器的超時而空閒較長的時間,慢開始和擁塞避免無法很好的解決這類問題,因此提出了快重傳和快恢復的擁塞控制方法。快重傳演算法並非取消了重傳機制,只是在某些情況下更早的重傳丟失的報文段(如果當傳送端接收到三個重複的確認ack時,則斷定分組丟失,立即重傳丟失的報文段,而不必等待重傳計時器超時)。
快重傳要求接收方在收到乙個失序的報文段後就立即發出重複確認(為的是使傳送方及早知道有報文段沒有到達對方)而不要等到自己傳送資料時捎帶確認。快重傳演算法規定,傳送方只要一連收到三個重複確認就應當立即重傳對方尚未收到的報文段,而不必繼續等待設定的重傳計時器時間到期。如下圖:
快重傳配合使用的還有快恢復演算法,有以下兩個要點:
①當傳送方連續收到三個重複確認時,就執行「乘法減小」演算法,把ssthresh門限減半。但是接下去並不執行慢開始演算法。
②考慮到如果網路出現擁塞的話就不會收到好幾個重複的確認,所以傳送方現在認為網路可能沒有出現擁塞。所以此時不執行慢開始演算法,而是將cwnd設定為ssthresh減半後的大小,然後執行擁塞避免演算法。如下圖:
在採用快恢復演算法時,慢開始演算法只是在tcp連線建立時和網路出現超時時才使用。
接受視窗又稱為通知視窗。因此從接收方對傳送方的流量控制角度考慮,傳送方的傳送視窗一定不能超過對方給出的接受視窗的rwnd。
也就是說:傳送視窗的上限=min[rwnd,cwnd].
流量控制和擁塞控制
就是讓傳送方的傳送速率不要太快,要讓接受方有時間接收。利用滑動視窗機制可以很方便的在tcp連線上實現對傳送方的流量控制。tcp接收方利用自己的接受視窗的大小來限制傳送方的視窗大小。tcp傳送方收到接受方的0視窗通知後,應啟動持續計時器,持續計時器超時後,向接收方傳送0視窗探測報文。概念 在某段時間,...
擁塞控制和流量控制
在tcp連線上實現對傳送方的流量控制 使用滑動視窗機制 假設每乙個報文段為100位元組長,而資料報文段序號的初始值設為1。初始時接收方b的接收視窗為400,即rwnd 400 大寫ack表示首部中的確認位ack,小寫ack表示確認欄位的值ack 如圖所示 b進行了三次流量控制 第一次把視窗減少到 r...
TCP流量控制和擁塞控制
1 利用滑動視窗實現流量控制 如果傳送方把資料傳送得過快,接收方可能會來不及接收,這就會造成資料的丟失。所謂流量控制就是讓傳送方的傳送速率不要太快,要讓接收方來得及接收。利用滑動視窗機制可以很方便地在tcp連線上實現對傳送方的流量控制。2 設a向b傳送資料。在連線建立時,b告訴了a 我的接收視窗是 ...