Quality of Service
- 分类和标识
- 拥塞管理
- 拥塞避免
- 限速(监管,整形)
- 链路效率
分类
- L2 QoS
- L3 QoS
- MPLS QoS
概述
QoS就是为了区别对待不同报文。在有区别地对待和处理网络通信流之前,首先需要对通信流和"标记"或"颜色"进行分类,以保证特殊的数据包能够得到与其它数据包不同(或更好)的对待和处理。
- 带宽
- 时延
- 传输时延:一个数据位从发送方到达接收方所需要的时间。该时延取决于传输距离和传输介质,与带宽无关。
- 串行化时延:指发送节点在传输链路上开始发送报文的第一个比特至发完该报文的最后一个比特所需的时间。该时延取决于链路带宽以及报文大小。
- 处理时延:指路由器把报文从入接口放到出接口队列需要的时间。它的大小跟路由器的处理性能有关。
- 队列时延:指报文在队列中等待的时间。它的大小跟队列中报文的大小和数量、带宽以及队列机制有关。
- 抖动
- 不平均
- 不稳定
- 丢包
- 尾部丢弃
- 主动丢弃WRED
传统网络采取Best Effort方式
Cisco IOS工具可以根据一些不同的标准对数据包进行分类,然后使用IP数据报头中的3个IP优先级位信息对这些数据包进行标记。网络操作员最多可以定义6个服务等级(使用IP头中服务类型(ToS)字段的3个优先级位,其中的2个值保留作它用)。然后,可以使用QoS功能制定适当的通信流处理政策,包括针对每一通信流等级的拥塞管理、带宽分配以及延迟限制。
QoS的功能
- 分组分类器和标记器
- 通信速率管理
- 资源分配
- 拥塞避免和分组丢弃策略
- QoS信令协议
- 交换
- 路由
流量分类
类型 | 吞吐量 | 时延 | 丢包 | 抖动 |
---|---|---|---|---|
交互 | 低 | 低 | 低 | 不重要 |
下载 | 高 | 不重要 | 低 | 不重要 |
语音 | 低 | 低 | 低 | 低 |
视频 | 高 | 低 | 低 | 低 |
服务质量
类型 | 吞吐量 | 时延 | 丢包 | 抖动 | 适用 |
---|---|---|---|---|---|
白金 | 保证 | 低 | 低 | 不重要 | VoIP |
金 | 保证 | 低 | 低 | 不保证 | 视频流 |
银 | 保证 | 不保证 | 不保证 | 不保证 | 通用数据 |
铜 | 有限保证 | 不保证 | 不保证 | 不保证 | 访客网络 |
Best Effort | 无保证 | 不保证 | 不保证 | 不保证 |
服务模型
- 尽力而为
- 集成服务模型
- 预先申请
- 差分服务模型
- 通过字段设置
- 2层头部
- 802.1Q中的802.1P
- 3层头部
- IPv4
- 3位IP优先级
- 6位DSCP
- IPv6
- traffic class
- IPv4
- MPLS EXP
- 2层头部
- 通过字段设置
差分服务
DSCP(DiffServ Code Point)
- IP优先级
- 3层头部
- IPv4
- 3位IP优先级
- 6位DSCP
- IPv6
- traffic class
- IPv4
- MPLS EXP
- 3层头部
PHB:每一跳行为,当数据流由客户进入DiffServ域(如域A)时,边缘路由器通过标识该字段(DSCP),将IP包首先分为不同的服务类别,而网络中的其他传送转发路由器在收到该IP包时,则根据该字段所标识的服务类别将其放入不同的队列,并且由作用于输出队列的流量管理机制控制每一个队列,即给予不同的每一跳行为(PHB)。
PHB协议定义了CS,EF,AF,BE队列
- BE 默认PHB:
000xxx
- CS 类选择PHB(兼容IP优先级):兼容IP precedence
xxx000
- EF 快速转发PHB:
101110
- AF 保证转发PHB
- 保证最小转发能力
- 保证带宽,可以占用更多的带宽
- 管制流量
aaadd0
aaa
:类别001
:AF1010
:AF2011
:AF3100
:AF4
dd
:丢弃可能性01
:low11
:medium11
:High
差分服务角色
- DS节点:实现DiffServ功能的网络节点称为DS节点。
- DS边界节点:负责连接另一个DS域或者连接一个没有DS功能的域的节点。DS边界节点负责将进入此DS域的业务流进行分类和流量调整。
- DS内部节点:用于在同一个DS域中连接DS边界节点和其他内部节点。DS内部节点仅需基于报文中的EXP、802.1p、IPP等字段值进行简单的流分类以及对相应的流进行流量控制。
- DS域(DSDomain):一组采用相同的服务提供策略和实现了相同PHB(PerHop Behaviors)的相连DS节点组成。一个DS域由相同管理部门的一个或多个网络组成,如一个DS域可以是一个ISP,也可以是一个企业的内部网络。
在DiffServ域中,路由器大致可以分为两类
- 边缘路由器
- 传送路由器
其中传送路由器只负责将进入的数据包按级别排队,并按事先设定的带宽、缓冲处理输出队列。边缘路由器除了完成上述功能以外,还在输入接口处设有检查机制以监视用户是否遵守业务等级协定(SLP),分类机制以标识输人的每个业务包,并将其分别排入相应的队列
DiffServ的设计思想是希望使用一种与目前lP网络协议相结合的方式来实现对网络QoS的保证
IP precedence
代码 | 英文 | 说明 |
---|---|---|
0 |
routine precedence | 普通 |
1 |
priority precedence | data优先 |
2 |
immediate precedence | data快速 |
3 |
flash precedence | voice control闪速 |
4 |
flash override precedence | video极速 |
5 |
critical precedence | voice关键 |
6 |
internetwork control precedence | 网间控制 |
7 |
network control precedence | 网络控制 |
MQC
模块化QoS命令行MQC(Modular QoS Command-Line Interface)是指通过将具有某类共同特征的报文划分为一类,并为同一类报文提供相同的服务,也可以对不同类的报文提供不同的服务。
随着网络中QoS业务的不断丰富,在网络规划时若要实现对不同流量(如不同业务或不同用户)的差分服务,会使部署比较复杂。MQC的出现,使用户能对网络中的流量进行精细化处理,用户可以更加便捷的针对自己的需求对网络中的流量提供不同的服务,完善了网络的服务能力。
MQC三要素
- 流分类(traffic classifier)
- 流分类用来定义一组流量匹配规则,以对报文进行分类。
- 流分类中各规则之间的关系分为:and或or,缺省情况下的关系为or
- 流行为(traffic behavior)
- 流行为用来定义针对某类报文所做的动作。
- 流策略(traffic policy)
- 流策略用来将指定的流分类和流行为绑定,对分类后的报文执行对应流行为中定义的动作。
- 一个流策略可以绑定多个流分类和流行为。
MQC配置流程
- 配置流分类:按照一定规则对报文进行分类,是提供差分服务的基础。
- MAC地址
- VLAN ID
- 802.1p优先级
- EXP优先级
- ACL
- DSCP优先级
- IP优先级
- 所有报文
- 出接口或入接口
- 配置流行为:为符合流分类规则的报文指定流量控制或资源分配动作。
- 报文过滤
- 重标记
- 重定向和策略路由
- 流量统计
- 流量监管
- 流镜像
- 配置流策略:将指定的流分类和指定的流行为绑定,形成完整的策略。
- 应用流策略:将流策略应用到接口或子接口。
队列
- 先进先出队列(FIFO)
- 轮询队列(RR)
- 权重轮询队列(WRR)
- 差分轮询队列(DRR)
- 优先级队列(PQ)
- 自定义队里(CQ)
- 加权公平队列(WFQ)
- 基于流的加权公平队列(WFQ)
- 基于等级的加权公平队列(CB-WFQ)
- 分布式加权公平队列(DWFQ)
- 低延时队列(LLQ)
- 基于等级的低延时队列(CB-LLQ)
- 实时传输队列(RTP PQ)
- 分类
- 丢弃机制
- 调度算法
先进先出队列FIFO
- 分类
- 没有分类
- 丢弃机制
- 尾部丢弃
- 调度算法
- 先进先出
- 优点
- 简单
- 缺点
- 没有公平性
- 由于TCP会自己降速,导致TCP,UDP数量失去平衡
- 突发流量可能占用全部缓存
优先级队列PQ
优先级输出队列允许一个网络管理员为给定的端口定义4种通信流优先级
- 高
- 标准
- 中
- 低
当通信流到达路由器时,将安排其进入4个输出队列中的一个。最高优先级队列中的数据包将首先被输出。当这一队列变为空时,下一个最高优先级中的通信流将被输出,依此类推。这一机制可以确保在拥塞期间最高优先级数据不会因为低优先级通信流而被延迟。但是可能造成低优先队列的饥饿。
- 优点
- 对高优先级的数据流提供了低延迟的转发
- 大多数平台上都支持该队列机制
- 支持所有的IOS版本
- 缺点
- 对单一子队列而言,会继承FIFO队列的所有缺点
- 对低优先级的数据流而言,可能会被“饿死”,因为只有高优先级队列里有数据,PQ就不会服务低优先级队列
- 需要在每一跳上都手工的配置分类
自定义队列CQ
如果您的目标是确保所有通信流的服务级别,您可以使用自定义队列。例如,您可以指定系统网络体系结构(SNA)通信流应占有25%的可用带宽,而TCP通信流应占有10%的带宽,剩余65%的带宽留给其它应用程序。
- 源地址
- ACL
- 大小
- Fragment
- 端口
CQ最多可包含16个组(即group-number的取值范围为1~16),在每个组中指明了什么样的数据包进入什么样的队列、各队列的长度和每次轮询各队列所能连续发送的字节数等信息。CQ对报文进行分类,将所有报文分成最多至17类,分别属于CQ的17个队列中的一个,然后,按报文的类别将报文进入相应的队列。
CQ的17个队列中,0号队列是优先队列,路由器总是先把0号队列中的报文发送完,然后才处理1到16队列中的报文
- 0号队列一般作为系统队列把实时性要求高的交互式协议报文放到0号队列
- 1到16号队列可以按用户的定义分配它们能占用接口带宽的比例
用户在指定每个队列每次调度时发送的字节数时,需要把握所配数值的大小,因为这关系到轮询中配置增加的粒度。例如,为了实现4个队列间的1:2:2:4的关系,我们可以配置这4个队列发送字节数为:1、2、2、4,也可以配置为:500、1000、1000、2000。但在考虑了线路的MTU后,若MTU为500,则后一种方式较好。因为在轮询时,所剩配额不够发送当前报文时,会只累加配额,然后等下次调度,显然当前条件下.第二种方案浪费在轮询空转上的时间要少。
PQ赋予较高优先级的报文绝对的优先权,这样虽然可以保证关键业务的优先,但在较高优先级的报文的速度总是大于接口的速度时,将会使较低优先级的报文始终得不到发送的机会。采用CQ,将可以避免这种情况的发生。CQ可以把报文分类,然后按类别将报文被分配到CQ的一个队列中去,对每个队列,可以规定队列中的报文应占接口带宽的比例,这样,就可以让不同业务的报文获得合理的带宽,从而既保证关键业务能获得较多的带宽,又不至于使非关键业务得不到带宽。当然CQ中的实时业务不能获得象PQ一样好的时延指标。
- 每个队列有最大报文容纳数
- 每个子队列采用尾丢弃方式
- 采用轮询或加权轮询,队列0采用优先调度
- 每个队列在该论中转发配置好的字节数
- 以字节为阈值定义了每轮调度的大小
- 超过阈值的那个包会被调度(导致缺点)
- 优点
- 按照比例来分配带宽
- 实现简单
- 缺点
- 当配置字节数小的时候,带宽分配不准确
- 当配置字节数大的时候,时延抖动比较大
权重轮询队列WRR
WRR(Weighted Round Robin)调度即加权轮询调度。WRR在队列之间进行轮流调度,保证每个队列都得到一定的服务时间。
以端口有8个输出队列为例,WRR可为每个队列配置一个加权值(依次为w7、w6、w5、w4、w3、w2、w1、w0),加权值表示获取资源的比重。例如:一个100M的端口,配置它的WRR队列调度算法的加权值为50、50、30、30、10、10、10、10(依次对应w7、w6、w5、w4、w3、w2、w1、w0),这样可以保证最低优先级队列至少获得5Mbit/s带宽,避免了采用PQ调度时低优先级队列中的报文可能长时间得不到服务的缺点。
PQ+WRR调度
差分轮询队列DRR
DRR(Deficit Round Robin)调度实现原理与WRR调度基本相同。
DRR与WRR的区别是:WRR调度是按照报文个数进行调度,而DRR是按照报文长度进行调度。如果报文长度超过了队列的调度能力,DRR调度允许出现负权重,以保证长报文也能够得到调度。但下次轮循调度时该队列将不会被调度,直到权重为正,该队列才会参与DRR调度。
PQ+DRR调度
加权公平队列WFQ
- WFQ优点
- 配置简单(不用手工分类)
- 保证所有的流都有一定的带宽
- 丢弃野蛮流量
- 大多数平台上都支持
- 支持所有IOS版本(11.0以上)
- WFQ缺点
- 每个子队列都继承了FIFO的缺点
- 多个不同的流可能会被分入同一个队列(流的数量超过了配置的队列数)
- 不支持手工分类
- 不能提供固定带宽保证
流的加权公平队列WFQ
基于流的加权公平队列(WFQ)的目标是确保拥塞发生时剩余相同的流能够获得足够的带宽,并对延迟作出限制,使其能够满足最低要求。在使用标准WFQ时,数据包是按流来排队的。拥有
- 源IP地址
- 目的地IP地址
- 源端口
- 目的端口
- 协议
- IP优先级
基于流的WFQ中公平一词的含义是指:公平分享可用带宽。这种机制可以防止因带宽不足而引起的资源处理能力得不到使用的问题。
- 修改的尾部丢弃
- HQL:hold queue out limit绝对值:总的最大队列深度,限制了所有队列中能够存放的报文总数目
- 接口拥塞(到达HQO的绝对值):如果是拥有最坏完成时间的报文,之间丢弃,达到的报文不是拥有最坏的完成时间,则放入软件队列,把最坏完成时间的子队列丢弃部分,以便于非最坏完成时间的报文被容纳
- CDT:拥塞丢弃阈值,限制了每个队列中能够存放的报文数目
- 流拥塞(某个子队列拥塞):到达CDT,则丢弃新到的最坏完成时间的报文,把非最坏完成时间的报文放到软件队列
- HQL:hold queue out limit绝对值:总的最大队列深度,限制了所有队列中能够存放的报文总数目
如果一个新的报文达到时HQL已经到达最大值,该报文直接被丢弃;如果此时HQL没有到达最大值,WFQ将该报文根据WFQ的分类原则进行分类决定进入到哪个队列并计算出SN,剩下的丢弃机制还会由CDT决定,CDT是每个队列自己的丢弃阀值,如果此时CDT没有到达最大值报文直接进入该队列,如果CDT已经达到阀值,则判断其它队列是否有SN比新进入的报文SN大,如果没有直接丢弃新进入的报文,如果其他队列有SN大于当前入队列的报文,WFQ会选择丢弃SN大最大的报文。简单的说就是当某个队列的报文数目已经超过该队列CDT,WFQ可以选择丢弃其它队列中SN最大的报文!
调度方式:最早完成时间
宗旨:WFQ可以基于权重,保证带宽,还要体现出公平,但无法保证时延
等级的加权公平队列CB-WFQ
CBWFQ从名字来看像是CQ和WFQ的混合体。和CQ类似的,CBWFQ可以为每个队列保留最小带宽,使用和CQ类似的报文分类,但是与CQ不同的是,用户可以配置CBWFQ实际占有的流量百分比,而不是字节数;和WFQ相比,CBWFQ可以在一个特定的队列里面使用WFQ机制:CBWFQ有一个特殊的队列,即缺省队列,只有该特殊队列可以采用WFQ机制
例如,30%用于语音,30%用于ERP,而余下的40%用于Web通信流。虽然CB-WFQ对于等级间公平共享的重视不及其它WFQ,但它对于高速链路或主干来说是一种功能强大的QoS工具,在这两种情况下,重点是带宽分配的硬性担保,而并非是象低速链路上那样重点在于稀疏带宽的公平共享。在低速链路上,通常是使用基于流的WFQ。
CBWFQ支持两种丢弃机制:Tail Drop和WRED。可以配置任何一个队列的丢弃机制为WRED,但是并不是所有的队列配置WRED丢弃机制都是有益的,WRED可以用在对丢包不是很敏感的数据队列;如果该队列是存放语音、视频报文,这类业务报文对丢包比较敏感就不适合采用WRED了。
CBWFQ有0-64队列,0队列是缺省队列,该队列是自动配置、不可人工干预。可以使用流分类将不同类型的报文映射到1-64队列,可以设置每个队列所占用的带宽比例;如果进入的报文不能匹配任何流分类,进入缺省队列,缺省队列可以使用FIFO或者WFQ机制,而1-64只能使用FIFO机制。
PQ+WFQ调度
分布式加权公平队列DWFQ
基于VIP的分布式WFQ通过将WFQ的排队和时序计划任务分散到通用接口处理器上,可以增加Cisco 7500的转发能力。由于从原则上讲每个VIP可以为一个单独的高速接口提供服务,所以每个数据包有望获得的转发性能要高于由多个端口共享的基于路由交换处理器(RSP)的处理性能。
WRED
加权随机先期检测(WRED:Weighted Random Early Detection)是将随机先期检测与优先级排队结合起来,这种结合为高优先级分组提供了优先通信处理能力。当某个接口开始出现拥塞时,它有选择地丢弃较低优先级的通信,而不是简单地随机丢弃分组。
尾部丢包会引发TCP全局同步现象,导致TCP连接始终无法建立。所谓TCP全局同步现象如图,三种颜色表示三条TCP连接,当同时丢弃多个TCP连接的报文时,将造成多个TCP连接同时进入拥塞避免和慢启动状态而导致流量降低,之后又会在某个时间同时出现流量高峰,如此反复,使网络流量忽大忽小。
根据排队和调度策略的不同
- WAN接口和二层VE接口上的拥塞管理技术分为
- PQ
- WFQ
- PQ+WFQ
- 设备其余LAN接口上的拥塞管理技术分为
- PQ
- DRR
- PQ+DRR
- WRR
- PQ+WRR
Qos设置
- 定义传输类型
- 必须告诉路由器,哪种数据流需要进行QoS管理。可以通过访问控制列表(ACL)或者基于网络应用程序识别(NBAR)的方式来进行定义
- ACL是为路由器设定不同传输数据类型的传统方式
- NBAR则是让路由器识别流经路由器的各种数据的类别,比如HTTP数据是HTTP类别,Skype是Skype类别。但是路由器可识别的应用程序协议数量是有限的,这依赖于路由器内部存储的一个程序协议列表
- 必须告诉路由器,哪种数据流需要进行QoS管理。可以通过访问控制列表(ACL)或者基于网络应用程序识别(NBAR)的方式来进行定义
- 创建类映射
- 类映射就是将不同类型的数据流进行分组。比如,你可以创建一个叫做“VoIP traffic”的类映射,然后将各种VoIP协议归入该类
- 创建策略映射
- 策略映射可以与类映射匹配,确定某类数据流的带宽和/或优先级
- 将策略映射应用于接口
- 和ACL列表一样,你必须将策略映射应用于某个你所设定的端口上。你可以设定策略映射为输入或输出模式