出处:http://blog.163.com/k_hunter/blog/static/295037242011313842354/
QOS定义:
从技术角度而言,Qos是网络中管理数据流的可用带宽、延迟、抖动以及分组丢弃的技术集合。
PHB(Per-Hop Behavior)是DS节点作用于数据流的行为。网络管理员可以配置DSCP到PHB的映射关系。
如果DS节点接收到一个报文,检查其DSCP,发现未定义到PHB的映射,则DS节点将选择采用缺省PHB(即Best-Effort,DSCP=000000)进行转发处理。每个DS节点必须支持该缺省PHB。
目前,IETF定义了四种标准的PHB:
l 类选择码CS(Class Selector)
l 加速转发EF(Expedited Forwarding)
l 确保转发AF(Assured Forwarding)
l 尽力而为BE(Best-Effort)
其中,BE是缺省的PHB。
(1)Default(BE) 000 000
标记000000在RFC2474中被定义为尽力服务。这意味只能理解IP优先级的路由器应该是000,也就是在IP优先权环境中尽力服务的定义。
(2)Class Selector(CS)
同样的,RFC2474预留了所有格式为xxx000的标记,以提供与IP优先权值的后向兼容。
如下表:
位优先权含义
001000 类选择1:无区别服务的节点读做001,按优先级1(priority)处理
010000 类选择2:无区别服务的节点读做010,按优先级2(immediate)处理
011000 类选择3:无区别服务的节点读做011,按优先级3(flash)处理
100000 类选择4:无区别服务的节点读做100,按优先级4(flash override)处理
101000 类选择5:无区别服务的节点读做101,按优先级5(critical)处理
110000 类选择6:无区别服务的节点读做110,按优先级6(internet)处理
111000 类选择7:无区别服务的节点读做111,按优先级7(network)处理
(3)保证转发(Assured Forwarding)
AF保证转发根据DSCP值来定义类别,它对于理解DSCP AF术语和DSCP值之间的对应关系至关重要。AF定义了4种AF类型:AF1x-AF4x,每个类之间都彼此完全独立,其中类别AF4比类别AF1更重要。在每种类别中,有3种丢弃概率。根据要求的吞吐量、延迟、抖动和丢包率,用户可以配置数据报的PHB,或者根据访问网络服务的优先权配置PHB,这取决于网络的策略。AF PHB定义了一种给通信流类别提供不同转发保证的方法。
DSCP中前3位用来指定AF PHB的类别,接下来2位指定丢弃概率,最后一位总是为0
表:
PHB 类别 丢弃概率 DSCP值
AF 类别1 AF1x AF11(丢弃概率低) LOW 00 001010 10
AF12(丢弃概率中) MEDIUM 00 001100 12
AF13(丢弃概率高) HIGH 00 001110 14
AF 类别2:AF2x AF21(丢弃概率低) LOW 00 010010 18
AF22(丢弃概率中) MEDIUM 00 010100 20
AF23(丢弃概率高) HIGH 00 010110 22
AF 类别3:AF3x AF31(丢弃概率低) LOW 00 011010 26
AF32(丢弃概率中) MEDIUM 00 011100 28
AF33(丢弃概率高) HIGH 00 011110 30
AF 类别4:AF4x AF41(丢弃概率低) LOW 00 100010 34
AF42(丢弃概率中) MEDIUM 00 100100 36
AF43(丢弃概率高) HIGH 00 100110 38
(4)EF(Expedited Forwarding,快速转发)
快速转发PHB(Expedited Forwarding PHB)可以用来实现的丢失率,低延迟,低抖动,确定带宽,端到端服务.EF PHB针对VoIP和视频会议这样的应用. 导致分组延迟和分组抖动的主要原因是如果一个接口接收到的待转发流量超过其负载能力时,会形成排队延迟, 排队延迟通常是在拥塞时,队列过长引起的,EF PHB确保通信不需要排队或队列足够短。
路由器可以通过使用不同的EF功能实现方法, 为某个端口上特定的离开速率分配资源。 当EF通信可以在高度加权的队列上传送,例如CBWFQ,WRR,DRR等分组调度技术提供了这个功能。对于网络中的 EF通讯,推荐使用DSCP 101110(46)。RFC建议在多数cisco 设备中使用监控程序对EF数据报进行速率限定。特别地,如果配置要求为所有标记DSCP46的分组提供EF,而且如果为具有EF PHB权限的数据流配置128Kbit/s的出口速率,同时带有DSCP46标记的数据流达到129Kbit/s的速率,有1kbit/s带有DSCP46标记的数据流将被丢弃,以确保接收EF队列的速率不超过发送速率。但是如果没有发生拥塞,队列也不会被激活,监控机制也不会被激活。
EF PHB对应的DSCP为: 101110, 46
EF PHB可提供低丢包率、低时延、确保带宽的应用,其提供的QoS质量高于AF PHB.
队列技术
FIFO(First In First Out,先入先出)
是一种最简单的队列机制。 分组的传输顺序与接收顺序相同
2.048M以上接口默认队列方式,硬件队列(TxQ)也基于该队列规则处理数据包.
2.048m以下默认队列方式为WFQ只有一个队列,tail-drop
想在小于E1的接口上也启用FIFO,可在接口上输入no fair-queue命令
设置FIF的队列缓存:R1(config-if)#hold-queue 200 out (200为数据包的个数)
PQ(Priority Queuing,优先级队列)
提供4种队列,高优先级、中优先级、正常优先级和低优先级队列
每个队列为fifo调度.tail-drop.
只要高优先级队列中有数据包,一定先转发高优先级队列的数据包,传完高优先级队列的才传低优先级队列中的
建议在低带宽接口上使用优先级排队.前提是关键型任务或增值应用的流量提供绝对的优先级保证
access-list 101 permit ip any any
priority-list 1 protocol ip high list 101 //把access-list 101定义的数据映射到高优先级队列
priority-list 1 interface fa0/0 medium //把来自fa0/0的流量映射到中等优先级队列
priority-list 1 default normal //所有其他流量映射到正常优先级队列
priority-list 1 queue-limit 20 30 40 50 //定义队列深度,分别代表high,medium,normal,low
interface s1/1
priority-group 1 //把PQ应用在接口上
show queueing (看所以队列)
一般来说,高优先级的会优先传输,因此不需要很深的缓存队列。但是如果超出了队列深度,那么高优先级的也将会有丢弃。默认是20、40、60、80
CQ(Custom Queuing,定制队列)
有1~16队列,0队列是PQ队列,为最优,系统队列,用于处理网络控制信息 ,共17个队列
CQ使用WRR(Round-Robin)机制
建立在PQ的基础上
轮循调度,第一个传完就传第二个
为了能够为每个队列分配一定的带宽,必须为每个队列定义一定字节数的数据包
CQ与PQ不能同时
Queuing 0为系统队列,执行方式为PQ。可以改lowest-custom
queue-list list-number lowest-custom queue-number
比如命令queue-list 1 lowest-custom 3,设置0,1,2都是优先级队列,3以及3以上编号的队列都是定制队列。
interface serial 1/0
custom-queue-list 50 //应用CQ到接口上
queue-list 50 protocol ip 1 list 101 //把access-list 101定义的数据分配到队列1
queue-list 50 queue 1 limit 40 //定义队列1允许通过的最大包数,默认是20,范围是0~32767
queue-list 50 interface fa0/0 2 //把从E0/0进入的流量分配到队列2
queue-list 50 queue 2 byte-count 3000 //定义队列2在一个轮循内转发的平均字节数
queue-list 50 protocol ip 3 //把所有ip流量分配到队列3
queue-list 50 default 4 //所有其他流量分配到队列4
access-list 101 permit ip any any precedence 5
WFQ(Weighted Fair Queuing,加权公平队列)
按流进行分类
WFQ会根据数据包中的源ip,目标ip,ToS,协议号,TCP端口号等自动分类(通过一个Hash算法),相同应用的数据流会被分到同一个队列。WFQ给每个流指定一个权重,权重决定了队列中分组的传输顺序。首先会传输权重小的分组。并加入IP优先级,按流的IP优先级来分配每个流的带宽,优先级的数值越大,分配的带宽就越大,确保相同流中的每个数据报都获得公平的带宽,体现不同流的之间的权值。
注:WFQ在
Low-bandwidth traffic has effective
priority over high-bandwidth traffic, and high-bandwidth traffic shares the transmission service
proportionally according to assigned weights.
第一个是WFQ不支持隧道或采用了加密技术的接口,因为这些技术要修改数据包中WFQ 用于分类的信息。
第二个WFQ提供的带宽控制的精确度不如CBWFQ和CQ等队列机制。
将对延迟不敏感的大包往后排,对延迟敏感的小包往前排。每个队列使用基于流的FIFO队列。
默认256个队列(范围16~4096之间,要配置为2的n次方的数目),最大还支持8个系统队列,和1000个RSVP流队列
WFQ给每个会话分配一个队列,队列优先级分7种。
速率不超过E1(2.048Mbps)的Serial默认使用WFQ。在使用X.25或压缩PPP的Serial,WFQ被禁用。E3/T3 (34M/45M)的WAN接口和Serial不支持WFQ。
每个流所占带宽比例(为自己的优先级数 + 1)/ (所有 (流的优先级 + 1)之和)即每个流可得的带宽比例
队列中的丢弃不再是Tail-Drop,而是WFQ Drop。IP优先级对WFQ的丢弃机制没有影响
HQ(hold-queue保持队列,即最大队列长度)
CDT(congestive-discard-threshold,拥塞丢弃阀值)相当于警戒线
大于HQ,
入站的包属于最长的队列,则drop掉
不属于最长队列,则放入该队列,并drop掉最长队列的最后一个包
大于CDT,
入站的包属于最长的队列,则drop掉
不属于最长队列,则放入该队列
interface so1/0
fair-queue 99 256 0 //99为修改CDT,默认是64,范围16~4096之间,要配置2的n次方的数目
256是所能允许的最大的流队列数,默认为256,范围16~4096之间,要配置2的n次方的数目
0为设置所允许的保留会话数(可预留队列),默认为0,范围0~100
hold-queue 1111 out //修改保持队列的数据包数量 HQ,默认为1000
CBWFQ(Class-Based Weighted Fair Queuing,基于类的加权公平队列)
CBWFQ拓展了标准WFQ的功能,支持用户定义的数据流类别,为所有类别分配专属队列,并保证预留带宽。
可以根据多种条件来定义数据流类别。(协议/ACL/输入接口)
只能用在出接口,且只能用在物理接口,子接口上不能使用
最大能创建64个队列,还有一个默认类别的队列(class-defualt),FIFO队列,tail-drop,但支持WRED丢弃,但不能直接应用与接口
class-defualt队列如没定义带宽,就使用接口的剩余带宽
队列所配置的带宽在没有相应数据流的时候将会被其他类的流所使用
CBWFQ给每个类别(而不是流)指定权重,它与分配给类别的带宽呈反比。
默认情况下,分配给所有类别的带宽总和不能超过接口可用带宽的75%。余下的25%用于传输控制数据流和路由选择数据流。
R1(config-pmap-c)#bandwidth ?
<8-2000000> Kilo Bits per second //为队列分配带宽
percent % of total Bandwidth //总接口带宽的百分比
remaining % of the remaining bandwidth //可用带宽剩余的百分比。
这三个参数不能在同一个策略映射中混合使用。
利用MQC配置CBWFQ
1定义分类的策略,即class-map
2设置策略,即定义policy map
3把policy map 应用到相关的接口上
1、定义class map
R1(config)#class-map [match-all | match-any] {map-name}
2、定义匹配语句
R1(config-cmap)#{condition}
一些匹配条件选项:
match access-group {ACL} 匹配IP ACL
match protocol {protocol} 匹配协议
match input-interface {interface} 匹配进站接口
match qos-group {Group ID} 匹配组ID
match destination-address {mac mac-address} 匹配目标MAC 地址
match source-address {mac mac-address} 匹配源MAC 地址
match ip {dscp dscp} 匹配IP DSCP 值
match ip {precedence precedence} 匹配IP 优先级
match class-map {map-name} 匹配class map
match vlan {vlan-id} 匹配VLAN
设置策略,即policy map 的步骤如下:
1.设置policy map:
R1(config)#policy-map {policy-name}
2.调用class map 或默认的class map(所有未分类的流量默认分类):
R1(config-pmap)#class {class-map | class-default}
3.设置策略:
R1(config-pmap-c)#bandwidth {kbps | percent percent}
4.定义尾丢弃机制允许的队列中数据包个数的上限,默认值为64:
R1(config-pmap-c)#queue-limit {packets}
其他配置参数
R1(config-pmap-c)#random-detect 用于WRED
R1(config-pmap-c)#shape 令牌桶参数
R1(config-pmap-c)#police (car限速)
R1(config-pmap-c)#priority 优先级,低延迟队列(LLQ).
在出站接口上应用policy map:
R1(config-if)#service-policy output {policy-name}
其他命令
更改用于RSVP 和CBWFQ 等队列机制保留的最大带宽值,默认为75%:
R1(config-if)#max-reserved-bandwidth {percent}
LLQ(Low Latency Queuing,低延迟队列)
LLQ=PQ+CBWFQ
LLQ将严格优先队列技术应用于CBWFQ,从而缓和了延迟敏感数据的抖动。发送完对延迟敏感的数据,才发送其他队列中的分组。LLQ的严格优先级队列是受监管的队列,即保证了最小带宽,拥塞时,不能超过允许的带宽,否则会丢弃.
可以创建一个或多个严格优先级队列
LLQ和IP RTP优先级特性的区别在于,它不受UDP端口号的限制
虽然可以将各种实时数据流加入到Priority中,但Cisco建议只将语音流加入到这种队列中。
MPC模块化配置LLQ于CBWFQ非常相似
R1(config-pmap-c)#priority {bandwith} {burst} //设置严格优先级队列的预留带宽
R1(config-pmap-c)#priority {pencentage} {burst} //设置严格优先级队列预留带宽为接口带宽的百分比
参数burst表示突发量,取值范围32-2000000,表示在被监管的带宽之外所允许的临时突发量
RTP(Real Transport protocol,实时传输协议)
IP实时传输协议(RTP)优先级对延迟比较敏感的数据流,提供优先级队列.如语音
无需知道语音的端口号,提供了鉴别数据流端口号范围的能力,并可以定义端口的范围,16384-32767.
可以同前面所述的队列,FIFO、PQ、CQ、WFQ和CBWFQ结合使用
保证了优先队列的低延迟转发,还进行了限速,超过规定的带宽将丢弃
适合用于低于1.544Mbps带宽的链路使用
R1(config-if)#ip rtp priority {starting-rtp-port-number port-number-range} {bandwidth} //设置起始port和port范围,bandwidth是预留的带宽)