解決方案
1986 年 10 月,早期網際網路遭遇了第一次壅塞崩潰:從勞倫斯柏克萊實驗室到相距 400 碼的加州大學柏克萊分校,吞吐量從 32 Kbps 掉到 40 bps。主機以全速重傳遺失的封包,反而讓網路更加氾濫。
Van Jacobson 於 1988 年發表的論文《Congestion Avoidance and Control》說明了這個機制,並提出解方:傳送端在沒有遺失時,每往返一次就把視窗增加一個封包;一旦有封包遺失,就把視窗減半,這就是加法遞增、乘法遞減的策略。
由於每個 TCP 傳送端都遵循同一套演算法,網路無須任何中央控制器,就能達到穩定且大致公平的平衡。這個構想被納入 TCP,後來連同慢啟動、快速重傳與快速恢復一併寫入 RFC 5681。
達成了什麼
偵測到遺失就減半速度;然後再慢慢爬升
為何有效
遺失是每個傳送端本來就會收到的壅塞訊號,因此不需要額外的網路機制。
乘法遞減對問題反應迅速;加法遞增則緩慢地試探容量。
所有傳送端共用同一規則,意味著公平性從個別行為中自然浮現。
它在不更動路由器、也不增加頻寬的情況下解決了這次故障。
可套用之處
當每個行為者各自理性的反應反而讓共享資源更糟時,就改變大家共同遵循的規則:讓安全的行為緩慢放大,讓有害的行為急遽縮小。
後續發展
這套演算法成為 TCP 的預設行為,而 TCP 正是承載網際網路多數流量的傳輸協定。2009 年發布的 RFC 5681 仍將慢啟動、壅塞避免、快速重傳與快速恢復列為標準,而壅塞控制研究也從這篇論文發展成一門獨立的領域。
追溯依據
參考來源
- Congestion Avoidance and Control (Van Jacobson & Michael Karels, November 1988) Lawrence Berkeley National Laboratory · ee.lbl.gov
- RFC 5681 — TCP Congestion Control Internet Engineering Task Force · rfc-editor.org