1986 年 10 月,隨著負載增加,網際網路的吞吐量崩跌至約容量的千分之一,儘管沒有任何單一鏈路故障。Van Jacobson 診斷出原因:傳送端以最快速度傳輸,並在丟包時以全速重傳,因此網路把容量花在重傳那些只會再次被丟棄的封包上。

他 1988 年的論文提出了慢啟動與壅塞避免。傳送端從一個分段開始,每收到一個確認就將視窗加倍,直到偵測到丟包,然後將視窗減半並緩慢增加。每個傳送端不假設路徑的容量,而是透過回饋來測量並適應。

此設計在一開始刻意保守,因為得知可用頻寬的唯一方法就是去探測它,而唯一安全的探測方式就是溫和地探測。由此產生的行為——加法增加、乘法減少——讓數千個連線共享同一條路徑,而無需中央排程器。

溫和地探測容量;遇丟包則減半

丟包被視為一種訊號,而非錯誤,因此傳送端會在網路被淹沒之前做出反應。

指數成長能快速找到容量,而遇丟包減半則讓恢復過程保持安全。

此演算法是局部的:每個傳送端根據自身的回饋進行適應,因此系統能擴展到數百萬個連線。

它透過改變一個協定的行為,而非添購新硬體,修復了一場系統性故障。

當系統的容量未知且為共享時,讓每個參與者保守地探測,並在收到回饋時退讓——整體便會自我調節。

慢啟動與壅塞避免成為 TCP 壅塞控制的核心,並於 1997 年在 RFC 2001 中被明文規範。後來的變體(NewReno、CUBIC、BBR)改進了探測規則,但探測與退讓的原則仍主導著網際網路大部分頻寬的共享方式。

追溯依據

參考來源

  1. Congestion Avoidance and Control ACM SIGCOMM 1988 (via Lawrence Berkeley National Laboratory) · ee.lbl.gov ·
  2. RFC 2001 — TCP Slow Start, Congestion Avoidance, Fast Retransmit, and Fast Recovery Algorithms IETF / RFC Editor · rfc-editor.org