QoS学习笔记
年底了,是时候整理下笔记了
QoS的机制
分类,标记,拥塞管理,拥塞避免,管制整形,链路效率
- 分类:将数据分成不同的类别
- 标记:标记成不同的优先级
- 拥塞管理:网络产生拥塞时,规定数据以什么样的先后顺序传输
- 拥塞避免:当网络(队列)即将产生拥塞时,如何丢弃数据包,避免产生拥塞
- 管制整形:当用于超出额定带宽是,超出部分不能被传输,采用其他方式处理。
- 链路效率:通过头部压缩或者链路分段,来提高带宽效率
分类和标记是实现差分服务的前提和基础;流量监管、流量整形、接口限速、拥塞管理和拥塞避免从不同方面对网络流量及其分配的资源实施控制,是提供差分服务的具体体现.
各种QoS技术在网络设备上的处理顺序如下图:
不同技术能应用的方向如下:
QoS部署模式
1)CLI:早期传统网络去部署
2)MQC:(重点)模块化QoS
- 定义流量—class-map
- 设置策略—policy-map
- 应用策略—service-policy
3)Auto-QoS:在设备,预先配置好了profile,只需要调用即可
- VoIP
- Enterprise
用于QoS的头部字段
二层报头没有专门预留的QOS位,在VLAN帧头和MPLS封装中有以下字段可以用于QOS:
COS位:trunk技术,在802.1q报头中有一个3位的PRI ,分为0~7八个等级,5代表语音
MPLS的EXP位,3位,分为0~7八个等级
三层的ip包头部有一个8位的ToS位,有两种不同的方法来表示数据包的优先级:IPP和DSCP。
- IP precedence
使用TOS的高3位,0~7等级,后5位置0
DSCP区分服务代码点
使用TOS的高6位,有0~63个等级,可以标记的种类更多,一般分为四种:Default,6bit全0
EF,加速转发,101110,特点:确保最小时延,保证带宽,管制带宽
AF,保证转发,aaadd0,’aaa’代表不同的分类1-4,‘dd’代表丢包的可能性1-3,特点:保证带宽,没有拥塞时允许使用额外带宽。每个AF拥有独立的转发机制和带宽保证,dd越大,丢弃可能性越高。
AF1: af11, af12, af13
AF2: af21, af22, af23
AF3: af31, af32, af33
AF4: af41, af42, af43CS,兼容IPP,只用高三位,xxx000,cs0-cs7
在使用路由器模拟发包的时候,比如扩展ping,不能直接设置IPP或DSCP的值,只能设置TOS,对应的关系是TOS = IPP × 32 和 TOS = DSCP × 4
QoS机制分析
1,分类
有两种方式:MQC和NBAR
MQC 实现2~4层的匹配
class-map中match可以用match调用一下内容:- ACL
- IP precedence value
- DSCP value
- Qos group number
- MPLS Exp bit
- Protocol
- Another class-map嵌套
- Frame Relay DE bit
- IEEE 802.1q/ISL COS
- Input Interface
- Source MAC address
- Destination MAC address
- RTP(UDP) port range
- Any packet
NBAR:基于网络层的应用识别,用于4~7层匹配
解决了C/S和基于web应用的分配识别.
NBAR的功能:- 识别4-7的应用和协议
- 协议发现
- 提供流量统计
NBAR可用于分类的应用程序:
- 静态的TCP/UDP端口号
- 非TCP/UDP协议
- 连接过程中动态协议书的端口
- 子端口类型:http分类
- MIME
配置,需要先开启CEF
然后接口下配置协议发现
ip nbar protocol-discovery
2,标记
数据包上可以设置以下标志:
- IP precedence value
- DSCP value
- Qos group number
- MPLS Exp bit
- Frame Relay DE bit
- IEEE 802.1q/ISL COS
Class-map分类之后,在policy-map中调用,然后set一个标记,最后在接口调用
3,拥塞管理
主要是队列技术,只能应用在out方向
每个接口只有一个硬件队列,可以有多个软件队列
硬件队列默认就是FIFO,软件队列有FIFO,PQ,WRR等
- FIFO:先进先出,简单,拥塞时无法保证关键业务优先发送
- PQ:优先级队列,需要设置每个软件队列的优先级,高优先级调度完才调度低优先级,且抢占,低优先级有饿死的风险
- RR:轮询,解决PQ低优先的风险,每个队列平等的轮询,无法保证关键业务优先发送
- WRR:权重轮询,能改善关键业务的有线情况,但是调度不精确:按包数量大小权重的话,包大小无法控制;如果按字节数,可能导致包被过度分片
- DRR:赤字轮询,这次多调用,下次少调用,但是同样调度不精确,只能缓解WRR
- WFQ:加权公平队列,共享带宽,高优先级分配的带宽高,低优先级带宽低,但能保证每个优先级都有指定的带宽,但是不支持自定义对流量分类,默认接口速度低于2.08Mbps是WFQ队列,大于2.08是FIFO队列
- CBFWQ:基于类的加权公平队列,先使用class-map分类,然后插入策略(每个队列拥塞避免),分配带宽(指定bandwith,百分比,剩余带宽的百分比)
- LLQ:PQ+CBWFQ
4,拥塞避免
队列满了之后,默认使用尾丢弃。
- 会影响 TCP同步,导致重传,降低滑动窗口大小
- TCP饿死
- 无差异的丢弃
RED,随机早期检测,在队列满之前随机丢弃数据包
- 放慢TCP会话
- 减小平均队列的消息
- 避免TCP会话同步
WRED,基于权重的随机早期检测,使用IPP或者DSCP的RED Profile进行丢弃,先丢弃优先级低的。
ECN,显示拥塞通知。
利用ECN标记,来代替丢包,告知对方网络产生拥塞,需要降低滑动窗口大小,
从而避免TCP会话因丢包而重传
5,管制和整形
policing,丢弃超出的数据包;超出部分的数据支持重标记;output
shaping,缓存超出的数据包,直到缓存区满为止;input&output
令牌桶:
Bc:burst size 令牌桶的大小
Tc:time interval 加令牌的时间,多久加一次令牌
CIR:每秒往桶里加令牌的速率,决定了用户流量的大小,CIR = Bc / Tc
Be:第二个令牌的大小
PIR:向第二个令牌的添加令牌速率
单速单桶:
单速单桶模式不允许流量突发,当用户的流量速率小于配置的CIR时,报文被认为是conform;当用户的流量大于CIR时直接被认为是exceed(思科exceed华为violate)。
(图中Tc代表桶里令牌的数量,CBS代表令牌桶的容量即Bc)
1 | #如果只配置CIR,不指定Bc,那么默认Bc等于1500bytes或者 CIR数值 / 32 |
单速双桶:
支持突发流量,用户的流量会出现三种结果:
- 小于或等于CIR(也就是符合CIR) (conform)
- 大于CIR并小于或等于CIR与Be之和(也就是符合两个桶令牌之和)(exceed)
- 超过CIR与Be之和(也就是超过两个桶令牌之和)(violate)
(图中Tc、Te代表桶里令牌的数量,CBS,EBS代表令牌桶的容量即Bc、Be)
1 | #如果只配置CIR、Bc,不指定Be,那么默认Be等于1500bytes或者CIR数值 / 32。 |
双速双桶:
(图中Tc、Tp代表桶里令牌的数量,CBS,PBS代表令牌桶的容量即Bc、Be)
1 | class 800 |
6,链路效率
一般部署在低速广域网链路
- 压缩,二层payload压缩;包含二层header和有效payload压缩
- header压缩,对三IP,TCP,RTP的头部进行压缩
- 链路分片和交互式发送。
QoS的测试验证
最早学习的时候,所有人都说模拟器只能敲QoS命令,无法验证效果,最对就是show policy-map interface 看下配置结果。
确实,模拟器没有真实的流量,也没有合适监控图表能实时显示流量。
这次复习QoS,我想试试能不能测试,首先是拿docker启动一个zabbix容器,然后为了查看方便,虚机上还装了grafana,这些工具之前都介绍过.
关于路由器镜像,IOL镜像不支持snmp;dynamic镜像支持snmp,但是接口流量好像不是实时的,大概1分钟才更新一次,在这1分钟内取多少次都不变(注:SNMP的大部分数值都是自增的,实际结果要取差值);vIOS由于本身不是模拟器,而是虚拟的IOS,所以完美支持snmp功能,可以用于各种测试和监控。
关于QOS测试,效果比较好的就是流量整形了,我是拿两台路由器通过ping size产生的流量,以shape average 500000
为例,结果如下图:
然后,流量管制的效果不太理想,原因是我的流量太单一太少,数据包的大小都是固定的,这一秒令牌够的时候就转发,下一秒不够流量就是0,没能完美出图:
参考文档
配置指南-QoS
CCIE资料库→CCIE R&S v4.0 理论→QOS
思科QOS中的令牌桶算法
qos令牌桶(Token Bucket)算法解析
QOS-6 管制policing和整形shaping
QoS基础及技术原理——2