網際網路筆記:TCP 擁塞控制
閱讀此篇前,建議先複習 網際網路筆記:TCP。
在網路傳輸中,TCP 除了提供可靠的資料傳輸,還需要確保網路不會因為過量資料而陷入壅塞——當網路發生壅塞時,就很容易陷入「接收端丟封包->發送端重丟更多封包->封包排隊排更久->接收端丟封包」的惡性循環中,最後變成擁塞崩潰 (Congestion Collapse,1980 年代曾經發生過)。
擁塞控制的核心概念
最後發送Byte - 最後接收Byte <= min(cwnd, rwnd)
- cwnd: 擁塞控制窗口 (由網路決定)
- rwnd: 接收端的接收窗口 (由接收端 buffer 決定)
只要有丟包或延遲,TCP 就會認為網路壅塞並降低 cwnd。
擁塞控制常見機制
慢啟動 (Slow Start)
用於在傳輸開始時,通過指數級增長 cwnd 直到達到慢啟動閾值 (ssthresh),以此試探出網路負載擁塞避免 (Congestion Avoidance)
當擁塞窗口達到 ssthresh 後,會從指數增長轉為線性增長,以更平穩地逼近網路快速重傳 (Fast Retransmit)
在接收到三次重複的 ACK 後(表示資料包遺失)觸發,不必等到計時器過期才重傳快速恢復 (Fast Recovery)
在快速重傳後,不進入慢啟動階段的情況下,快速調整 cwnd
下面的圖片可以更好理解這四個機制的運作情形

(圖片 reference)
總之,TCP 擁塞控制的精髓在於動態調整 cwnd,這套機制讓 TCP 在「傳輸效率」與「網路公平性」之間取得平衡。
留言
張貼留言