QoS
QoS:Quality of Service服务质量
QoS技术是在带宽恒定的情况下,对流量的优化转发。
网络质量评价标准(影响QoS因素)
1. 带宽 传输路径上最小带宽
2. 时延 处理时延 CPU、FPGA对报文处理的时间
队列时延 报文在队列中排队的时延、流量整形
传输时延 报文在网线、光纤、自由空间介质中传输的时延
串行化时延 数字信号-模拟信号转换的时延
3. 抖动
4. 丢包率 处理过程丢包 CPU使用率100%
队列过程丢包 尾丢弃、WRED
传输过程丢包 网线质量不好、光衰过大、wifi信号弱
QoS模型
- Best-Effort尽力而为:Internet的默认服务类型,对时延、抖动、丢包均不保证。
- IntServ综合服务:用户发送流量前,需要通过信令(RSVP)向网络描述自己的流量参数。网络中的每一跳设备都要预留资源给该用户。该模型难以大规模部属。
- DiffServ差分服务: 用户流量网络边界设备上根据条件(报文S/D IP、S/D port、协议类型、IPv4报文的ToS字段、二层vlan帧的PRI字段)打上不同的标记(颜色),对流量进行分类。在转发流量设备上制定针对不同标记(颜色)流量的转发策略,不同类型流量使用不同策略转发。
DiffServ模型的4个QoS组件
1. 流分类:网络边缘设备对流量进行分类
标记:对不同的流分类设置不同的优先级
2. 当业务流量超过额定速率时,
流量监管:将超过的流量丢弃或重新标记
流量整形:将突发的流量通过限速、延迟转发等手段,使其均匀转发
3. 拥塞管理:网络拥塞时,将报文放入特定队列、按照特定调度算法转发报文
4. 拥塞避免:当发现网络流量将要激增时,主动丢弃报文
报文在设备内的处理流程
分类/打标
[R] traffic classifier 1
if-match acl(匹配感兴趣流)/ 8021p x(重标记)
traffic behavior 1
remark 8021p/DSCP x
traffic policy 1
classifier 1 behavior 1
[R-G] traffic-policy 1 inbound
优先级映射
[R-G] trust 8021p override //信任别人报文优先级
[R] qos map-table dot1q-dscp
input x output y
拥塞管理+拥塞避免
使用队列模版queue-profile
[R] qos drop-profile DROP
wred dscp //根据DSCP WRED丢弃
dscp AF low-limit 30 high-limit 80 discard-percentage 50
[R] queue-profile QUEUE
schedule wfq 0 to 4 pq 5 to 7 //调度(拥塞管理)
queue x drop-profile DROP
queue x weight x
[R-G] qos queue-profile QUEUE //接口应用队列模版
报文优先级
二层、三层、MPLS报文 中的QoS字段
- CoS:802.1p、EXP(3bit优先级)
ToS:IP报文优先级(IP Precedence、DSCP)
- 协议报文,QoS优先级=6
1. VLAN数据帧中的PRI字段(也称802.1p优先级)
2. MPLS标签中的EXP(3bits)字段
3. IP报文的ToS字段(DSCP、IP P)
IP Precedence:ToS前3位,规定了23=8个优先级
DSCP:ToS前6位,有2种表达形式:
数字形式:26=64个优先级
关键字形式:尽力而为BE、保证转发AF、加速转发EF、类选择器CS
- 路由器子接口,dot1q termination vid终结了子接口的vlan tag。如果vlan tag中有802.1p优先级,路由器不会根据802.1p将报文入队列。
因此路由器收到vlan tag帧时,
需要做优先级映射(802.1p → DSCP)
报文优先级 → 本地优先级(WFQ2)
IPv4报文头中TOS字段DSCP↑
DSCP 6bit = IP Precedence 3bit + 3bit
简单流分类
根据报文优先级(802.1p、EXP、DSCP),流分类
- 一般用在网络中间节点(信任上游报文优先级)
复杂流分类
根据报文的五元组【源/目IP、源/目端口号、协议】及报文优先级,流分类
用Hash(五元组、报文优先级)标识一个流
- 一般用在网络边界(DS域边界,不信任其他DS域优先级)
配置报文优先级
[R] traffic-behavior xxx
数字形式: remark 8021p / mpls-exp 0~7
remark dscp 0~63
关键字形式: remark dscp default / AFxx / EF / CS0~7
优先级映射
为什么要映射?
1. PRI、ToS、EXP映射成为内部优先级(本地优先级)后,进入不同队列,提供差分服务
2. 路由器从子接口收到vlan tag帧(带802.1p优先级)、MPLS收到EXP,需要映射到DSCP后,传给下游路由器
3. 通过override参数,控制报文出设备时的报文优先级
[R-G0/0/1] trust 8021p override //接收报文的8021p优先级
[R] qos map-table dot1p-dscp //本设备上8021优先级映射为DSCP
input 5 output 46 //映射规则
input 4 output 32
input 3 output 24
input 2 output 16
input 0 output 0
override表示报文离开设备时,使用(映射后的)内部优先级,覆盖
DS域(差分服务域/信任域)
trust表示信任(采用)别人DS域的报文优先级
Eg. 公司A对自己内部报文做了各种报文优先级标记,传递给公司B后,公司B使用trust命令采用A公司的报文优先级(而不是重新流分类)
接口队列
接口队列默认8个(高端设备更多)
默认队列
- 默认队列采用FIFO、PQ、WRR、DRR、WFQ、PQ+WFQ调度方式
1. CS经典队列
BE=CS0
DSCP后三位=0
CS DSCP 前3bit传统优先级
xxx000
CS0-7 8、16……56 0-7
2. EF队列(加速转发)
DSCP 前3bit传统优先级
101110=46 5
3. AF队列(确保转发)
AFxy DSCP 前3bit传统优先级
AF11 001 01 0 1
AF21 010 01 0 2
AF32 011 10 0 3
AF43 100 11 0 4
DSCP=8x+2y
- y↑丢包概率↑
自定义队列(MQC定义,CBQ调度)
EF(Expedited Forwarding加速转发队列):严格按照QoS优先级转发
LLQ(Low Latency Queueing低时延队列):一种特殊的EF
AF(Assured forwarding确保转发队列):固定带宽转发
BE(Best Effort尽力而为队列):默认队列。WFQ调度
- EF+LLQ≤4
PHB(Per Hop Behavior)
相同DSCP值的报文的下一步转发行为(和EF、AF、BE队列无关)
三种PHB:加速转发EF(Expedited Forwarding)、确保转发AF(Assured Forwarding)、尽力而为BE(Best-Effort)
MQC
MQC:Modular QoS Command模块化QoS命令行
流分类Traffic Classifier
[R] traffic classifier name [operator {and | or}] //匹配感兴趣流
if-match acl 2000
if-match inbound-interface G0/0/0
流行为Traffic Behavior
[R] traffic behavior name
permit / deny 允许/拒绝流量
remark 打标
car cir 监管
gts cir 整形
statistic enable 流量统计
redirect 接口PBR
drop-profile WRED(通常在queue-profile中做)
流策略Traffic Policy
自定义流策略名,然后绑定(流分类-流行为)
[R] traffic policy P1 //流策略名P1
classifier C1 behavior B1 //流分类C1执行流行为B1
classifier C2 behavior B2 //流分类C2执行流行为B2
classifier default-class behavior B3
//没有匹配到C1、C2时,匹配默认流分类,执行流行为B3
接口应用流策略
最后,需要在接口视图下应用流策略
[R-G] traffic policy name {inbound | outbound}
修改报文优先级 配置示例
在路由器R1的二层接口E2/0/1的入方向上,将VLAN的QoS优先级(802.1p优先级)从3提高至5
流分类: [R1] traffic classifier C1
if-match 8021p 3
流行为: traffic behavior B1
remark 8021p 5
流策略: traffic policy P1
classifier C1 behavior B1
应用流策略 [R1-E2/0/1] traffic-policy P1 inbound
拥塞管理(调度方式)
调度: 入队列:如何将报文放入各队列
出队列:网络拥塞时,按照何种方式转发报文
LAN口拥塞管理技术:PQ、DRR、PQ+DRR、WRR、PQ+WRR
WAN口拥塞管理技术:PQ、WFQ、PQ+WFQ
- 设备的每个接口维护8个优先级递减(7~0)的接口队列
FIFO(First In First Out先进先出调度)
默认调度类型
PQ(Priority Queue优先级队列调度)
入队列: 根据报文优先级,进入不同队列
出队列: 根据队列优先级,从高到低依次转发(7→0)
缺点:网络拥塞严重时,低优先级队列数据“饿死”
WRR(Weighted Round Robin加权轮询调度)
入队列: 根据报文优先级,进入不同队列
出队列: 根据队列权重,按照包个数轮询发送
缺点:只关心包个数,不关心包大小
RR:不设置权重
DRR(Deficit Round Robin赤字加权轮询调度)
(W)RR按包个数轮询发送
DRR:按包长度轮询发送
- 每个队列设置赤字值,本次转发的包若过大,下一次先弥补赤字再转发。
WDRR(DRR基础上+队列权重)
WFQ(Weighted Fair Queue加权公平调度,基于流)
- 有两种方式
WFQ1:
入队列时: Hash{流五元组【源/目IP、源/目端口、协议】、IP Precedence},自动流分类
尽量为每个流分配一个队列,总体上平均各个数据流的延迟。
出队列时: 根据IP Precedence,加权分配接口带宽
缺点:数据流是自动分类的,无法手工干预;“太公平”,不适合时延敏感业务。
WFQ2(LAB1)
入队列时: 根据map-table映射报文优先级,为每个优先级分配一个队列
出队列时: 根据配置的队列权重值,加权分配接口带宽
PQ+WFQ调度(LAB1)
- PQ和WFQ优势互补
时延敏感流量: PQ方式调度队列7、6、5
普通流量: WFQ方式调度队列4、3、2、1、0(加权分配带宽)
CBQ(CBWFQ,Class Based WFQ基于类的加权公平调度)
- CBQ调度方式基于MQC
WFQ对流量自动分类
CBQ用户自定义:流类型(称为类)、队列类型、接口带宽
CBQ队列类型:
EF队列:加速转发队列、LLQ队列:低时延队列(时延较EF更低)
如果拥塞,优先转发
如果不拥塞,可占用AF、BE队列的空闲带宽转发(可设置占用最大带宽)
AF队列:确保转发队列(固定带宽)
BE队列:尽力而为:默认类(Default-Class),WFQ调度。
[R-acl-3000] rule permit icmp
[R] traffic classifier ICMP
if-match acl 3000
traffic behavior ICMP
queue llq bandwidth pct 10 //流量放入LLQ队列,分配10%最大带宽
traffic policy P1
classifier ICMP behavior ICMP
[R-G] traffic-policy P1 outbound
- 用户自定义类:ICMP,自定义队列类型AF
各队列调度 优/劣
拥塞管理配置
LAN口:PQ、DRR、PQ+DRR、WRR(默认)、PQ+WRR
WAN口:PQ、WFQ(默认)、PQ+WFQ
第一种方法:基于队列模版(PQ WRR DRR WFQ)
[R] qos queue-profile QUEUE //创建队列模版,名称=PQ1
schedule wfq 1 to 5 pq 7 //CS1-5队列WFQ调度;7队列PQ调度
[R-G] qos queue-profile QUEUE //接口上应用队列模版PQ1
第二种方法:基于MQC(CBQ)
将ICMP流量放入AF队列,保证至少10%带宽
[R-acl-3000] rule permit icmp
[R] traffic classifier ICMP
if-match acl 3000
traffic behavior ICMP
queue af bandwidth pct 10 //流量放入AF队列,分配10%带宽
statistic enable //使能流量统计
traffic policy P1
classifier ICMP behavior ICMP
[R-G] traffic-policy P1 outbound
拥塞避免(丢弃方式)
拥塞避免:监视接口队列,网络流量激增时,主动丢弃报文,避免接口拥塞
尾丢弃
队列满时,丢弃队列尾部新来的报文
- 尾丢弃方式容易引发TCP全局同步、TCP饥饿
TCP建立时,源端会从一个特定带宽值发起TCP连接,并且TCP带宽使用的带宽会逐渐增大(TCP慢启动),以探测网络的剩余带宽。当使用带宽超过一定值后,链路拥塞,收不到ACK回包,再逐渐减小带宽使用量(调小TCP滑动窗口)。
TCP全局同步:当链路上有多个TCP连接报文时,
初始链路不拥塞→所有TCP连接加大带宽使用量(滑动窗口↑),导致拥塞→所有TCP连接减小带宽使用量(滑动窗口↓),不拥塞。
TCP饥饿:如果链路上有大量TCP和UDP连接,导致拥塞。由于TCP检测到拥塞后会减小带宽使用量,而UDP不会。最终UDP会占用掉绝大部分带宽,导致TCP没有带宽。
加权早期随机检测WRED
为了解决TCP全局同步、TCP饥饿,可使用WRED丢弃方式。
WRED:在队列未满时,随机丢弃一部分报文,使多个TCP连接不同时降低发送速度
为不同报文优先级(IP P、DSCP)报文,设置不同的丢弃上下限及丢弃概率
队列中报文数量: <下限 不丢弃
[下限,上限] 线性丢弃,新收到的报文
>上限 全部丢弃,新收到的报文
WRED配置:
[R] drop-profile DROP
wred dscp //基于DSCP优先级配置WRED丢弃策略
dscp ef low-limit 60 high-limit 90 discard-percentage 50
//dscp优先级为ef的报文,丢弃下限60%,上限90%,丢弃最大概率50%
[R] qos queue-profile QUEUE
queue 7 drop-profile DROP //CS7队列丢弃模版为DROP
LAB拥塞管理+拥塞避免配置
[PE4] drop-profile CS4
wred dscp
dscp cs4 low-limit 70 high-limit 100 discard-percentage 50
drop-profile CS3
wred dscp
dscp cs3 low-limit 50 high-limit 90 discard-percentage 50
drop-profile CS2
wred dscp
dscp cs2 low-limit 50 high-limit 80 discard-percentage 50
drop-profile CS0
wred dscp
dscp default low-limit 50 high-limit 80 discard-percentage 50
[PE4] qos queue-profile QUEUE
queue 4 weight 63 //拥塞管理(队列权重)
queue 3 weight 21
queue 2 weight 9
queue 0 weight 1
schedule wfq 0 to 4 pq 5 //拥塞管理(队列调度方式)
queue 4 drop-profile CS4 //拥塞避免(丢弃方式)
queue 3 drop-profile CS3
queue 2 drop-profile CS2
queue 0 drop-profile CS0
[G] qos queue-profile QUEUE
令牌桶
令牌桶用于流量监管、流量整形
令牌桶中预设了一定数量的令牌,并且按一定速率放置令牌。
当桶满时,令牌溢出丢弃。
当数据流到达设备时,取出与数据大小相同的令牌一起传输。
若数据流速度过快,桶中令牌耗尽,数据速度=令牌放置速度,多出来的数据被丢弃或缓存,以达到限速的目的。
令牌桶算法分类(色盲/色敏)
色盲模式(默认): 初始流量视为无颜色
色敏模式:初始流量已经有颜色,
初始流量=绿色,按照色盲模式进行标色
初始流量=黄色,通过令牌桶的,标为黄色;没通过标为红色
初始流量=红色,直接标记为红色
- 红、绿、黄三色标记
默认绿、黄转发,红色丢弃(可配置)
- 通过对流量的标色,后续如果拥塞发生,可以依照颜色进行拥塞管理、拥塞避免
单速单桶 & 单速双桶
单速单桶
C桶:Committed
E桶:Excess
CIR:承诺信息速率Committed Information Rate。表示 令牌放置速率。
CBS:承诺突发尺寸Committed Brust Size。表示 C桶的容量。
EBS:超额突发尺寸Extended Brust Size。表示 E桶的容量。
- EBS > CBS
单速双桶
通常情况下(流量速率<CIR),C桶令牌增加至满,然后增加E桶令牌至满。
双速双桶
P桶:Peak
PIR:峰值信息速率。表示P桶放置令牌的速率 = 端口突发最大速率;PIR≥CIR
PBS:峰值突发速率。表示P桶的容量 = 允许的突发最大流量;PBS≥CBS
- 华为设备,仅支持配置双速双桶模型
单速单桶模型可以将cir=pir、CBS=PBS实现
- 先比较P桶,再比较C桶
报文B>Tp(P桶令牌都不够),报文标记为红色,不取令牌。
Tp>B>Tc(令牌P桶够,C桶不够),报文标记为黄色,从P桶取走数量=B的令牌(C桶不取)转发
Tc>B(P、C令牌都够),报文标记为绿色,P、C两个桶都取走数量=B的令牌转发
流量监管(car限速:超速丢弃)
car = Committed Access Rate承诺访问速率
流量监管:对进入网络的流量限速,对超出部分 丢弃 或者 重标记
- 丢包率高、流量不平滑、不影响时延
流量监管配置
- cir、pir单位是Kbit/s
- CBS、EBS、PBS单位是Byte
基于接口 流量监管(限速)
[R-G] qos car inbound source-ip-address 10.0.0.1 cir 256 //10.0.0.1限速,总带宽=256kb/s
[R-G] qos car inbound/outbound cir 1024 pir xxx //接口限速1Mb/s
基于MQC 流量监管(限速)
VLAN 10视频,限速10Mb/s
[R] traffic classifier VIDEO
if-match vlan-id 10
[R] traffic behavior VIDEO
car cir 1000 [ cbs 18800 pir xxx pbs 31300 green pass yellow pass red discard ]
statistic enable //使能流量统计
[R] traffic policy P1
classifier VIDEO behavior VIDEO
[R-G0/0/0] traffic-policy P1 inbound / outbound
[R] display traffic policy statistics interface xxx inbound/outbound
使能流量统计后,查看被标色、丢弃的流量
流量整形(gts/lr/shaping限速:超速延迟转发)
gts = Generic Traffic Shaping
流量整形是对接口输出报文的速率进行控制,使其以均匀的速率发送出去。
- 流量整形只能在出接口使用(入接口没有缓存队列)
- 通常不改变MTU情况下,上游设备出方向做流量整形,下游设备入方向就可以平滑地接收流量
- GTS基于IP报文
- 流量整形通常用在:上游高速链路上配置匹配下游低速链路
- 丢包率不高、流量较平滑、会增加时延
路由器接口流量整形
基于接口 [R-G] qos gts cir 100 [ cbs 2500 ]
基于MQC [R] traffic behavior
gts cir 100
路由器队列流量整形
基于队列模版 [R] qos queue-profile QUEUE
queue x gts cir 100
路由器限速
[R-G] qos lr pct 50 //路由器lr仅用于接口限速(限带宽百分比)
交换机接口流量整形
[SW-G] qos lr cir outbound 100 //交换机lr有C桶,可以为标记红色流量缓存,流量整形
交换机队列流量整形
[SW-G] qos queue 0~7 shaping cir 100
★交换机、路由器流量整形的区别
流量整形:单速单桶,红色流量放入缓存队列,不拥塞时转发
流量整形出接口、队列使用
交换机
接口(lr outbound) [G] qos lr outbound cir
队列(shaping) [G] qos queue x shaping cir pir 仅shaping是双速双通
路由器
接口(gts) [G] qos gts cir
或MQC traffic behavior
gts cir
traffic policy X outbound
队列(queue-profile gts) queue-profile A
queue x gts cir
[G] qos queue-profile A
- gts基于IP报文,因此SW无法使用
流量监管、流量整形的区别
监管:超速 标红 丢弃 整形:超速 标红 延时转发
丢包率 时延
监管 高 低
整形 低 高
位置 监管 接口 出/入
整形 接口、队列 仅出方向
监管 交换机(lr inbound、car) [G] qos lr inbound cir
MQC traffic behavior下car cir pir
traffic policy X inbound/outbound
路由器(car) [G] qos car inbound/outbound cir pir
MQC traffic behavior下car cir pir
traffic policy X inbound/outbound
整形 交换机 接口(lr outbound) [G] qos lr outbound cir
队列(shaping) [G] qos queue x shaping cir pir
路由器 接口(gts) [G] qos gts cir
MQC traffic behavior下gts cir
traffic policy X outbound
队列(queue-profile gts) queue-profile A
queue x gts cir
[G] qos queue-profile A
- car、shaping使用双速双桶、其他使用单速单桶
car、gts、lr
car监管 G inbound/outbound
gts整形 G/queue outbound
lr限速 SW中 qos lr inbound cir 监管
qos lr outbound cir 整形
R中 qos lr pct 限速(限接口带宽百分比)
LAB QoS
CE1接口流量监管(周一至周五8:00-18:00对TCP port 6881-6999限速1Mbps)
[CE] time-range WORKING 08:00 to 18:00 working-day
[CE1-acl-3000] rule permit tcp destination-port range 6881 6999 time-range WORKING
[CE1] qos car outbound 3000 cir 1024
CE4简单流分类:
[CE4] acl name REALTIME 3031
rule permit ip destination 10.3.1.0 0.0.0.255
acl name SINGLE 3032
rule permit ip destination 10.3.2.0 0.0.0.255
acl name MONITOR 3033
rule permit ip destination 10.3.3.0 0.0.0.255
acl name OFFICE 3034
rule permit ip destination 10.3.4.0 0.0.0.255
traffic classifier REALTIME traffic behavior REALTIME
if-match acl REALTIME remark 8021p 5
traffic classifier SINGLE traffic behavior SINGLE
if-match acl SINGLE remark 8021p 4
traffic classifier MONITOR traffic behavior MONITOR
if-match acl MONITOR remark 8021p 3
traffic classifier OFFICE traffic behavior OFFICE
if-match acl OFFICE remark 8021p 2
traffic behavior OTHER
remark 8021p 0
traffic policy QOS
classifier REALTIME behavior REALTIME
classifier SINGLE behavior SINGLE
classifier MONITOR behavior MONITOR
classifier OFFICE behavior OFFICE
classifier default-class behavior OTHER
[CE4-G0/0/1] traffic-policy QOS outbound
[PE4-G0/0/1] trust 8021p override //信任CE4的802.1p流分类
802.1p→DSCP映射 //WFQ2
[PE4] qos map-table dot1p-dscp
input 5 output 46
input 4 output 32
input 3 output 24
input 2 output 16
input 0 output 0
配置接口队列的拥塞避免(丢弃模版)、拥塞管理(调度方式)
[PE4] drop-profile CS4 //丢弃模版(拥塞避免)
wred dscp //基于DSCP,WRED丢弃
dscp cs4 low-limit 70 high-limit 100 discard-percentage 50
drop-profile CS3
wred dscp
dscp cs3 low-limit 50 high-limit 90 discard-percentage 50
drop-profile CS2
wred dscp
dscp cs2 low-limit 50 high-limit 80 discard-percentage 50
drop-profile CS0
wred dscp
dscp default low-limit 50 high-limit 80 discard-percentage 50
[PE4] qos queue-profile QUEUE //队列模版
queue 4 weight 63 //WFQ2根据队列权重分配出口带宽
queue 3 weight 21
queue 2 weight 9
queue 0 weight 1
schedule wfq 0 to 4 pq 5 //调度方式WFQ+PQ(拥塞管理)
queue 4 drop-profile CS4 //各队列丢弃方式
queue 3 drop-profile CS3
queue 2 drop-profile CS2
queue 0 drop-profile CS0
PE4接口调用队列模版(拥塞管理、拥塞避免)
[PE4-G0/0/0] qos queue-profile QUEUE
[PE4-G0/0/2] qos queue-profile QUEUE
IPv6中的QoS
IPv6报文头
流分类(与v4 ToS类似)前6bit为DSCP
Flow Label:流标签。QoS通过Hash五元组(S/D IP、S/D端口、协议)唯一标识一股流,这就要求QoS路由器需要将所有报文解封装到4层。而IPv6中,将Hash结果填入Flow Label,设备只需要解封装到3层,加快了转发效率。
扩展头对QoS支持
逐跳选项扩展头 中的route alert
路由选择扩展头 表示经过哪些IP(松散源路由)
IPv6中的Label Switch Architecture一种新的流标签的使用建议