擁塞定義:當網絡中有包延時和包丟失,導致網絡和性能下降。網絡層和傳輸層都需要處理擁塞。
Congestion Control 和 Flow Control 區別
Congestion Control:確保網絡能夠投遞數據包,涉及所有的主機和路由器。
Flow Control: 確保接受方和發送方能夠正確地工作,保證快的發送方不會淹沒接收方。
擁塞控制的方法
- 增加路由器,帶寬。
- 改變路徑權重。如果某一條線路出現擁塞,就增加這條路徑的權重,讓數據報走其他路徑。
- 准入控制。減少負載,拒絕新連接。這有兩個問題
-
- 找出擁塞的源機
- 如何通知擁塞源機減慢發包速度。
- load shedding:如果以上策略失敗,就將數據報直接丟棄。這個方法的問題是丟什麼包?新包還是舊包?這取決於應用場景。
Traffic Throttling 交通控制
需要解決兩個問題
- 路由器能夠預判擁塞
- 路由器及時通知引起擁塞的源機。
擁塞通知源機的方法
- choke packets:路由器發送choke packets給源機。源機接受到choke packets時,需要減少發包速度。
- explicit Congestion notification:路由器不再另外發送choke packets,而是在發往源機的數據報標記ECN,源機幾首包標有ECN的數據包後,就需要主動減慢發包速度。
- Hop by hop Backpressure:當路由器向源機發送Choke Packet是,沿途的路由器收到Choke Packet時,都主動減慢發包速度。而上面的“choke Packet”是源機收到Choke Packet時,主動減慢發包速度。從而導致下路的路由器包減少。
Random Early Detection
大部分情況下,擁塞的主機不是用ECN標籤中獲知擁塞,而是從包的丟失上預感到擁塞的出現。
RED策略大致如下:當排隊的包的大小達到一定閥值,路由器隨機丟棄一部分包。當源機發現包沒有被確認時,它會主動減慢發包速度。
實際情況是RED比Load Shedding效果好。