tcp作為面向連線的提供全雙工可靠服務協議,具有差錯控制、擁塞控制和流量控制等功能。此處所謂的擁塞控制和流量控制,就是將傳送端傳送能力、接收端接收資訊的能力以及當前的網路環境參與考慮,在網路擁塞情況嚴重或者接收端接收能力有限的情況下,減緩或暫停訊息傳送,當情況改善時,增強訊息傳送能力,加上超時/丟失重發的機制,共同提供可靠傳輸。
流量控制以動態調整傳送空間大小(滑動視窗)的形式來反映接收端接收訊息的能力,反饋給傳送端以調整傳送速度,避免傳送速度過快導致的丟包或者過慢降低整體效能。
這裡採用滑動視窗機制,一是不用每次傳送完成都需要等待收到確認訊息才能繼續傳送,二是參考接收端的接收能力,限制傳送資料段大小,避免丟失現象。
典型行為如下:
雖然接收端可以將通過ack確認訊息(或者直接傳送給傳送端訊息,tcp連線全雙工,報頭有seq和ack),來反饋待接收能力,但是傳送端要考慮的卻不只是接收端的接收能力,還要考慮網路環境。
擁塞控制也就是考慮當前的網路環境,動態調整視窗大小,沒有發生擁塞情況,則視窗增大,擁塞了視窗減小,如此往復,最終應該接近與接收端的視窗大小。
具體的擁塞控制演算法如下:
在開始傳送資訊時,由於不知道具體的網路環境,為避免大量資訊造成的擁塞現象,此時的擁塞視窗以最小值(即擁塞視窗和接收端視窗中的較小值)進行資料傳送,並設定門限值作為慢啟動演算法和擁塞避免演算法的分割點。慢啟動是指以最小的擁塞視窗按照指數形式遞增,達到門限值後,以擁塞避免演算法,即線性遞增方式增大擁塞視窗(這裡遞增時間間隔為乙個往返時間rtt)。
在上述過程中,無論是視窗大小指數遞增或者線性遞增,當發生擁塞現象,則門限值更新為當前視窗大小的一半,擁塞視窗大小變為最小值,重複上述遞增過程(此時屬於網路環境限制,所以在接收端和擁塞視窗兩個限制條件中選擇擁塞視窗作為限制)。
如圖所示
當傳送端連續收到三個重複的ack時,表示該資料段已經丟失,需要重發。當收到三個表示同乙個資料段的ack時,不需要等待計時器超時,即重新傳送資料段(當時這三個ack要在超時之前到達傳送端),因為能夠收到接收端的ack確認資訊,所以資料段只是單純的丟失,而不是因為網路擁塞導致,所以此時不需要擁塞視窗更新為最小值進行慢啟動(如果這樣的話,反倒因為擁塞視窗的增長需要時間,可能導致效能降低),此時需要設定擁塞視窗大小為:門限值大小+3,當然此處的門限值已經更新為擁塞視窗值的一半大小,該行為也就是所謂的「乘法減少」,更新之後按照擁塞避免演算法繼續進行。
如圖所示
tcp協議屬於全雙工協議,以上所說的傳送端同樣也是接收端,傳輸中不僅需要考慮兩個端主機的傳送接收能力,同樣需要考慮網路所處環境。
TCP流量控制和擁塞控制
1 利用滑動視窗實現流量控制 如果傳送方把資料傳送得過快,接收方可能會來不及接收,這就會造成資料的丟失。所謂流量控制就是讓傳送方的傳送速率不要太快,要讓接收方來得及接收。利用滑動視窗機制可以很方便地在tcp連線上實現對傳送方的流量控制。2 設a向b傳送資料。在連線建立時,b告訴了a 我的接收視窗是 ...
TCP擁塞控制和流量控制
tcp作為面向連線的提供全雙工可靠服務協議,具有差錯控制 擁塞控制和流量控制等功能。此處所謂的擁塞控制和流量控制,就是將傳送端傳送能力 接收端接收資訊的能力以及當前的網路環境參與考慮,在網路擁塞情況嚴重或者接收端接收能力有限的情況下,減緩或暫停訊息傳送,當情況改善時,增強訊息傳送能力,加上超時 丟失...
TCP流量控制 擁塞控制
如果傳送者傳送資料過快,接收者來不及接收,那麼就會有分組丟失。為了避免分組丟失,控制傳送者的傳送速度,使得接收者來得及接收,這就是流量控制。流量控制根本目的是防止分組丟失,它是構成tcp可靠性的一方面。主要的方式就是接收方返回的 ack 中會包含自己的接收視窗的大小,並且利用大小來控制傳送方的資料傳...