複製鏈接
請複製以下鏈接發送給好友

TCP擁塞控制

鎖定
TCP擁塞控制是傳輸控制協議(英語:Transmission Control Protocol,縮寫TCP)避免網絡擁塞的算法,是互聯網上主要的一個擁塞控制措施。它使用一套基於線增積減模式的多樣化網絡擁塞控制方法(包括慢啓動和擁塞窗口等模式)來控制擁塞。在互聯網上應用中有相當多的具體實現算法。
中文名
TCP擁塞控制
外文名
Transmission Control Protocol
縮    寫
TCP
領    域
計算機

TCP擁塞控制運作方法

TCP使用多種擁塞控制策略來避免雪崩式擁塞。TCP會為每條連接維護一個“擁塞窗口”來限制可能在端對端間傳輸的未確認分組總數量。這類似TCP流量控制機制中使用的滑動窗口。TCP在一個連接初始化或超時後使用一種“慢啓動”機制來增加擁塞窗口的大小。它的起始值一般為最大分段大小(Maximum segment size,MSS)的兩倍,雖然名為“慢啓動”,初始值也相當低,但其增長極快:當每個分段得到確認時,擁塞窗口會增加一個MSS,使得在每次往返時間(round-trip time,RTT)內擁塞窗口能高效地雙倍增長。
當擁塞窗口超過慢啓動閾值(ssthresh)時,算法就會進入一個名為“擁塞避免”的階段。在擁塞避免階段,只要未收到重複確認,擁塞窗口則在每次往返時間內線性增加一個MSS大小。 [1] 

TCP擁塞控制擁塞窗口

在TCP中,擁塞窗口(congestion window)是任何時刻內確定能被髮送出去的字節數的控制因素之一,是阻止發送方至接收方之間的鏈路變得擁塞的手段。他是由發送方維護,通過估計鏈路的擁塞程度計算出來的,與由接收方維護的接收窗口大小並不衝突。
當一條連接創建後,每個主機獨立維護一個擁塞窗口並設置值為連接所能承受的MSS的最小倍數,之後的變化依靠線增積減機制來控制,這意味如果所有分段到達接收方和確認包準時地回到發送方,擁塞窗口會增加一定數量。該窗口會保持指數增大,直到發生超時或者超過一個稱為“慢啓動閾值(ssthresh)”的限值。如果發送方到達這個閾值時,每收到一個新確認包,擁塞窗口只按照線性速度增加自身值的倒數。
當發生超時的時候,慢啓動閾值降為超時前擁塞窗口的一半大小、擁塞窗口會降為1個MSS,並且重新回到慢啓動階段。
系統管理員可以設置窗口最大限值,或者調整擁塞窗口的增加量,來對TCP調優。
在流量控制中,接收方通過TCP的“窗口”值(Window Size)來告知發送方,由發送方通過對擁塞窗口和接收窗口的大小比較,來確定任何時刻內需要傳輸的數據量。 [1] 

TCP擁塞控制慢啓動

慢啓動(Slow-start)是用於結合其他階段算法,來避免發送過多數據到網絡中而導致網絡擁塞,算法在RFC5681中定義。
慢啓動初始啓動時設置擁塞窗口值(cwnd)為1、2、4或10個MSS。擁塞窗口在每接收到一個確認包時增加,每個RTT內成倍增加,當然實際上並不完全是指數增長,因為接收方會延遲發送確認,通常是每接收兩個分段則發送一次確認包。發送速率隨着慢啓動的進行而增加,直到遇到出現丟失、達到慢啓動閾值(ssthresh)、或者接收方的接收窗口進行限制。如果發生丟失,則TCP推斷網絡出現了擁塞,會試圖採取措施來降低網絡負載。這些是靠具體使用的TCP擁塞算法來進行測量判斷。當達到慢啓動閾值(ssthresh)時,慢啓動算法就會轉換為線性增長的階段,算法控制每個RTT內擁塞窗口只增加1個分段量。雖然稱為“慢啓動”,但實際上比擁塞控制階段的窗口增加更為激進。
對於處理報文丟失這個事件上,不同擁塞控制算法表現有所不同:
    • TCP Tahoe
    • 對於TCP Tahoe算法,當發生丟失時,會進入“快速重傳”機制,慢啓動閾值設為之前擁塞窗口值的一半,擁塞窗口值降為初始值,重新進入慢啓動階段。當擁塞窗口值達到慢啓動閾值時,每RTT內擁塞窗口增加值則為“MSS除以CWND”的值,所以擁塞窗口按線性速度增加。
    • TCP Reno
    • TCP Reno算法實現了一個名為“快速恢復”的機制,慢啓動閾值設為之前擁塞窗口值的一半,和作為新的擁塞窗口值,並跳過慢啓動階段,直接進入擁塞控制階段。
