1. 擁塞原因與代價
- 擁塞的代價
- 當分組的到達速率接近鏈路容量時,分組經歷巨大的排隊時延。
- 發送方必須執行重傳以補償因為緩存溢出而丟棄的分組。
- 發送方在遇到大時延時進行的不必要重傳會引起路由器利用其鏈路帶寬來轉發不必要的分組副本。
- 當一個分組沿一條路徑被丟棄時,每個上游路由器用於轉發該分組到丟棄該分組而使用的傳輸容量最終被浪費掉了。
- 運輸層向網絡層中發送報文段(含有初始數據或重傳數據)的速率用
表示,它有時被稱為網絡的供給載荷。
2. 擁塞控制方法
- 端到端的擁塞控制:網絡層沒有為運輸層提供顯示幫助,即使網絡中存在擁塞,端系統也必須通過對網絡行為的觀察來推斷。TCP采用端到端的方法來解決擁塞控制問題,因為IP層不會向端系統提供有關網絡擁塞的反饋信息。
- 網絡輔助的擁塞控制:服務器向發送方提供關於網絡中用色狀態的顯示反饋信息。還有一些更復雜的網絡反饋比如ATM可用比特率擁塞控制機制(服務器顯示地通知發送方服務器能支持的最大主機發送速率)。網絡輔助的擁塞控制有兩種反饋擁塞信息的形式。
- 第一種是直接反饋,信息由路由器發送給發送方,這種方式采用了一種阻塞分組的形式。
- 第二種是路由器標記或更新從發送方流向接收方的分組中的某個字段來指示擁塞的產生。
3. TCP擁塞控制
-
TCP所采用的方法是讓每一個發送方根據所感知到的網絡擁塞程度來限制其能向連接發送流量的速率。
-
TCP發送方跟蹤一個擁塞窗口cwnd,它對一個TCP發送方能向網絡中發送流量的速率進行了限制。在一個發送方中未被確認的數據量不會超過 cwnd 和 rwnd(接收窗口) 中的最小值,即滿足以下公式。
LastByteSent - LastByteAcked ≤ min{cwnd,rwnd}-
注意rwnd是流量控制中的概念。在下面的討論中,我們將接收方緩存視為無限大,這樣來討論擁塞控制而避免流量控制的問題。
-
在每個RTT的起始點,上面的限制條件允許向連接發送cwnd個字節的數據,在RTT結束時發送方接收對數據的確認報文。因此發送方的發送速率大概是
cwnd/RTT字節/秒。通過調節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都會翻倍。

- 每有一個報文被首次確認,就增加一個MSS。這導致了每一個RTT內cwnd都會翻倍。
-
有下列三種改變狀態的情況
-
如果存在超時指示的丟包事件,將 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 的一半。最終進入快速恢復狀態。
- 進入擁塞避免說明 cwnd 的值是上次遇到擁塞的值的一半,這意味着我們距離擁塞並不遠。因此 TCP 不再選擇每過一個 RTT 將 cwnd 的值翻番,而是每次只將 cwnd 的值增加一個 MSS。
-
快速恢復
- 進入快速恢復階段后,對收到的每個冗余 ACK,cwnd 的值增加一個 MSS。最終當丟失報文段的第一個 ACK 到達時,TCP 在降低 cwnd 后進入擁塞避免狀態。
- 如果出現超時事件,與慢啟動和擁塞避免一樣,cwnd 的值置為一個 MSS,ssthresh 的值被更新為 cwnd 值的一半。最終進入慢啟動狀態。
-
TCP擁塞控制的FSM描述

-
TCP連接大多數情況下都處於擁塞避免狀態,這個時候的cwnd增長是一種線性增長。而無論是發生了超時還是快速回復,cwnd的下降都是以減半為基礎的。所以我們稱之為****
-
對 TCP 吞吐量的宏觀描述
- 當窗口長度是 w 字節,且當前往返時間是 RTT 秒時,則 TCP 的發送速率大約是
w/RTT。 - 假設丟包事件后的窗口長度保持在 W 附近,根據一系列推導我們可知,一條連接的平均吞吐量為
0.75W/RTT。
- 當窗口長度是 w 字節,且當前往返時間是 RTT 秒時,則 TCP 的發送速率大約是
-
現有丟包率L,往返時間RTT,最大報文段長度MSS,可推導出一條連接的平均吞吐量
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-5nJOsao0-1628833752541)(G:\markdown\計算機網絡\3 運輸層\image-20210627223055720.png)]
4. 公平性
- 假設每條鏈接都在傳輸一個大文件,而且無UDP流量通過該瓶頸鏈路。如果每條連接的平均傳輸速率接近
R/K,即每條連接都得到相同份額的鏈路帶寬,則認為該擁塞控制機制是公平的。 - 實踐中,TCP顯然是不公平的,具有較小RTT的連接能更好地搶到更大的帶寬。
5. 明確擁塞通告:網絡輔助擁塞控制
- 對於IP和TCP的擴展方案已經提出並實現和部署,該方案允許網絡明確像TCP發送方和接收方發出擁塞信號。這種形式的網絡輔助擁塞控制稱為明確擁塞通告。
