拥塞管理:
拥塞的产生:
速率不匹配:报文从高速链路进入设备,再由低速链路转发出去
汇聚问题:报文从多个接口同时进入设备,由一个没有足够带宽的接口转发出去
拥塞的影响:
增加了报文传输的时延和抖动
过高的延迟会引起报文重传
使网络的有效吞吐率降低,造成网络资源的损害
加剧耗费大量的网络资源(特别是存储资源),不合理的资源分配甚至可能导致系统陷入资源死锁而崩溃
拥塞管理实现的队列机制:
第一步:将准备从一个接口发出的所有报文放入不同的缓存队列中
(根据报文携带标记对应的LP值与队列索引号的对应关系表,来实现将不同的报文送入不同队列)
LP(本地优先级/内部优先级):优先级映射实现从数据原始携带的QoS优先级到内部优先级或从内部优先级到QoS优先级的映射
第二步:根据各队列间的调度机制实现不同报文的差分转发
队列调度算法:
1.FIFO(First In First Out):先进先出
优点:实现机制简单且处理速度快,处理简单,开销小
缺点:不能有差别地对待优先级不同的报文(尽力而为的服务模型,时延敏感的实时应用的延迟/关键业务的带宽得不到保证)
2.PQ(Priority Queuing):优先级队列调度算法
优点:对高优先级的报文提供了优先转发(4个队列:高优先队列/中优先队列/正常优先队列/低优先队列)
缺点:低优先级队列可能出现“饿死”现象
3.WRR(Weighted Round Robin):加权循环调度(在RR基础上演变而来,RR调度相当于权值为1的WRR调度)
优点:避免了PQ调度的“饿死”现象
缺点:基于报文个数来调度,容易出现包长尺寸不同的报文出现不平等调度;低时延业务得不到及时调度
4.WFQ(Weighted Fair Queuing):加权公平队列调度算法(报文按流特征分类)
优点:可完全按照权重分配带宽;自动分类,配置简单
缺点:低时延业务仍得不到及时调度;无法实现用户自定义分类规则
5.PQ+WFQ
优点:可保证低时延业务得到及时调度;实现按权重分配带宽等
缺点:无法实现根据用户自定义灵活分类报文的需求
6.CBQ(Class-based Queueing):WFQ的扩展
优点:提供了自定义类的支持;可为不同的业务定义不同的调度策略
缺点:由于涉及到复杂的流分类,故启用CBQ会耗费一定的系统资源
提供三类队列:
EF队列:满足低时延业务。
EF队列拥有绝对优先级,仅当EF队列中的报文调度完毕后,才会调度其他队列中的报文。
AF队列:满足需要带宽保证的关键数据业务
每个AF队列分别对应一类报文,用户可以设定每类报文占用的带宽。当系统调度报文出队的时候,会按用户为各类报文设定的带宽将报文进行出队发送,可实现各个类的队列的公平调度
BE队列:满足不需要严格QoS保证的尽力发送业务
当报文不匹配用户设定的所有类别时,报文会被送入系统定义的缺省BE(Best Effort,尽力传送)类。BE队列使用接口剩余带宽和WFQ调度方式进行发送
拥塞管理的配置实现(PQ+WFQ)
拥塞避免:
队列被装满后的传统处理方式:尾丢弃(Tail Drop)
每个队列长度有限,当某一队列已经被装满时,将后续向该队列发送的报文全部丢弃,直至拥塞解除
尾丢弃的缺点:
1.引发TCP全局同步现象
大量TCP报文被丢弃,造成TCP超时,引发TCP慢启动,使TCP减少报文的发送。当队列同时丢弃多个TCP连接的报文时,造成多个TCP连接同时进入拥塞避免和慢启动状态以调整并降低流量
解决:RED(早期随机检测)
在队列未装满时先随机丢弃一部分报文。通过预先降低一部分TCP连接的传输速率来尽可能延缓TCP全局同步的到来
RED为每个队列的长度设定阈值:
队列的长度小于低门限时,不丢弃报文。
队列的长度大于高门限时,丢弃所有收到的报文。
队列的长度在低门限和高门限之间时,开始随机丢弃到来的报文。为每个到来的报文赋予一个随机数,用该随机数与当前队列的丢弃概率比较,大于丢弃概率丢弃。(队列越长,报文被丢弃的概率越高)
2.引起TCP饿死现象
导致原因:尾丢弃无法对流量进行区分丢弃
3.无差别地丢弃
导致原因:尾丢弃无法对流量进行区分丢弃
尾丢弃的解决:WRED(基于RED):对不同优先级数据包/队列设置相应的丢弃策略,实现对不同流量的区分丢弃,弥补尾丢弃的三个缺点,大大提高了链路带宽利用率
实现原理:每一种优先级都能独立设置报文的丢包的高门限,低门限及丢包率
到达低门限时,开始丢包
到达高门限时丢弃所有的报文,随着门限的增高,丢包率不断增加,最高丢包率不超过设置的最大丢包率
是按照一定的丢弃概率主动丢弃队列中的报文
WRED配置需求