慢啓動假設分段的未確認是由於網絡擁塞造成的,雖然大部分網絡的確如此,但也有其他原因,例如一些鏈路質量差的網絡,會導致分段包丟失。在一些網絡環境,例如無線網絡,慢啓動效率並不好。
慢啓動對於一些短暫的連接性能並不好,一些較舊的網頁瀏覽器會創建大量連續的短暫鏈接,通過快速開啓和關閉鏈接來請求獲得文件,這使得大多數鏈接處於慢啓動模式,導致網頁響應時間差。所以新的網頁瀏覽器,會通過向特殊的服務器,開啓一條鏈接來請求獲得全部的文件,而避免頻繁新建大量短暫鏈接。不過這樣對一些非請求網站所提供的服務,例如廣告跟蹤腳本、社交分享功能腳本、網絡分析腳本等,並不適用。 [1] 

TCP擁塞控制和式增加,積式減少

和式增加,積式減少(additive-increase/multiplicative-decrease,AIMD,這裏簡稱“線增積減”)是一種反饋控制算法,其包含了對擁塞窗口線性增加,和當發生擁塞時對窗口積式減少。多個使用AIMD控制的TCP流最終會收斂到對線路的等量競爭使用。 [1] 

TCP擁塞控制快速重傳

快速重傳(Fast retransmit)是對TCP發送方降低等待重發丟失分段用時的一種改進。TCP發送方在每發送一個分段時會啓動一個超時計時器,如果相應的分段確認沒在特定時間內被送回,發送方就假設這個分段在網絡上丟失了,需要重發。這也是TCP用來估計RTT的測量方法。
重複確認(duplicate cumulative acknowledgements,DupAcks)就是這個階段的基礎,其基於以下過程:如果接收方接收到一個數據分段,就會將該分段的序列號加上數據字節長的值,作為分段確認的確認號,發送回發送方,表示期望發送方發送下一個序列號的分段。但是如果接收方提前收到更下一個序列號的分段——或者説接收到無序到達的分段,即之前期望確認號對應的分段出現接收丟失——接收方需要立即使用之前的確認號發送分段確認。此時如果發送方收到接收方相同確認號的分段確認超過1次,並且該對應序列號的分段超時計時器仍沒超時的話,則這就是出現重複確認,需要進入快速重傳。
快送重傳就是基於以下機制:如果假設重複閾值為3,當發送方收到4次相同確認號的分段確認(第1次收到確認期望序列號,加3次重複的期望序列號確認)時,則可以認為繼續發送更高序列號的分段將會被接受方丟棄,而且會無法有序送達。發送方應該忽略超時計時器的等待重發,立即重發重複分段確認中確認號對應序列號的分段。 [2] 
參考資料
  • 1.    Chiu, Dah-Ming; Raj Jain. Analysis of increase and decrease algorithms for congestion avoidance in computer networks. Computer Networks and ISDN systems. 1989, 17: 1–14.
  • 2.    Fall, Kevin; Sally Floyd. Simulation-based Comparisons of Tahoe, Reno and SACK TCP (PostScript). Computer Communications Review. July 1996.