網際網路筆記: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

下面的圖片可以更好理解這四個機制的運作情形 

TCP Congestion Control Algorithm

  (圖片 reference)


                                                                                                                                           

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


 

Reference 

維基百科:TCP

網際網路期末考筆記 

留言