天天看點

TCP擁塞控制詳解

TCP擁塞控制詳解

TCP擁塞控制詳解

擁塞的代價

當分組的到達速率接近鍊路容量時,分組經曆巨大的排隊時延。

發送方必須執行重傳以補償因為緩存溢出而丢棄的分組。

發送方在遇到大時延時進行的不必要重傳會引起路由器利用其鍊路帶寬來轉發不必要的分組副本。

當一個分組沿一條路徑被丢棄時,每個上遊路由器用于轉發該分組到丢棄該分組而使用的傳輸容量最終被浪費掉了。

運輸層向網絡層中發送封包段(含有初始資料或重傳資料)的速率用

TCP擁塞控制詳解

表示,它有時被稱為網絡的供給載荷。

端到端的擁塞控制:網絡層沒有為運輸層提供顯示幫助,即使網絡中存在擁塞,端系統也必須通過對網絡行為的觀察來推斷。TCP采用端到端的方法來解決擁塞控制問題,因為IP層不會向端系統提供有關網絡擁塞的回報資訊。

網絡輔助的擁塞控制:伺服器向發送方提供關于網絡中用色狀态的顯示回報資訊。還有一些更複雜的網絡回報比如ATM可用比特率擁塞控制機制(伺服器顯示地通知發送方伺服器能支援的最大主機發送速率)。網絡輔助的擁塞控制有兩種回報擁塞資訊的形式。

第一種是直接回報,資訊由路由器發送給發送方,這種方式采用了一種阻塞分組的形式。

第二種是路由器标記或更新從發送方流向接收方的分組中的某個字段來訓示擁塞的産生。

TCP所采用的方法是讓每一個發送方根據所感覺到的網絡擁塞程度來限制其能向連接配接發送流量的速率。

TCP發送方跟蹤一個擁塞視窗cwnd,它對一個TCP發送方能向網絡中發送流量的速率進行了限制。在一個發送方中未被确認的資料量不會超過 cwnd 和 rwnd(接收視窗) 中的最小值,即滿足以下公式。

注意rwnd是流量控制中的概念。在下面的讨論中,我們将接收方緩存視為無限大,這樣來讨論擁塞控制而避免流量控制的問題。

在每個RTT的起始點,上面的限制條件允許向連接配接發送cwnd個位元組的資料,在RTT結束時發送方接收對資料的确認封包。是以發送方的發送速率大概是<code>cwnd/RTT</code> 位元組/秒。通過調節cwnd的值,實際上調節了發送方向連接配接發送資料的速率。

我們将一個TCP發送方的丢包事件定義為:要麼出現逾時,要麼收到來自接收方的三個備援ACK。而丢包事件在發送方看來,是路徑上出現了擁塞的一種訓示。

因為TCP使用确認來觸發(或增大)它的視窗調節長度,TCP被稱為自計時的。

TCP遵從下列指導性原則以令發送方确定它應當發送的速率

一個丢失的封包段意味着阻塞,是以丢失封包段時應當适當降低TCP發送方的速率。

一個确認封包段訓示着一種順利的信号,是以當對先前未确認封包段的确認到達時,應當增加發送方的速率。

帶寬探測,TCP發送方的行為是一個試探的過程,假如增加/降低了發送方的速率,TCP發送方會接着進行探測,進而考慮是否進行進一步的增加/降低。

慢啟動

TCP連接配接開始時,cwnd 的值通常被設為一個 MSS 的較小值,這使得初始發送速率大約為 MSS/RTT。但對于 TCP 發送方而言,可用帶寬可能遠大于 MSS/RTT,是以 TCP 發送方希望盡可能快地找到可用帶寬的數量。

在慢啟動狀态,cwnd 的值以一個 MSS 開始并且每當傳輸的封包段首次被确認就增加一個 MSS。這樣一來,每經過一個 RTT,發送速率就翻倍。TCP 發送速率呈現指數級增長。

每有一個封包被首次确認,就增加一個MSS。這導緻了每一個RTT内cwnd都會翻倍。

TCP擁塞控制詳解

有下列三種改變狀态的情況

如果存在逾時訓示的丢包事件,将 cwnd 置為 1 并重新開始慢啟動過程。還将第二個狀态變量的值 ssthresh(慢啟動門檻值)設定為 cwnd/2。

相當于用ssthresh标記一下可能快要出現逾時的位置

當 cwnd 的值等于 ssthresh 時,結束慢啟動并令 TCP 轉移到擁塞避免模式。

如果檢測到三個備援 ACK,TCP 反應相對不那麼劇烈,而是将 cwnd 的值減半,再為三個備援 ACK 加上三個 MSS。再将 ssthresh 的值記錄為 cwnd 的一半。最終進入快速恢複狀态。

擁塞避免

進入擁塞避免說明 cwnd 的值是上次遇到擁塞的值的一半,這意味着我們距離擁塞并不遠。是以 TCP 不再選擇每過一個 RTT 将 cwnd 的值翻番,而是每次隻将 cwnd 的值增加一個 MSS。

注意是一個RTT增加一個MSS。

有下列兩種改變狀态的情況

當出現逾時丢包時,與慢啟動情況一樣,cwnd 的值置為一個 MSS,ssthresh 的值被更新為 cwnd 值的一半。最終進入慢啟動狀态。

當出現三個備援 ACK 事件的丢包時,TCP 反應相對不那麼劇烈,而是将 cwnd 的值減半,再為三個備援 ACK 加上三個 MSS。再将 ssthresh 的值記錄為 cwnd 的一半。最終進入快速恢複狀态。

快速恢複

進入快速恢複階段後,對收到的每個備援 ACK,cwnd 的值增加一個 MSS。最終當丢失封包段的第一個 ACK 到達時,TCP 在降低 cwnd 後進入擁塞避免狀态。

如果出現逾時事件,與慢啟動和擁塞避免一樣,cwnd 的值置為一個 MSS,ssthresh 的值被更新為 cwnd 值的一半。最終進入慢啟動狀态。

TCP擁塞控制的FSM描述

TCP擁塞控制詳解

TCP連接配接大多數情況下都處于擁塞避免狀态,這個時候的cwnd增長是一種線性增長。而無論是發生了逾時還是快速回複,cwnd的下降都是以減半為基礎的。是以我們稱之為****

對 TCP 吞吐量的宏觀描述

當視窗長度是 w 位元組,且目前往返時間是 RTT 秒時,則 TCP 的發送速率大約是 <code>w/RTT</code>。

假設丢包事件後的視窗長度保持在 W 附近,根據一系列推導我們可知,一條連接配接的平均吞吐量為 <code>0.75W/RTT</code>。

現有丢包率L,往返時間RTT,最大封包段長度MSS,可推導出一條連接配接的平均吞吐量

[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-5nJOsao0-1628833752541)(G:\markdown\計算機網絡\3 運輸層\image-20210627223055720.png)]

假設每條連結都在傳輸一個大檔案,而且無UDP流量通過該瓶頸鍊路。如果每條連接配接的平均傳輸速率接近<code>R/K</code>,即每條連接配接都得到相同份額的鍊路帶寬,則認為該擁塞控制機制是公平的。

實踐中,TCP顯然是不公平的,具有較小RTT的連接配接能更好地搶到更大的帶寬。

對于IP和TCP的擴充方案已經提出并實作和部署,該方案允許網絡明确像TCP發送方和接收方發出擁塞信号。這種形式的網絡輔助擁塞控制稱為明确擁塞通告。

繼續閱讀