TCP/IP(尤其是 TCP)偵測網路**壅塞(congestion)**主要靠「傳輸層的回應行為」,也就是透過封包丟失、延遲變化等訊號間接判斷。下面分層與機制詳解:
---
? 一、壅塞偵測的核心原理
TCP 並沒有直接感知網路流量負載的能力,而是根據「資料是否順利到達」來間接推測壅塞。
壅塞的典型徵兆包括:
1. 封包遺失(packet loss)
⇒ 表示中間節點(router/switch)緩衝區滿溢。
⇒ 最直接的壅塞指標。
2. RTT(Round-Trip Time)變長
⇒ 表示排隊延遲增加。
⇒ 是壅塞即將出現的早期訊號。
---
⚙️ 二、TCP 壅塞偵測的主要機制
1️⃣ 丟包偵測
TCP 透過兩種方式得知封包遺失:
偵測方式 說明 範例
超時重傳 (Timeout) 若在 RTO(重傳逾時)內未收到 ACK,視為封包遺失。 常見於嚴重壅塞或整個路由丟失。
重複 ACK (Duplicate ACKs) 若收到三個相同的 ACK,代表某個封包未到。 觸發「快速重傳」(Fast Retransmit)。
---
2️⃣ RTT 變化監控
TCP 會動態估計 RTT 平均值與變異量。
若 RTT 明顯上升,意味路由器緩衝區排隊變長 → 壅塞可能發生。
此訊號常配合 延遲基礎控制算法(如 Vegas、BBR) 使用。
---
? 三、壅塞控制算法如何反應
✴️ 1. Reno / NewReno(傳統丟包導向)
使用「加倍減半(AIMD)」策略:
無壅塞:線性增加擴大視窗。
偵測壅塞:視窗減半(乘法遞減)。
壅塞偵測依據:封包遺失或重複 ACK。
✴️ 2. Vegas(延遲導向)
不等丟包才反應,而是監控 RTT。
若實際 RTT 明顯高於期望 RTT,即提前減少傳送速率。
壅塞偵測依據:延遲增加。
✴️ 3. BBR(Bottleneck Bandwidth and RTT)
不依靠丟包,而根據「瓶頸頻寬 × 最小 RTT」動態估測。
壅塞偵測依據:傳輸速率與瓶頸頻寬的差距。
---
? 四、關鍵參數與指標
指標 代表意義 偵測方式
RTT 傳輸延遲 通過 ACK 時間計算
cwnd(壅塞視窗) 當前可傳輸的資料量 TCP 自動調整
ssthresh(慢啟動閾值) 控制線性與指數增長分界點 依壅塞事件更新
dupACKs 重複確認數量 若 ≥3 則觸發快速重傳
RTO 重傳逾時時間 基於 RTT 平均與偏差動態調整
---
? 五、整體流程概念圖(簡化文字示意)
[正常傳送]
↓(監控 RTT)
[RTT 明顯變長?]
↓ 是 → 減少傳輸速率 (Vegas/BBR)
↓ 否
[ACK 正常?]
↓ 否 → (丟包) 快速重傳 + cwnd 減半
↓ 是 → 緩慢增加 cwnd
---
? 六、延伸:主動式壅塞偵測(AQM, ECN)
現代網路中還有主動壅塞回報機制:
RED (Random Early Detection):
路由器在壅塞前,隨機丟包提醒 TCP 放慢速度。
ECN (Explicit Congestion Notification):
不丟包,直接在 IP 標頭打標記,通知 TCP「壅塞即將發生」。
---
✅ 總結一句話:
> TCP 透過「封包丟失」與「延遲上升」來發現壅塞,並依據不同演算法(Reno、Vegas、BBR…)動態調整傳輸速率,使網路維持在穩定且高效的狀態。
---
是否要我幫你畫出 TCP 壅塞偵測與控制流程圖(含 AIMD、Vegas、BBR 分支)?
這樣會更直觀看到整個偵測與反應過程。