拥塞定义:当网络中有包延时和包丢失,导致网络和性能下降。网络层和传输层都需要处理拥塞。
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效果好。