拥塞是指由于网络资源不足而造成速率下降、引入额外延时的一种现象。拥塞会造成报文的传输时延、吞吐率低及资源的大量耗费。而在IP分组交换及多业务并存的复杂环境下,拥塞又极为常见。比如由于广域网的带宽通常要比局域网的带宽小,当一个局域网的用户向另一个局域网的用户发送数据时,由于广域网的带宽小于局域网的带宽,数据将不可能按局域网发送的速度在广域网上传输。
拥塞管理通过指定报文调度次序来确保高优先级业务优先被处理。
拥塞发生的主要场景:
拥塞管理是指网络在发生拥塞时使用队列技术,将从一个接口发出的所有报文放入多个队列,使用不同的调度算法来发送队列中的报文流。
什么是队列?
队列指的是在缓存中对报文进行排序的逻辑。当流量的速率超过接口带宽或超过为该流量设置的带宽时,报文就以队列的形式暂存在缓存中。报文离开队列的时间、顺序,以及各个队列之间报文离开的相互关系则由队列调度算法决定。
当网络发生拥塞时,网络设备中没有转发完毕而剩下的数据包,这部分数据包存储在网络设备的内存中,按照一定的规则排列。每个队列可以排列10个1500字节的数据包。也因此队列的单位通常是报文个数而不是报文字节数。
网络设备中的硬件队列和软件队列
在网络设备的出接口处,一般由一个最基本的队列,该队列以FIFO(First IN First Out)的方式调度,我们把该队列放入硬件队列。在硬件队列之前还有一个进行QoS管理和控制软件队列,拥塞发生时,就将存放在内存中等待发送的数据包组成队列,等待调度算法来发送队列中的报文流。
当网络没有发生拥塞时,各接口进入的报文直接进入路由设备自身的硬件队列,发送队列按照FIFO(先进先出)的顺序转发出去。
当拥塞发生时,进入路由器的报文以及自身设备的报文进入软件队列缓存中,由调度算法来进行转发。
路由器设备缓存中的队列分为两种类型:
(1)、系统队列
路由器组网中,由硬件设备运行的维持组网,保障网络连通性,可达性的各种控制协议,组成的队列。系统队列又分为两种:
(2)、用户队列
从路由器入接口进入的流用户使用的各种业务流量。路由器常用队列有FIFO、PQ、CQ、RTPQ、WFQ、CBQ、CBR等队列技术,默认使用FIFO队列。
交换机工作在二层,处理的各业务流数据量大,带宽高,需要传输效率高,因此交换机使用高速硬件直接处理,采用芯片实现QoS队列。这种方式下,交换机采用二层头识别数据类型,主要流量是以使用802.1p的VLAN报文为主,还有来自三层DSCP的流。
交换机根据优先级信任规则,查找QoS映射表,将映射结果对报文进行内部优先级标记,报文映射到本地队列。
报文在入端口,根据映射表入本地队列;
报文在出端口,进行队列调度后发送;
常用的队列:SP、WRR、HWFQ。
FIFO(First In First Out Queuing,先入先出)所有报文按到达转发接口的时间先后顺序,先入先出地发送FIFO队列报文。
优点:处理简单,开销小。
缺点:没有公平性,不同的流之间不互相隔离,关键业务的带宽不能得到保证。
FIFO的配置:
[sysname-Ethernet1/0/3] qos fifo queue-length queue-length
queue-length参数指定了FIFO队列的长度,即其最大可以容纳的报文数量。增加FIFO队列的长度可以减少丢包,但同时也可以增加延迟。
PQ(Priority Queuing,优先队列)调度,就是严格按照队列优先级的高低顺序进行调度。只有高优先级队列中的报文全部调度完毕后,低优先级队列才有调度机会。
采用PQ调度方式,将延迟敏感的关键业务放入高优先级队列,将非关键业务放入低优先级队列,从而确保关键业务被优先发送。
PQ队列的4个队列:
Top(高优先队列)、Middle(中优先队列)、Normal(正常优先队列)和boottom(低优先队列)。默认是Normal(正常优先队列)。
二层交换机配置PQ调度后,按照7、6、5、4、3、2、1、0从高到低的优先级依次进行调度,发送报文。
PQ队列原理:
PQ队列特征:
PQ队列缺点:
1、PQ队列配置事项:
2、流量进入的队列:
配置无对应规则的报文所入的缺省队列:(默认队列为PQ的4个队列之一,是普通队列)
[RA] qos pql pql-index default-queue{bottom | middle | normal | top }
配置PQ队列的分类规则:
配置基于接口的分类规则:
[RA] qos pql pql-index inbound-interface interface-type interface-number queue {bottom | middle | normal | top }
配置基于协议的分类规则:
[RA] qos pql pql-index protocol ip [queue-key key-value] queue {bottom | middle | normal | top }
3、配置PQL各队列的长度
[RA] qos pql pql-index queue {bottom | middle | normal | top } queue-length queue-length
4、在接口上应用PQL
[RA-Ethernet1/0/0] qos pq pql pql-index
5、PQ队列信息
[RA] dis qos pql 5
[RA] dis qos interface Ethernet1/0/0
CQ(Custom Queuing,自定义队列),按照一定的规则将分组分成16类(对应于16个队列),分组根据自己的类别按照先进先出的策略进入相应的CQ队列。
CQ队列调度采用轮询方式。按照预先配置的额度依次从1到16号用户队列中取出一定数量的报文发送。如果轮询的某队列为空,则转到下一个队列。这样保障关键业务能获得较多的带宽,且让非关键业务也能得到相应带宽。
接口拥塞时,报文按匹配规则被送入对应队列;如果报文不匹配任何规则,则被送入默认队列。默认队列默认为CQ的队列1,可以修改。
缺点:由于采用轮询调度各个队列,CQ保证任何数据流的延迟。
CQ队列调度:
上图中,首先判断队列N(N从1开始)的当前发送额度(NQCS)是否大于队列中当前最先入队的报文长度(PL),如果大于则发送报文,然后将该队列的当前发送额度减去发送报文的长度(NQCS=NQCS-PL)。接着下一个队列下一个队列直到前发送额度小于待发长度时(NQCS 这样CQ队列依照顺序进行队列调度,当某个队列为空时,轮询下一队列调度。因此CQ的调度机制能自动增加现存的类别报文的可占带宽。从上也可看出,其中一个队列发送额度用完后,需要等待其他队列发送额度用完后,才会再次调度到本次报文,所以CQ队列的时间延迟比较大,不适合时间敏感的业务。 CQ队列配置事项: 配置无对应分类报文所入的缺省队列: 配置CQ队列长度: 配置CQ队列份额(修改队列缓存的大小)连续发送字节数(默认1500) 配置基于接口的分类: 配置基于协议的分类规则: 接口上应用CQL 配置参数: CQ队列信息显示: WFQ(Weighted Fair Queuing,权重轮询队列)对报文按流特征进行分类。根据IP报文的五元组(源IP地址、目的地址、源端口号、目的端口号、协议号、ToS域中的优先级)等特征,运用Hash算法将不同特征的流分入不同的队列类别中,这个过程也称为散列。 每个队列可以看作一类流,其报文进入WFQ的同一队列。WFQ尽可能公平地分享网络资源,使所有流的延迟和抖动达到最优,让不同队列获得公平的调度机会。WFQ 以 bit 为单位进行调度,Bit-by-bit 调度模型可以完全按照权重分配带宽。 1、WFQ入队机制 按流的“会话”信息分类:根据报文的协议类型、源和目的TCP或UDP端口号、源和目的IP地址、ToS域中的优先级位等自动进行流分类,并且尽可能多地提供队列,以将每个流均匀地放入不同队列中,从而在总体上均衡各个流的延迟。 上图中,对于IP报文设置IP Precedence为权重时,由于IP优先级只0~7,队列为8个。配置WFQ队列数为16时,根据五元组特征Hash时最大分成2个组,每个组包含8个队列;设置DSCP优先级为权重时,则WFQ队列数最少要配置成64,这时所有报文都属于一个组。 按优先级分类:通过优先级映射把流量标记为本地优先级,每个本地优先级对应一个队列号。每个接口预分配8个队列,报文根据队列号进入队列。默认情况,队列的WFQ权重相同,流量平均分配接口带宽。用户可以通过配置修改权重,高优先权和低优先权按权重比例分配带宽。 2、WFQ队列调度 不同的是发送额度的初始值(NQIS)等于队列优先级加1后与100的乘积。如果优先级是0的队列发送额度(NQCS)初始值为100,优先级为4的队列发送额度初始值为500。队列开始调度时从1开始,判断NQCS-PL>=0,从1开始直到N队列,直到当NQCS<PL时,这时将当前队列NQCS+NQIS,转到下一个N+1队列调度。从上可以看出优先级高的发送额度值大,在轮询中不断发送报文,因此报文发送的数据量大;优先级低的发送当NQCS<PL时,等待下一次调度,多次等待下,发送的报文数据量较优先级高的少。 从上图也能看到,小报文在队列中由于NQCS-PL>=0,能较快的发送,而长度大的报文总是通畅的发送,当在发送额度值小只能等待下一轮传输。 Bit-by-bit调度模型 3、分配出口带宽: 公平性更好使多种队列的流量更加公平的转发,防止某一种流量(权重大的)的数据独占整个链路的带宽,最多支持4096个队列,WFQ的队列是按照5元组来分的,并不能手动配置。 WFQ的思想: WFQ是在FQ上述小报文优先的基础上,在计算报文调度次序时增加了优先级方面的考虑。从统计上,WFQ使高优先级的报文获得优先调度的机会多于低优先级的报文。 FQ把进入一个队列的报文称为流,系统对待每个流是均等的,每个流都会平等地分享到当前可用的带宽。 FQ还关心流队列中报文的长度,如果在不同队列间同时存在多个长报文和短报文等待发送,则短报文会优先获得调度,即先调度各队列队首的小报文,这使FQ可减缓各个流的报文间的抖动。 WFQ队列特点: WFQ队列配置任务: WFQ队列长度的配置范围为1~1024,默认为64,最大队列数为16-4096,默认为256。 权重类型:对于使用IP precedence的IP报文,当配置WFQ队列数为16时,WFQ对报文根据五元组特征Hash时最大能分成2个组,每个组里包含8个队列。如果使用DSCP优先级作为权重,则WFQ队列数最小要配置成64,此时所有报文都属于一个组。 集合了PQ调度和WFQ调度各有优缺点。单纯采用PQ调度时,低优先级队列中的报文流长期得不到带宽,而单纯采用WFQ调度时低延时需求业务(如语音)得不到优先调度,如果将两种调度方式结合起来形成PQ+WFQ调度,不仅能发挥两种调度的优势,而且能克服两种调度各自的缺点。 PQ+WFQ调度,调度PQ队列,多个PQ队列按优先级高低顺序进行调度。WFQ或WRR队列进行加权轮循调度。 队列间的PQ+WFQ调度流程 设备接口上的8个队列被分为两组,用户可以指定其中的某几组队列进行PQ调度,其他队列进行WFQ调度。 1、设备接口上的8个队列被分为两组,用户可以指定其中的某几组队列进行PQ调度,其他队列进行WFQ调度。只有WAN侧接口支持PQ+WFQ调度。 2、WRR、DRR及WFQ用户根据自己的需要定义权值,默认权值为10, PQ不需要权值,因为PQ总优先使用接口带宽。Queue4、Queue3、Queue2、Queue1和Queue0队列包含自己的权值,决定彼此之间的带宽划分比例。 3、用户根据不同的业务需要,对各队列中的报文流调度并非是平均的。当调度方式为DRR、WRR、WFQ时,通过给各队列设置不同的权值,可以根据权值对队列进行调度,权值越大的队列被调度的次数相对越多。 华为Queue-profile队列实现 华为设备上可以使用Queue-profile来全局定义可应用到接口的软件队列,当硬件队列拥塞时,Queue-profile 队列系统开始起作用。 队列带宽分配: PQ+WFQ配置事项: 某台设备输出wan端口整形速率为100Mbps,该设备输入端口带宽及输出的端口PIR值为下表: 带宽分配过程如下: (2)、WFQ调度:根据计算公式:WFQ队列的带宽=剩余带宽x本队列权重/所有WFQ队列权重之和,WFQ队列带宽=75Mbps*本队列权重/15。 第一轮EF带宽=75Mbps*5/15=25Mbps,>EF的PIR10M,EF实际获得带宽=PIR=10Mbps,分配给EF的带宽剩余15Mbps。 第一轮AF4带宽=75Mbps*4/15=20Mbps,>AF4的PIR15M,AF4实际获得带宽=PIR=15Mbps,分配给AF4的带宽剩余5Mbps。 第一轮AF3带宽=75Mbps*3/15=15Mbps ,>AF3的PIR,AF3实际获得带宽=PIR=10Mbps,分配给AF3的带宽剩余5Mbps。 第一轮AF2带宽=75Mbps*2/15=10Mbps ,=AF2的PIR10M,AF2实际输入带宽只有5Mbps,因此分配给AF2的带宽剩余5Mbps。 第一轮AF1带宽=AF1带宽=75Mbps*1/15=5Mbps, 端口剩余带宽=15Mbps+5Mbps+5Mbps+5Mbps=30Mbps,AF1的PIR是10M,前面只分到5Mbps,这时将剩余带宽30Mbps分配5Mbps达到AF1的PIR所设定10M,最后的剩余带宽25M分配给BE。 即RTP(Real-time Transport Protocol,实时传输协议)优先对列,是一种保证实时业务(包括语音与视频业务)服务质量的队列急速。 1、RTPQ队列原理 RTPQ队列的归类依据:将RTP报文定义为端口号在一定范围内,并且为偶数的UDP报文,并以此作为归类依据。 注意:可以与CQ、PQ、WFQ共用,但是不能与CBQ共用,因为CBQ里面有EF队列 2、RTPQ队列调度 3、RTPQ的配置与显示 主要参数: 显示RTPQ队列 CBQ(Class-Based Queue,基于类的队列)队列目前是华为官方推荐的队列配置方式,目前,在很多企业子网中,CBQ的队列已经成为主流的队列配置方式。不同于基于qos-profile的基于传统命令行的配置方式,CBQ可以实现对队列的精准分类,实现根据客户需求进行分类。CBQ软件队列,区别于Queue-Profile的是,CBQ使用MQC来配置。 1、CBQ队列原理 CBQ提供4类队列: (1)、EF队列 (2)、LLQ队列 (3)、AF队列 (4)、BE队列 2、华为CBR队列实现 (2)、AF需要显示的定义带宽,这个带宽是最小保证带宽,也是当拥塞发生时最小的可用带宽。 (3)、BE使用WFQ队列机制,不需要显示定义带宽,可使用BW=Minimum{10%,100-EF-LLQ-AF},BW取值至少为接口带宽的1%。
[RA] qos cql cql-index default-queue queue-number
[RA] qos cql cql-index queue queue-number queue-length queue-length
[RA] qos cql cql-index queue queue-number serving byte-count
[RA] qos cql cql-index inbound-interface interface-type interface-number queue queue-number
[RA] qos cql cql-index protocol ip [queue-key key-value ] queue queue-number
[RA-Ethernet1/0/0] qos cql cql-index
[RA] display qos cql
[RA] display qos cql interface Ethernet1/0/04.2.2.4、WFQ队列
入队列之前对流量进行分类,有两种分类方式:
IP网络中IP报文进入WFQ队列,是根据IP报文的五元组将其Hash到不同的组,每个组内再根据不同的优先级分配不同的队列号。
WFQ队列调度时,与CQ队列调度相似,也是轮询调度,同一个队列出访方式是FIFO方式。
Bit-by-bit调度模型可以完全按照权重分配带宽,防止长报文比短报文获得更多带宽,从而减少大小报文共存时的时延抖动。
在出队的时候,WFQ按流的优先级(precedence)来分配每个流应占有出口的带宽。优先级的数值越小,所得的带宽越少。优先级的数值越大,所得的带宽越多。
(1)、为每个流创建一个专用的队列,避免队列的饥饿,延迟,抖动等;
(2)、在所有流间公平,正确地分配带宽;
(3)、WFQ使用 [IP优先级] 作为分配带宽的权重。
(4)、短报文和长报文获得公平的调度:如果不同队列间同时存在多个长报文和短报文等待发送,让短报文优先获得调度,从而在总体上减少各个流的报文间的抖动。
配置WFQ的权重类型、队列长度、队列总数:
[huawei] qos wfq [precedence | dscp ] [queue-length max-queue-length [ queue-numbe total-queue-number] ]4.2.2.5、PQ+WFQ(混合队列调度)
系统最多可定 义优先级为0~7的8个队列。队列索引号分为0、1、2、3或0、…7。设备根据内部优先级选择队列,并按调度机制服务。
假设某端口整形速率为100Mbps,该接口各业务的输入带宽及配置的PIR如下。DSCP的优先级 队列类型 输入带宽(bps) PIR(bps) 应用 CS7 PQ 30M 10M 网络控制 CS6 PQ 15M 25M 网络控制 EF WFQ,权重5 20M 10M VoIP电话业务 AF4 WFQ,权重4 90M 15M 多媒体会议 AF3 WFQ,权重3 10M 10M 视频点播 AF2 WFQ,权重2 5M 10M ERP AF1 WFQ,权重1 20M 10M E-mail/FTP BE 20M 未配置 上网
(1)、PQ队列调度:报文按照优先级高的队列先调度,最高优先级CS7、CS6的控制协议先发送。首先保证PQ流队列的PIR带宽。PQ调度后,剩余带宽=100Mbps-15Mbps-10Mbps=75Mbps。DSCP的优先级 队列类型 输入带宽(bps) PIR(bps) 应用 调度输出带宽(bps) CS7 PQ 15M 25M 网络控制 15 CS6 PQ 30M 10M 网络控制 10 EF WFQ,权重5 20M 10M VoIP电话业务 10M AF4 WFQ,权重4 90M 15M 多媒体会议 15M AF3 WFQ,权重3 10M 10M 视频点播 10M AF2 WFQ,权重2 20M 10M ERP 10M AF1 WFQ,权重1 20M 10M E-mail/FTP 10M BE 20M 未配置 上网 25M 4.2.2.6、RTPQ队列
紧急队列优先级>RTPQ队列优先级>协议队列优先级>其他队列优先级(PQ、CQ、WFQ、FIFO)。
承载语音或视频的RTP报文送入高优先级队列,使其得到优先发送,保证延迟和抖动降低为最低限度。
从上图结构中可以看出:
(1)、匹配的实时业务入RTPQ队列,其他业务入其他数据队列处理
(2)、实时业务入队前按配置的带宽进行限速处理
(3)、RTPQ队列满后进行尾丢弃
(4)、RTPQ将RTP报文定义为端口在一定范围内并且为偶数的UDP报文,并以此归类依据。
(5)、RTP队列可以通FIFO、PQ、CQ和WFQ结合使用,而它的优先级最高
(6)、为了防止RTPQ队列报文占据全部带宽,导致其他队列“饿死”,RTPQ在报文入队前先进行流量监管处理,超过RTPQ预留带宽的流量直接丢弃,在预留带宽以内的流量才能入队。
RTPQ队列的优先级仅次于紧急队列,等同于协议队列,高于其他的数据队列。队列调度时,先检查紧急队列是否为空,如果不空,调度紧急队列报文发送,否则轮询调度RTPQ和协议队列。RTPQ队列内部采用FIFO的出队方式。RTPQ队列每一个报文出队转发后,将调度全交给紧急队列,如果紧急队列不空,发送紧急队列报文,否则发送协议队列的调度。协议队列调度完成后,开始下一轮的调度。如果RTPQ和协议队列都为空,开始调度其他数据队列,其他数据队列为空,或者一次调度完成后,开始下一轮的队列调度。
在接口下配置RTPQ队列:
[RA-GigabitEthernet1/0/0] qos rtpq start-port first-rtp-port -number end-port last-rtp-port-number bandwidth bandwidth [cbs burst]
(1)、start-port:RTP报文的第一个UDP端口号,范围:2000—65535。
(2)、end-port:RTP报文的最后一个UDP端口号,范围:2000—65535。
(3)、bandwidth:RTP队列所占用的带宽,范围:8—1000000,单位为Kbps。
(4)、cbs burst :指定承诺突发尺寸,单位为字节,范围1500—2000000字节。
[RA] display qos queue rtpq interface GigabitEthernet1/0/04.2.2.7、华为CBQ队列
CBQ首先根据IP优先级或者DSCP优先级、入接口、IP报文的五元组等规则来对报文进行分类,然后让不同类别的报文进入不同的队列。对于不匹配任何类别的报文,会送入系统定义的缺省类。
EF(Expedit Forwarding,加速转发)队列,适用于低延时、低丢弃概率、占用带宽不是很大的业务,例如重要业务报文或音频/视频业务。用户定义优先级类来存放延迟敏感的业务,每个类都有一个优先级队列,系统会快速转发该队列里面的数据,但由于严格优先级队列会“过多地优先使用(或用光)接口带宽”,因此,EF队列设置的带宽限速来限制对带宽的使用。
LLQ(Low Latency Queuing,低延时队列),它时延相比EF队列更低。对时延极敏感的应用(如VoIP业务)能提供更好的服务质量保证,它较EF队列有更好的优先级转发能力,但与EF不同的是,LLQ带宽永远不会高于设置的最高上限,即使其他队列有空闲带宽,LLQ也不会抢用空闲带宽。当存在EF队列和LLQ队列时,出现拥塞时,首先丢弃LLQ队列。
AF(Assured Forwarding,确保转发)队列,即确保转发队列。满足需要带宽保证的关键数据业务。每个AF队列分别对应一类用户报文,用户可以设定每类报文占用的带宽。在系统调度报文出队的时候,按用户为各类报文设定的带宽将报文出队发送,可以实现各个类的队列的公平调度。当接口有剩余带宽时,AF队列按照权值分享剩余带宽。同时,在接口拥塞的时候,仍然能保证各类报文得到用户设定的最小带宽。当其他队列带宽未使用时,接口带宽可以分配给当前队列使用。可以保证在网络发送的业务流量没有超过最小可确保带宽的情况下,此队列中报文的丢失概率非常低。确保转发适用于流量较大且需要被保证的业务。对于AF队列,当队列的长度达到队列的最大长度时,缺省采用尾丢弃的策略,但用户还可以选择用WRED丢弃策略。
BE(Best Efford,尽力而为)队列,即尽力而为队列。满足不需要严格QoS保证的尽力发送业务。当报文不匹配用户设定的所有类别时,报文会被送入系统定义的缺省BE(Best Effort,尽力传送)类。BE队列使用接口剩余带宽和WFQ调度方式进行发送。
华为CBR队列实现的配置参数:
(1)、用户定义的类定义相应的流行为,其内容可以是AF、EF、LLQ、BE (定义给default-class)。