QoS服务策略技术.docx
《QoS服务策略技术.docx》由会员分享,可在线阅读,更多相关《QoS服务策略技术.docx(21页珍藏版)》请在冰豆网上搜索。
![QoS服务策略技术.docx](https://file1.bdocx.com/fileroot1/2023-8/3/d5d33e44-7b36-4f95-bd75-d21b66027487/d5d33e44-7b36-4f95-bd75-d21b660274871.gif)
QoS服务策略技术
QoS服务策略
目录
第1章.简介3
第2章.区分服务(DifferentiatedServices,DiffServ)4
第3章.带宽管理(BandwidthManagement,BwMg)5
3.1可承诺速率控制(CommittedAccessRate,CAR)5
3.2流量整形(TrafficShape)7
第4章.拥塞管理(CongestionManagement,CgMg)9
4.1先进先出排队(FirstInFirstOutQueuing,FIFOQ)10
4.2优先级排队(PriorityQueuing,PQ)10
4.3公平排队(FairQueuing,FQ)11
4.4基于类的加权公平排队(Class-BasedWeightedFairQueuing,CBWFQ)13
4.5低延迟队列(LowLatencyQueuing,LLQ)15
第5章.拥塞避免(CongestionAvoidence,CgAvD)17
5.1选择性报文丢弃17
第6章.BitTorrent流量控制19
6.1BitTorrent基本原理19
6.2运用QoS实现BT流控21
第1章.简介
本章主要讲述IP网络中的服务质量技术。
在传统的IP网络中,所有的报文都被无区别的等同对待,所有经过路由器的报文均尽最大的努力将报文送到目的地,但对报文传送的可靠性、传送延迟等性能不提供任何保证。
随着IP网络上新应用的不断出现,对IP网络的服务质量也提出了新的要求,传统IP网络的尽力而为的服务已不能满足应用的需要。
因为尽力而为的服务根本不可能区分IP网络中的各种流,因此不能为任何应用通信提供优先级或者保证,这使得IP网络无法运载对网络资源和服务有特定要求的通信。
IPQoS致力于解决这个问题。
本章主要介绍QoS区分服务(DifferentiatedServices,DiffServ),根据区分服务的技术特点,分成三个部分:
带宽管理(如CAR等)、拥塞管理(主要是排队机制)和拥塞避免(如SPD)。
第2章.区分服务(DifferentiatedServices,DiffServ)
传统的Intserv模型要求在IP网络中保证每个流的QoS。
随着网络的增大,流数目的增加,状态信息量也将增加,这将导致扩展性问题。
使得Intserv难以在Internet上部署。
于是IETF成立了Diffserv组。
Diffserv是联系Intserv的保证QoS要求和目前传统IP网络所提供的尽力而为服务的桥梁,它通过将通信分为几类并分别为之提供相关的服务来区分通信。
DiffServ是一种根据服务要求对通信进行分类,而后根据分类结果对流入或流出的报文进行不同的处理,以保证网络始终处于较好的通信连接状态。
它是一种多通道服务模型,可以满足不同流的QoS请求。
与集成服务最大的不同在于,区分服务不需要信令交互而达到在网络中预留资源的效果,它仅仅是作用于网络中某一个传输设备的某个接口上,对于流入或流出该接口的报文进行处理。
对于区分服务而言,不需要为每一类通信维护状态信息,它根据配置好的QoS机制来区分每个报文的QoS级别并根据该级别为此报文提供服务。
因此,有时也将提供此种QoS方案的机制称作CoS。
分类的机制分门别类,方法颇多,其常用的方式如:
根据IP报文的优先级分类、根据报文的源、目的地址和端口分类、根据报文的协议分类、根据报文的大小、报文的入接口分类等。
网络就根据这些信息来对报文进行分类,分类结果用于流量监管、流量整形和排队等,从而达到带宽管理、拥塞管理和拥塞避免等功效。
第3章.带宽管理(BandwidthManagement,BwMg)
在提供区分服务的网络的边界,边界流量调节器是必不可少的。
一个非常重要的流量调节器是通信速率管理器,它使得服务提供商能够使用控制功能测量进入网络的客户通信,使之与客户的通信配置文件相符。
3.1可承诺速率控制(CommittedAccessRate,CAR)
通信速率管理需要一种流量度量功能来测量流量。
令牌桶是一种常见的流量测量方案,它可以用来报告分组是否与为之配置的速率参数匹配。
令牌桶仅仅是一种测量工具,它并不对通信进行过滤、改变或采取某种措施。
令牌桶按用户设定的速度向桶中放置令牌,并且用户可以设置令牌桶的容量,当桶中令牌的量超出桶的容量的时候令牌的量不再增加。
当报文被令牌桶处理的时候如果令牌桶中有足够的令牌可以用来发送报文则报文可以通过,可以被继续发送下去,同时令牌桶中的令牌量按报文的长度做相应的减少;当令牌桶中的令牌少到报文不能再发送时报文被丢弃。
在实际应用中CAR不仅可以用来进行流量控制还可以进行报文的标记mark或重新标记re-mark。
具体来讲就是CAR可以设置IP报文的优先级,或修改IP报文的优先级达到标记报文的目的。
典型的令牌桶如下图所示。
黄色小方块表示令牌,灰色方块是数据流,小桶用来盛放令牌。
算法的大意是:
从令牌桶的下面每通过一个单位数据流(比如1Byte)都要耗费桶中的一个令牌,当桶中没有令牌可用时则丢弃当前报文,系统每隔一个单位时间给桶中增加一个令牌,当令牌桶装满时新到的令牌被丢弃。
当数据流没有完全使用到给它分配的带宽时,令牌桶会积累令牌,这时候桶中所有的令牌代表的报文都可以被发送,这样可以允许数据的突发性传输。
当令牌桶中没有令牌的时候报文将不能被发送,只有等到桶中生成了新的令牌报文才可以发送,这就可以限制报文的流量只能是小于等于令牌生成的速度,达到限制流量的目的。
双层令牌桶则是同时具有两个令牌桶的通信速率管理器。
它可以在第一层令牌桶令牌装满了以后,继续往第二层令牌桶中添加令牌;通过数据流的时候,可以在第一层令牌桶令牌不足的情况下,有条件的取第二层令牌桶的令牌,以满足数据流的突发需要。
图31令牌桶
CAR还可以对数据报文进行标记。
例如,当报文符合流量特性的时候可以设置报文的优先级为5,当报文不符合流量特性的时候,可以丢弃,也可以设置报文的优先级为1并继续进行发送。
这样,后续的处理可以尽量保证不丢弃优先级为5的报文,在网络不拥塞的情况下,也发送优先级为1的报文,当网络拥塞时首先丢弃优先级为1的报文,然后才丢弃优先级为5的报文。
CAR可以为不同类别的报文设置不同的流量特性和标记特性。
即首先对报文进行分类,然后,不同类别的报文有不同的流量特性和标记特性。
此外CAR的策略还可以进行串联处理。
例如,可以对所有的报文限制一个总的流量,然后在总的流量中再限制部分报文的流量符合某个流量特性。
a)命令
Router(config-if)#rate-limit{input|output}[access-groupaccess-list-name]circonform-burstexceed-burstconform-action{actions[actionval]}exceed-action{actions[actionval]}命令将在接口上启用CAR
Router#debugrate-limit命令打开CAR调试信息的显示
Router#nodebugrate-limit命令关闭CAR调试信息的显示
b)调试信息
调试信息
解释
CAR:
transmit{input/output}packageoninterfaceinterfaceforconform-action'transmit'
将'transmit'作为顺从行为并转发从接口interface输入/输出的数据包
CAR:
dropped{input/output}packageoninterfaceinterfaceforexceed-action'drop'
将'drop'作为扩展突发行为并丢弃从接口interface输入/输出的数据包
CAR:
continueandsetprecedence{input/output}packageoninterfaceinterfaceforexceed-action'set-prec-continueprecedence'
将'set-prec-continue'作为扩展突发行为并将从接口interface输入/输出的数据包的优先级设置为precedence,然后继续查找下一条规则
CAR:
transmit{input/output}packagematchaccess-listaccess-list-Nooninterfaceinterfaceforconform-action'transmit'
将'transmit'作为顺从行为并转发从接口interface输入/输出并匹配访问列表access-list-No的数据包
3.2流量整形(TrafficShape)
流量整形功能与CAR相同,也是用做限制某个接口的输出带宽。
与CAR不同的是,流量整形只能限制接口的输出带宽。
而不能针对某个流,也不能限制输入方向的带宽。
流量整形使用令牌桶。
在数据包到达时,检测数据包到达前一段时间内接口的输出数据流量。
当接口流量已超过配额时,将数据包缓存,等待令牌到达以后再发送。
流量整形的作用在于在拥塞发生时,将接口的数据包以比较平均的速度发送,平滑接口的输出流量。
a)命令
Router(config-if)#traffic-shapeconform-ratepermit-burst命令启用流量整形。
限制接口输出速率为conform-rate,在1/60秒内的允许突发为permitburst字节。
b)调试信息
流量整形没有调试信息。
第4章.拥塞管理(CongestionManagement,CgMg)
当通过路由器的数据量很大,超过了路由器的处理限制时,路由器会发生拥塞。
拥塞的严重后果是导致整个网络的通信变得不再可靠,用于衡量网络服务质量的端到端延迟、抖动和包丢失率都增加了。
拥塞管理旨在在网络发生拥塞的时候对某些数据流进行照顾,优先保证这些数据流的服务质量。
拥塞管理可分为拥塞避免和拥塞管理。
⏹拥塞避免。
通过在网络还未发生拥塞的时候,就有选择地对一些非关键或不要求特别服务质量的报文进行丢弃,避免网络发生拥塞。
我们可以采用SPD作为拥塞避免的手段。
⏹拥塞管理。
在输出报文时,通过对不同的数据流进入不同的输出保持队列,并优先调度要求服务质量保证的数据流所在的队列,以保证这些数据流的服务质量。
我们可以选择PQ、FQ、CBWFQ或LLQ作为拥塞管理的方法。
MP系列路由器中各队列对比:
默认/最大队列数量
优点
缺点
FIFO
1/1个
不需要配置易于使用,处理简单、延迟小
传统尽力而为的调度方式,没有任何服务质量可言
PQ
4/4个
实现绝对优先调度,绝对保证了实时音/视频流的调度,延迟、抖动小
处理速度慢,绝对优先可能造成低优先级队列中数据包得不到调度
FQ
16/255个
实现公平性,配置简单
影响处理速度
CBWFQ
16/255个
照顾某些流的同时保证了其它流的公平性
影响处理速度,配置复杂
LLQ
1/1个
绝对保证给定带宽下的数据流的延迟、抖动最小。
特别适合实时流的应用,同时保证了其它流的公平性
影响处理速度,对超过带宽的数据包直接丢弃,增加了丢弃率。
作为附属队列,只能和CBWFQ联合使用
4.1先进先出排队(FirstInFirstOutQueuing,FIFOQ)
路由器按照分组到达输出队列的顺序来传输分组,对于这样的排队方式称为先进先出排队(FIFO)。
FIFO是最基本的排队方式,传统尽力而为的IP网络中的排队方式。
在FIFO队列中,分组进入队列的顺序和被传输的顺序相同。
它没有区分流的机制,因此不能使一个流优先于其他流。
流所获得的服务的频率与其向网络发送数据的速率成正比,所以FIFO也不能为具有相同优先级的流提供公平和保护。
图41FIFO队列
FIFO队列不需要用户配置,默认是采用的。
4.2优先级排队(PriorityQueuing,PQ)
优先级队列维护4个输出子队列,按照优先级从高到低依次为高(high)、中(medium)、普通(normal)和低(low),网络管理员可以将数据流归到其中任何一个子队列中。
在报文到达接口后,首先对报文进行分类,然后按照报文所属的类别让报文进入所属队列的尾部。
在报文发送时,高优先级队列中的分组首先被传输,当这个队列为空以后,中优先级队列中的分组开始传输,依次类推。
如果相对高优先级的队列中有分组等待服务,相对低优先级的队列中的分组就不会被传输。
总是在所有优先级高的队列发送完毕后,再发送低优先级队列中的报文,这样在每次发送报文时,总是将优先级高的报文先发出去。
保证了属于较高优先级队列的报文有非常低的时延,其报文的丢失率和通过率这两个性能指标在网络拥塞时也可以有一定的保障。
网络管理员需要将关键任务数据归类到高优先级,而不管是否会在网络拥塞时占用较低优先级通信的带宽时,可以采用优先级排队。
当路由器发生拥塞时,关键任务数据可能占用所有的带宽。
如果高优先级通信在一段时间内等于或超过线路速率,优先级排队总是让高优先级的通信先通过,然后才是中优先级。
图42优先级队列
a)命令
Router(config-if)#priority-grouppriority-list-no在接口上启用优先级队列
Router(config)#priority-listlist-no…可以在全局模式下配置优先级队列的规则
Router#debugpq用于打开优先级队列的调试信息的显示
Router#nodebugpq用于关闭优先级队列的调试信息的显示
b)调试信息
调试信息
解释
PQ:
enquequeue[queueid],packetbyte=bytes
大小为bytes的数据包被放入了队列queueid
PQ:
dequefromqueue[queueid],packetbyte=bytes
大小为bytes的数据包从队列queueid中取出
4.3公平排队(FairQueuing,FQ)
前面提到FIFO队列是不能公平的分配资源。
为了提供公平的分配,提出了一种广泛认可的分配方案,叫做最大-最小公平-份额分配方案。
其定义如下:
⏹按需求量从小到大分配资源;
⏹任何用户得到的资源份额不会超过他所需的;
⏹需求没被满足的用户资源份额相同。
完美的最大-最小公平-份额分配方案在实际中是不可能是实现的,但是可以实现一些近似的方案。
公平排队方案就是完美的最大-最小公平-份额分配方案的一种近似实现。
公平排队只需很少的配置,因为它动态地检测应用通信流并自动为这些流管理包。
它主要是根据流的特征(包括目的地址,目的端口,源地址,源端口和IP协议号)来自动归类排队数据包。
在这个过程中公平排队以流的特征为参数采用HASH算法来自动完成不同的流的入队,相同hash值的流进入同一队列。
如果队列不存在则为该通信流构造一队列,如果当前没有单独可用的空队列,则放入默认队列中去。
因为FQ自动地构造队列和把包分类到那些队列中,因此不必像优先级排队那样配置不同类型通信的分类表,并且FQ还可以自动维护已分配的队列。
FQ的队列数目N是可以配置的。
系统的默认值是17(0-16)。
每个队列被自动指定一个权重,每个队列中的数据包得到服务的频率与权重成正比。
在通常情况下FQ中每个队列的权重是相等的。
但是某些应用进程(如RSVP)可能会改变FQ中队列的权重。
下面是公平排队的出入队示意图。
图43公平队列
数据包到达以后,在分类时,将依照数据包的流属性并依照一定的算法得到一个HASH值,并查找与此HASH值相等的队列,将数据包放到此队列的队尾;如果没有任何一个队列的HASH值与数据包的HASH相等,则寻找一个空队列,并将此队列的HASH赋为数据包的HASH;如果所有队列都被其他流所占用,则将数据包放入默认队列中等待调度。
显然,队列的数量和系统能够管理的数据流的数量有直接的关系,用户也可以更改迈普系列路由器中FQ的队列数量。
当决定了数据包应该进入的队列以后,将根据此队列的权重和数据包的大小来计算此数据包的序号。
序号的大小与数据包的大小成正比,与队列的权重成反比。
所以,字节数越小,数据包的序号越小;数据包所在的队列的权重越大,数据包的序号越小。
系统在调度的时候,查找所有的FQ队列,比较所有队列第一个数据包的序号,选择序号最小的数据包并调度。
由于数据包的序号直接由队列的权重和数据包大小所决定,序号又决定了数据包获得调度的可能性,所以FQ队列可以实现公平性。
a)命令
Router(config-if)#fair-queue可以简单地在接口上启用公平队列
Router#debugwfq打开公平队列的调试信息的显示
Router#nodebugwfq关闭公平队列调试信息的显示
b)调试信息
调试信息
解释
WFQ/CBWFQ:
enquequeue[qid]:
weight=weight,packetbyte=bytes
大小为bytes字节的数据包被放入队列qid中,队列权重为weight
WFQ/CBWFQ:
dequefromqueue[qid]:
weight=weight,packetbyte=bytes
大小为bytes字节的数据包从权重为weight的队列qid中取出
WFQ/CBWFQ:
queueVtimeerror,pleaseNOqueueontheinterfacefirstandreuseit
系统的序列号出现了错误,需要在接口上取消公平队列然后再重新启用
4.4基于类的加权公平排队(Class-BasedWeightedFairQueuing,CBWFQ)
CBWFQ是一种在调度时区别对待不同的通信类的队列调度规则。
不同的通信类得到的服务频率与该类的权重/带宽成正比。
CBWFQ根据各种通信参数(如IP优先级,访问列表,输入接口,协议类型)将通信的数据分成不同的类。
然后为每一个类指定一个权重/带宽。
通信类得到服务频率与该类的权重/带宽成正比。
这样就改变了fair-queue不允许用户对流配置权重/带宽的局限性。
图44基于类的加权公平排队
如图所示,CBWFQ首先根据报文进入网络设备的接口,报文的协议,报文是否匹配访问列表以及报文的IP优先级对报文进行分类。
然后让不同类别的报文进入不同的队列。
对于不匹配任何类别的报文被送入普通WFQ队列按WFQ的方式进行处理,即按照流的方式进行处理。
CBWFQ的队列包括二层协议队列、RSVP队列、LLQ队列、WFQ队列。
其中二层协议队列留给重要的链路控制信息。
RSVP队列留给RSVP协议使用。
在配置LLQ后,优先类报文入队到LLQ队列。
剩下的报文将进入WFQ队列,WFQ队列包括为通信类预留的WFQ队列,和普通WFQ队列。
CBWFQ基于WFQ(WeightedFairQueuing)实现。
在WFQ队列中为通信类预留了一定数量的队列。
非优先类的每个通信类对应预留队列中的一个队列。
此队列根据用户配置的带宽设置权重(权重=所占带宽百分比)。
如果策略中的非优先级通信类个数超过了预留队列的个数,超过的通信类中的报文将进入默认队列(最后一个队列)。
其它不属于任何一个通信类的报文按照WFQ的入队规则进入到非为通信类预留的普通WFQ队列中。
无法入队到普通WFQ队列中的包将进入默认队列。
普通WFQ队列及默认队列的权重为(100-通信类队列占的带宽)/活动的(普通WFQ队列的个数+1)。
调度出队时,如果优先队列0中有报文,总是优先发送优先队列0中的报文。
在没有配置LLQ的情况下,如果优先队列0中没有报文,则按照WFQ的调度规则调度其他队列的报文。
CBWFQ中的队列数目也是允许用户配置的。
其最大值为255,默认值为16。
当CBWFQ中的队列的长度达到队列的最大长度时默认采用尾丢弃的策略。
a)命令
Router(config-if)#service-policyoutputpolicy-name在接口上启用以policy-name为规则的CBWFQ
Router(config)#classclass-name进入Router(config-cmap)#下进行规则类class-name的配置
Router(config)#policy-mappolicyname进入Router(config-pmap)#下进行规则policyname的配置
Router#debugwfq打开CBWFQ调试信息的显示,因为和WFQ使用同样的算法,所以使用WFQ的调试信息开关
Router#nodebugwfq关闭CBWFQ调试信息的显示
b)调试信息
因为CBWFQ与WFQ采用同样的算法,所以与WFQ相同的调试信息不再列出
调试信息
解释
CBWFQ:
policyno=pid,classno=cid,classname=classname
到达的数据包属于规则号为pid,类号为cid,类名为classname的类,如果没有匹配到规则类,则不会显示此调试信息
4.5低延迟队列(LowLatencyQueuing,LLQ)
LLQ在CBWFQ的基础上使某些类成为优先类,这些类具有绝对优先调度的特权,保证了优先类的延迟和延迟抖动最小,缺点是其他类有可能得不到及时的调度。
可以将任何一个类在策略中配置为优先类。
优先类报文直接进入优先队列LLQ。
可以为优先队列LLQ配置带宽。
优先队列LLQ也是一种优先队列,并且是用户数据队列中优先级最高的队列。
优先队列LLQ中的报文在接口没有拥塞的时候(所有其他队列中没有报文),可以优先发送;如果接口拥塞(其他队列中有报文),进入优先队列的报文将被限速,超出规定流量的报文将被丢弃。
配置了LLQ后,调度出队时,如果优先队列0中有报文,总是优先发送优先队列0中的报文。
直到优先队列0中没有报文,才继续发送优先队列LLQ中的报文。
队列LLQ中的报文也被优先于其他队列而调度。
当0队列和(在所配置带宽范围内)LLQ队列中都没有可以被调度的报文了,才按照WFQ的调度规则调度其他队列的报文。
LLQ作为CBWFQ的附件,调试信息和命令与CBWFQ相同。
第5章.拥塞避免(CongestionAvoidence,CgAvD)
由于内存资源的有限,按照传统的处理方法,当队列的长度达到规定的最大长度时,所有到来的报文都被丢弃,对于TCP报文,如果大量的报文同时被丢弃,将造成TCP等待超时,从而引发TCP的慢启动和拥塞避免机制,使TCP的窗口立即减小,以减少报文的发送。
当队列同时丢弃多个TCP连接的报文时,将造成多个TCP连接同时进入慢启动和拥塞避免,称之为TCP全局同步。
全局同步的产生,使得数据源发向队列的报文的流量总是忽大忽小,带宽不能得到合理的利用;队列长度的大范围变化又使得报文的时延不可估计,抖动变大。
通常使用某种分