QoS 服务质量
QoS的作用
- 尽力而为的服务模型,当网络产生拥塞时,无法保证优先传递重要数据
- 网络数据的多元化,
QoS 模型
-
尽力而为服务模型 在尽力而为服务模型中,所有网络设备全部都是尽自己最大努力传输数据,所有数据尽管传,不需要得到许可,有多少传多少,任何数据都不能得到保证,延迟也无法预计,所以尽力而为服务模型,其实并没有实施任何QOS,默认的网络都工作在这种模型下。 -
综合服务模型:能够为特定的流量保证带宽。 先申请网络带宽,无法最大化利用网络带宽,同时,设备需要维护RSVP协议【资源预留协议】 在实施了综合服务模型QOS的网络中,应用程序在发送数据之前,必须先向网络申请带宽。 但是如果某些程序在连接之前没有向网络申请带宽,那么它的流量只能得到尽力而为的服务 在综合服务模型中,重要的数据可以通过申请带宽而得到保证,但是在传送之前必须申请,也需要耗费额外一些时间。 在申请带宽时,所用到的协议为Resource Reservation Protocol (RSVP) 在现有的网络中,综合服务模型的QOS通常并不被采用。 -
区分服务模型 先对网络流量进行分类,标记不同优先级,当网络拥塞时,网络设备根据优先级来决定转发的先后顺序 在实施了区分服务模型QOS的网络中,网络将根据不同数据提供不同服务,因此,所有数据都被分成不同的类别,或者设置为不同的优先级,在网络发生拥塞时,网络总是先保证传输高优先级的数据,从而放弃传输低优先级的数据,但是在网络没有拥塞时,所有数据全部照常传输。 现在的网络中,实施QOS时通常采用区分服务模型
QoS的部署方式
-
CLI:早期传统网络去部署
interface Multilink1
ip address 10.1.61.1 255.255.255.0
ip tcp header-compression iphc-format TCP头部压缩
load-interval 30
custom-queue-list 1
ppp multilink
ppp multilink fragment-delay 10
ppp multilink interleave
multilink-group 1
ip rtp header-compression iphc-format RTP头部压缩
-
MQC:(重点)模块化QoS MQC可以配置对特定的数据采取特定的动作
步骤为三步:
定义流量
设置策略
应用策略
定义流量—class-map 192.168.100.0/24 192.168.200.0/24
设置策略---policy-map
应用策略---service-policy
class-map VoIP-RTP
match access-group 100
class-map VoIP-Control
match access-group 101
!
policy-map QoS-Policy
class VoIP-RTP
priority 100
class VoIP-Control
bandwidth 8
class class-default
fair-queue
!
interface serial 0/0
service-policy output QoS-Policy
!
access-list 100 permit ip any any precedence 5
access-list 101 permit tcp any host 10.1.10.20 range 2000 2002
- Auto-QoS:在设备,预先配置好了profile,只需要调用即可
AutoQoS VoIP支持在LAN和WAN环境部署
AutoQoS Enterprise支持在WAN接口部署
路由器可以部署企业应用QoS策略处理语音,视频和数据流量
交换机可以通过单条命令部署QoS策略
VoIP
Enterprise
DSCP 区分服务代码点
? 当需要使用MQC的方式去部署QoS时,对流量分类之后,需要为不同的数据包打上不同的优先级,当路由器收到带有优先级的数据包,可以根据这些优先级来决定数据转发的优先顺序。
? 如何在数据包的包头去标记这个优先级,使用DSCP进行标记 当路由器收到带有优先级的数据包,根据数据包不同的优先级,执行不同的策略,这种行为叫做PHB(每一跳行为)
ToS:type of service总共是8bit,用于标识IP包头数据包的优先级【网络层】
CoS:class of service总共是8bit,用于标识数据帧头的优先级【数据链路层】
ToS字段,用2种方式来标记
1) IPP:使用高3bit,剩余5bit都为0
可以表示8种(2^3),0~7来表示
IPP0 IPP1 IPP2 IPP3….IPP7,值越大 优先级就越大,优先被转发
2) DSCP:使用高6bit,剩余2bit都为0,高6bit中,最后一个bit始终为0
2.1)default PHB:6个bit全0 1个类别
2.2)EF:101110 1 个类别【Expedited Forwarding 加速转发】
? 确保最小的时延(Voice、实时流量)
? 保证带宽(保证该类别流量带宽,可优先转发)
? 管制带宽(该类别流量不能超过保证带宽,超过的流量将被丢弃)
2.3)AF:12个类别【Assured Forwarding保证转发 】
? 保证带宽
? 当网络没有发生拥塞时,允许占用额外的带宽
? 四个标准类(af1, af2, af3, and af4)
AF1:001010、001100、001110 AF11 AF12 AF13
AF2:010010、001100、001110
AF3:011010、001100、001110
AF4:100010、001100、001110
2.4)CS (Class-Selector),兼容IPP,也使用高3bit,其余为0 8个类别
0~7,CS0、CS1、CS2…CS7 值越大 优先级就越大,优先被转发
ToS=IPP*32=DSCP*4
QoS Mechanisms
(1) Classification 分类: 将数据分为不同的类别。
- 分类是识别和分离不同类别的流量。
- 流量可以通过各种方式进行分类,包括DSCP
- Modular QoS CLI 允许通过执行策略进行分类。
(2) Marking 标记: 将数据设置为不同的优先级
- 标记, 也被称为着色(coloring)
- 根据不同类别的流量给每个数据包标记,使得分类的流量在网络中传输时,能够被快速识别。
(3) Congestion Management 拥塞管理: 每个接口有一个队列机制,当网络拥塞发生时,规定数据以什么样的先后顺序传输。
每个物理接口,有1个硬件队列和N个软件队列 当网络产生拥塞时,决定如何从软件队列调度数据包到硬件队列
- 拥塞管理是根据每个数据包上的标记,以确定在哪个队列放置数据包。
- 拥塞管理一般采用先进的队列技术,如WFQ和LLQ,以确保对时间敏感型的流量能够被优先传送,例如语音流量被首先发送。
(4) Congestion Avoidance 拥塞避免: 当网络(队列)发送拥塞时,如何丢弃数据包,避免网络产生拥塞。
- 当预先定义的队列达到所限制的阀值,拥塞避免可能随机丢弃数据包
- 在“更早的时候”开始丢包,拥塞避免有助于防止网络中的下游瓶颈。
(5) Policing and Shaping 管制和整形: 当用户超过额定带宽,超过的带宽不能被传输,采用其它方式来处理。 管制-丢弃超出的带宽;整形-缓存超出的带宽
- Policing 当达到预定义的限制时,丢弃数据包
- Shaping 当达到一个预定义的限制时,缓存超出的带宽。
(6)Link Efficiency 链路效率: 通过头部压缩或链路分段,提高带宽效率
- 报头压缩可以显着降低语音传输相关的开销
- 在一个IP数据流中,数据报头中很多信息是保持不变,这就为报头压缩提供基础。发送方只需在开始时,传送一个完整的报头,随后不变的部分可以不传。
Classification 分类
MQC
- MQC是模块化QOS配置命令集,由匹配流量、设置流量、调用策略三个部分组成;
- 使用ACL配合class-map来匹配流量;
- 使用policy-map调用class-map来设置流量;
- MQC可以在接口下、子接口、控制模版下调用;
- 数据包的优先级可以用TOS、DSCP、IP优先级三种方式来定义,他们之间可以互相转换;
TOS=DSCP*8=IP*64;
配置MQC
//匹配流量
access-list 100 permit ip host 1.1.1.1 host 4.4.4.4 precedence immediate
/匹配从1.1.1.1发往4.4.4.4且优先级为2的数据/
access-list 101 permit ip host 2.2.2.2 host 5.5.5.5 precedence flash-override
/匹配从2.2.2.2发往5.5.5.5且优先级为4的数据/
class-map match-all pre4 /创建类图pre4/
match access-group 100 /调用ACL 100/
class-map match-all pre2
match access-group 101
//设置流量
policy-map MQC /创建策略映射图MQC/
class pre2 /调用类图pre2/
set ip precedence 6 /设置IP优先级为6/
class pre4
set ip precedence 5
//调用策略
interface FastEthernet0/0
service-policy input MQC /调用策略映射图MQC/
interface FastEthernet1/0
service-policy input MQC
NBAR
-
NBAR :基于网络层的应用识别。 -
NBAR 解决了如何分类client/server 和 web-based applications的问题。 -
NBAR 执行以下功能: 识别应用和协议 (Layer 4 to Layer 7) 协议发现 提供流量统计 -
通过 NBAR对流量进行归类,能够对这些类执行random early detection, class-based queuing, and policing QOS 的PHP行为 -
新的应用程序很容易支持加载PDLM(数据包描述语言模块).
NBAR 可以用于分类的的应用程序
- 静态分配的TCP和UDP端口号
- 非UDP和非TCP IP协议
- 连接建立过程中协商动态分配的TCP和UDP端口号(需要状态检测)
- 子端口分类:HTTP分类 (URLs MIME or host names …)
- MIME:多用途互联网邮件扩展类型,设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开,多用于指定一些客户端自定义的文件名,以及一些媒体文件。
- 分类基于深度包检测和多个应用程序特定的属性(RTP payload classification)
配置NBAR
router(config-if)
配置NBAR以发现特定接口上NBAR已知的所有协议的通信量
要求在协议发现之前启用CEF
可以在启用或不启用服务策略的情况下应用
router(config-cmap)
根据指定的协议配置类映射的匹配条件。
静态协议是根据已知的目标端口号识别的。
通过检查会话来识别动态协议(英国电信电驴)
match not命令可用于指定不用作匹配条件的QoS策略值。在这种情况下,该QoS策略的所有其他值将成为成功匹配标准。
router(config)
配置NBAR以使用已知端口以外的端口号搜索协议或协议名称。
最多可以指定16个附加端口号。
router(config)
指定数据包描述语言模块文件的位置,以扩展路由器的NBAR功能。
文件名采用URL格式(例如,flash://citrix.pdlm).
Marking 标记
Class-based marking
- 是与MQC提供一个额外的工具,它允许静态分类标记的数据包。
- 它可以用来标记入站或出站数据包。
- 它可以结合任何其它出方向的QoS 特性。
- 它可以结合任何其它进方向基于类的管制
- 先在接口上配置CEF,才能保证基于类的数据包标记的功能都可以使用。
数据包可以打上以下标志之一:
class-map test
match ip precedence <0-7>
class-map match-any test 匹配优先级为0或者为1的流量
match ip precedence 0
match ip precedence 1
class-map test 3
match dscp 1 /--匹配IPv4 和IPv6 dscp值为1--/
match ip dscp 1 /--匹配IPv4 的dscp值为1--/
class-map Mission-Critical
match ip dscp af31 af32 af33 cs3 /--CS3兼容IPP3--/ or的关系
? 路由器内部使用标签,不会在网络种传递,而其它DSCP IPP都能够往下传递。? 流量进入,打上Qos Group标记,
? 匹配该标记的流量,做策略。这样可以保证Qos Group标记不会传递下去。access-list 100 permit icmp host 1.1.1.1 host 2.2.2.2class-map qosgroup match access-group 100policy-map qosgroup class qosgroup set qos-group 123interface FastEthernet0/0 service-policy input qosgroup将1.1.1.1 ping 2.2.2.2的流量设置为qos-group 123class-map 100k match qos-group 123policy-map 100k class 100k bandwidth 100interface FastEthernet0/0 service-policy output 100kR1
policy-map x class qosgroup set mpls experimental topmost 5class-map test match mpls experimental topmost 5 匹配EXP的顶层标签
- IEEE 802.1Q or ISL CoS/priority bits
class-map test match cos <0-7>
class-map test match fr-de
配置
class-map Well-known-services match access-group 100!class-map Unknown-services match not class-map Well-known-services!policy-map set-DSCP class Well-known-services set DSCP AF21 class Unknown-services set DSCP 0!access-list 100 permit tcp any any lt 1024access-list 100 permit tcp any lt 1024 any!Interface ethernet 0/0 service-policy input set-DSCP
Congestion Management 拥塞管理
1) FIFO 先进先出,只有一个队列,所有数据包都是平等,硬件队列始终使用FIFO的队列技术
缺点:当网络产生拥塞时,不能保证关键业务数据被优先发送。
2) PQ 优先级队列
多个队列,有优先级,解决FIFO的问题,当网络产生拥塞时,可以优先调度高优先级的数据。
缺点:如果高优先级队列一直存在数据包,可能导致低优先级的队列出现饿死的现象。
PQ队列用于传输对时延比较敏感的流量。Voice
通告管制,进行限速,200K
3) RR 轮询队列
有多个队列,但是没有优先级,可以解决PQ队列的问题,可以保证每个队列都能够被调度。
缺点:太公平了,调度的时候无法保证调度更多的关键业务的流量
4) WRR 基于权重轮询队列
多个队列,也有优先级概念,调度的时候,每个队列调度的数据包个数不同。可以保证重要数据每次调度时,比普通流量调度的更多。 调度时,可以基于字节数或者数据包的个数来进行掉地
缺点:调度不精确
5) DRR 赤字轮询队列 ,缓解调度不精确的问题,不能根本上去解决
6) WFQ 加权公平队列
共享带宽,系统自动分配队列,根据不同的数据流,通过hash函数,将不同的数据流放入到不同的队列。根据队列的优先级,分配带宽
两种丢弃模式
0~CDT:不丢弃
CDT~HQO选择性丢弃:如果到达的数据包具备最大的FT值,则丢弃,否则不丢弃 大于HQO,始终要丢弃:如果到达的数据包具备最大的FT值,则丢弃。 如果到达的数据包不具备最大的FT值,丢弃队列中FT值最大的数据包
注:数据包越大,FT值就越大。
优先级高的数据包,长度越长,导致它的FT值更大
优先级低的数据包,长度较短,导致他的FT值更小
则容易造成高优先级的数据包被优先丢弃
解决方法: 通过虚拟包长,丢弃低优先级的流量
虚拟包长=实际包长/(优先级+1)
分母是1~8
有可能会出现除不尽
使用32384 最小公倍数来解决
默认情况下,如果接口带宽小于2.048M,运行WFQ
Queueing strategy: weighted fair
如果大于2.048M,运行FIFO
Queueing strategy: fifo
HQO默认是1000
Output queue: 0/1000/64/0 (size/max total/threshold/drops)
Router(config-if)
Congestion Avoidance 拥塞避免
当路由器接口输出队列已满时,接口发生拥塞:后续传入的数据包将被尾丢弃。被丢弃的数据包可能会导致重要应用程序的性能下降。尾丢弃有显著的缺点会出现很多问题- TCP同步- TCP饥饿- 无差别下降
RED(Random Early Detection)随机早期检测
- 如果可以防止队列拥塞,则可以避免尾丢弃。
- RED 就是在队列满之前,进行随机丢弃数据包的机制
- RED 当平均队列长度增加时,丢弃率也随着增加
- RED result:
放慢TCP的会话,发送数据包的速率接近出口带宽速率
减小平均队列(比最大队列大小要少得多)
通过随机丢弃,能够避免大量TCP会话同步
RED三种模式
无丢弃:如果平均值小于最小队列阈值,则到达的数据包排队。
随机丢弃:如果平均值介于该类型流量的最小队列阈值和接口的最大阈值之间,则根据该类型流量的数据包丢弃概率,数据包被丢弃或排队。
完全丢弃(尾部丢弃):如果平均队列大小大于最大阈值,则丢弃数据包。
WRED(Weighted Random Early Detection)基于权重随机早期检测
WRED可以使用多个不同的红色配置文件。
每个配置文件由以下内容标识:
WRED外形选择基于:
- IP优先级(8个配置文件)
- DSCP(64个配置文件)
WRED比更重要的数据包更积极地丢弃不重要的数据包。
WRED可以在接口、VC或类级别应用。
CBWFQ配置
access-list 100 permit ip host 1.1.1.1 host 4.4.4.4access-list 101 permit ip host 2.2.2.2 host 5.5.5.5class-map match-all R1-R4 match access-group 100class-map match-all R2-R5 match access-group 101policy-map MQC class R1-R4 priority 100 /设置为优先队列,保证带宽100K/ police 100000 /做流量管制,CIR为100K/ class R2-R5 bandwidth 100 /设置带宽保证100K/ class class-default shape average 80000 1000 1000 /做流量整形,CIR为80K/ interface FastEthernet0/0service-policy output CBWFQ
Policing and Shaping 管制和整形
Policing
要限制访问资源的高速接入
限制访问某些应用程序或业务类的流量速率
第2层或第3层超过的流量做标记
应用于输入方向和输出方向
丢弃超出限制的数据包
被丢弃的TCP数据包将导致重传
支持数据包标记和重标记
减少对缓冲区的使用 (整形要求有额外的整形队列系统)
令牌桶
当网络设备衡量流量是否超过额定带宽时,需要查看令牌桶,而令牌桶中会放置一定数量的令牌,一个令牌允许接口发送或接收1bit数据(有时是1 Byte数据),当接口通过1bit数据后,同时也要从桶中移除一个令牌。当桶里没有令牌的时候,任何流量都被视为超过额定带宽,只有当桶中有令牌时,数据才可以通过接口
如果有足够的令牌可用(conform action): 从桶中取出令牌相当于分组大小。 该分组被发送
如果没有足够的令牌可用 (exceed action): 丢弃 (或标记) 数据包
单速率单桶
流量出现两种结果。符合CIR和超出CIR
Bc(Burst size)令牌桶的大小 Tc (Time interval)加令牌的时间,多久加一次令牌 CIR 每秒钟往桶里令牌的速率,这个速率也就决定了用户流量 CIR = Bc / Tc
单速率双桶
Be: 超出的突发数量(多余的数量)
Tc: 在Bc令牌桶的令牌
Te: 在Be令牌桶的令牌
返回值是conform or exceed or violate
双速率双桶
Tc: Token in CIR bucket
Tp: Token in PIR bucket PIR>CIR, Be>Bc
根据两个不同的速率实施流量监管:
- Committed Information Rate 承诺信息速率
- Peak Information Rate 峰值信息速率
管制配置
access-list 100 permit ip host 1.1.1.1 host 4.4.4.4 class-map match-all R1-R4 /创建类图/ match access-group 100policy-map R1-R4 /创建策略图/ class R1-R4 /调用类图/ police cir 8000 bc 1000 be 1000 conform-action transmit exceed-action drop /流量管制,速率为8000 bit,BC为1000,Be为1000,正常流量传输,超出流量丢弃/
Shaping
基于类的成形有两种成形方法:
? 整形到配置的平均速率(平均速率)
? 成形到峰值速率(峰值速率)
Average rate(平均速率)是以配置的平均速率转发数据包,当有额外令牌可用时,允许突发到Bc。这是更常用的方法。
峰值速率是指在每个Tc以高达Bc+Be的峰值速率转发数据包。但是,在网络拥塞期间,在CIR上方发送的流量可能会下降。在以下情况下建议峰值速率成形:
网络有额外的可用带宽
应用程序可以容忍偶尔的数据包丢失
流量整形配置
access-list 101 permit ip host 2.2.2.2 host 5.5.5.5 class-map match-all R2-R5 match access-group 101 policy-map R2-R5 class R2-R5 shape average 8000 1000 1000/做流量整形,承诺速率为8000bit,BC为1000,Be为1000,超出的流量缓存/
Link Efficiency 链路效率
链路有效机制往往部署在低速的广域网链路,以增加吞吐量,降低时延和抖动
- 报头压缩减少了数据包报头的大小。
- 有效载荷大小不被改变。
- Example: (基于类的)的TCP和(基于类的)RTP头压缩
- 报头压缩增加延迟并降低串行化的延迟
TCP报头压缩和基于类的TCP报头压缩:
- 压缩IP和TCP报头
- 用来降低TCP报文段的开销
- 对传输小型有效载荷和许多TCP会话连接非常有效(例如,远程登录)
RTP报头压缩和基于类的RTP头压缩:
- 压缩的IP,UDP和RTP报头
- 用于RTP,减少延迟并提高吞吐量
- 提高语音质量
- 最有效的慢速链接
大多数Internet应用程序使用TCP作为传输协议。
IP (20 bytes) and TCP (20 bytes) use 40 bytes.
TCP报头压缩可以压缩到3~5个字节。
基于类的TCP报头压缩允许基于流量分类来压缩
基于类的TCP报头压缩是通过MQC配置。
配置
class-map interactive match protocol telnet!policy-map cust1 class interactive bandwidth 64 compression header ip tcp!<output omitted>!int s0/0service-policy output cust1<output omitted>
|