擁塞控制是重要的傳輸層服務,一定要記住!!
一、擁塞控制原理
1. 擁塞(Congestion)
- 非正式定義:太多發送主機發送了太多數據或者發送速度太快,以至於網絡無法處理。
- 表現:
- 分組丟失(路由器緩存溢出)
- 分組延遲過大(在路由器緩存中排隊)
- 擁塞控制(接收方處理不了) V.s.流量控制(網絡無法處理)
2. 擁塞的代價
- 擁塞時分組延遲太大
- 達到最大吞吐量(throughput)
- 對給定的輸出緩存,要做更多的工作(重傳),造成資源的浪費
- 當多跳路由器情況下,分組被drop時,任何用於該分組的“上游”傳輸能力全都被浪費掉
3. 擁塞的控制
- 端到端的擁塞控制
- 網絡層不需要顯示地提供支持
- 端系統通過觀察loss,delay等網絡行爲判斷是否發生擁塞
- TCP採取這種方法
- 網絡輔助的擁塞控制
- 路由器向發送方顯示地反饋網絡擁塞信息
- 簡單地擁塞指示(1bit):SNA,DECbit,TCP/IP ECN,ATM)
- 指示發送方應該採取何種速率
二、TCP擁塞控制(***)
1. 基本原理
sender限制發送速率——設計變量CongWin(擁塞窗口)
-
動態調整以改變發送速率
-
反映所感知到的網絡擁塞
2. 如何感知網絡擁塞?
3. 如何合理地調整發送速率?
① 加性增-乘性減:AIMD
-
原理:逐漸增加發送速率,謹慎探測可用帶寬,直到發生loss
-
方法:AIMD
- Additive Increase:每個RTT將CongWin增大一個最大段長度MSS——擁塞避免
- Multiplicative Decrease:發生loss後將CongWin減半
② 慢啓動:SS
-
TCP連接建立時,CongWin = 1MSS,可用帶寬可能遠遠高於初始速率:希望快速增長。
-
原理:當連接開始時,指數性增長
指數型增長:
-
每個RTT將CongWin翻倍
-
收到每個ACK進行操作
-
初始速率很慢,但是快速攀升
4. 指數性增長與線性增長切換
變量:Threshold(閾值)
- 當Loss事件發生時,Threshold被設爲Loss事件前CongWin值的1/2
Loss事件的處理
- 3個重複ACKs(網絡還能傳輸一些段):先指數,再線性,遇到擁塞時減半,再線性
- CongWin切到一半
- 然後線性增長
- Timeout事件(擁塞更嚴重):先指數,再線性,遇到擁塞時變爲1,再指數
- CongWin直接設爲1個MSS
- 然後指數增長
- 達到threshold後,再線性增長
三、TCP性能分析
1. TCP throughput:吞吐率
- 給定擁塞窗口大小和RTT,TCP的平均吞吐率是多少?
- 忽略掉慢啓動Slow start
- 假定發生超時是CongWin的大小爲W,吞吐率是W/RTT
- 超時後,CongWin=W/2,吞吐率是W/2RTT
- 平均吞吐率爲:0.75W/RTT
2. TCP的公平性
公平性與UDP
- 多媒體應用通常不使用TCP,以免被擁塞控制機制限制速率
- 使用UDP:以恆的速率發送,能夠容忍丟失
- 產生了不公平
公平性與併發TCP連接
- 某些應用會打開多個併發連接
- Web瀏覽器
- 產生公平性問題