-
TCP擁塞控制
鎖定
- 中文名
- TCP擁塞控制
- 外文名
- Transmission Control Protocol
- 縮 寫
- TCP
- 領 域
- 計算機
TCP擁塞控制運作方法
TCP使用多種擁塞控制策略來避免雪崩式擁塞。TCP會為每條連接維護一個“擁塞窗口”來限制可能在端對端間傳輸的未確認分組總數量。這類似TCP流量控制機制中使用的滑動窗口。TCP在一個連接初始化或超時後使用一種“慢啓動”機制來增加擁塞窗口的大小。它的起始值一般為最大分段大小(Maximum segment size,MSS)的兩倍,雖然名為“慢啓動”,初始值也相當低,但其增長極快:當每個分段得到確認時,擁塞窗口會增加一個MSS,使得在每次往返時間(round-trip time,RTT)內擁塞窗口能高效地雙倍增長。
TCP擁塞控制擁塞窗口
在TCP中,擁塞窗口(congestion window)是任何時刻內確定能被髮送出去的字節數的控制因素之一,是阻止發送方至接收方之間的鏈路變得擁塞的手段。他是由發送方維護,通過估計鏈路的擁塞程度計算出來的,與由接收方維護的接收窗口大小並不衝突。
當一條連接創建後,每個主機獨立維護一個擁塞窗口並設置值為連接所能承受的MSS的最小倍數,之後的變化依靠線增積減機制來控制,這意味如果所有分段到達接收方和確認包準時地回到發送方,擁塞窗口會增加一定數量。該窗口會保持指數增大,直到發生超時或者超過一個稱為“慢啓動閾值(ssthresh)”的限值。如果發送方到達這個閾值時,每收到一個新確認包,擁塞窗口只按照線性速度增加自身值的倒數。
當發生超時的時候,慢啓動閾值降為超時前擁塞窗口的一半大小、擁塞窗口會降為1個MSS,並且重新回到慢啓動階段。
系統管理員可以設置窗口最大限值,或者調整擁塞窗口的增加量,來對TCP調優。
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.
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:4次歷史版本
- 最近更新: yz柠栀