第九讲 QoS 服务质量
0x01 QoS基本概念
衡量指标:带宽、时延、丢包率等等
目标是避免网络拥塞,降低时延,减少丢包,调控流量,为特定用户或业务提供专用带宽,支撑实时业务
不能创造带宽,但是可以对网络资源进行管理
1 端到端时延
包括处理时延、传播时延、排队时延,传播时延固定(和链路长度有关),处理时延和排队时延可优化
处理时延:数据包从入端口被路由器接受到放到出端口队列等待转发的时间
排队时延:数据包在出端口队列到被发送的时间
传播时延:数据包在链路上发送和传播的时延
有的路由器在入口和出口有俩队列,大部分只有出端口一个队列
2 丢包
丢包通常发生在数据队列满的时候,有线链路的丢包发生在链路拥塞时,无线链路的丢包基本都是因为信道质量差
0x02 QoS三种服务模型
1 尽力而为服务模型best-effort service
单一、最简单,等于没有服务质量保障,尽最大能力发送报文,但是对带宽、延时等等不提供任何保障
通过FIFO队列来实现
2 综合服务模型intergrated service
传输前预留足够多的资源,发送报文前向网络申请特定服务,通过RSVP信令来完成
通知网络我的服务质量要求,包括带宽、时延等等,网络收到后回复确认信息,就代表已经给我预留了我要的这么多资源
RSVP协议
端到端的每个设备上,监视每个流,明确区分并保证每一个流的服务质量,非常细的粒度
特点是工作在IP层之上,属于传输层协议,不处理数据传输,只做服务质量控制,在点对点单播或组播中都可以做资源预留,单工协议,由数据的接收端来规定服务质量(比如视频用户自己选择码率),对不支持它的路由是透明的
工作原理
发送端定期发送path消息,描述业务流的特征SENDER_TSPEC,该消息沿路由选择的路径转发
每一个中间RSVP路由都截获path消息,建立软状态,记录这个特征SENDER_TSPEC和上一跳路由PREVIOUS_HOP
接收端收到消息之后回复Resv消息,指定自己的QoS需求FLOWSPEC和过滤数据包的对象FILTER_SPEC,Resv沿着刚刚的路径走,反方向逐跳传递,目的地址是刚刚获取到的PREVIOUS_HOP
发送端收到Resv消息,做资源预留,并回复确认消息
移动环境下的扩展
资源预留没法穿越移动IP的隧道,没有提前预留机制,没有资源浪费避免机制,不区分不同类型会话的预留请求
优缺点
优点:
QoS得到绝对保障(只要预留了,要多少我给你留多少)
缺点:
可扩展性差,需要端到端信令,为每一个会话都预留软状态
路由器要求高,只要路径上有一个不是RSVP路由,就相当于根本没做资源预留
不适合短生存期流,做资源预留的开销都够直接把它发完了的
3 区分服务模型differentiated service
起源于综合服务模型,但是是粗粒度
不需rsvp,不需要网络预留资源
不需要为每个流都维护状态,根据每个报文的差分服务类来提供特定的服务,用DS标记
基本思想是分类
工作原理
用户和ISP约定服务等级SLA,在ISP的入口根据SLA对流量做分类和整形,在核心路由器中通过粗粒度包分类来进行调度分配路由
优缺点
优点:
扩展性好,开销小,只标记类别数,状态信息数量和类别数而不是流数正相关
层次化结构,不同区域有不同服务策略
不影响路由,只影响队列调度和缓冲管理
缺点:
只能提供粗粒度的QoS保障
本质是一种相对优先级,不能提供端到端保障
组件分散,需要协同一致,统一策略管理
综合服务和区分服务的对比
综合服务:细粒度,严格质量保证,网络核心复杂,扩展性差,需要路由之间的信令,面向流(连接)
区分服务:粗粒度,相对质量保证,网络边缘复杂,扩展性好,不需要路由之间的信令,面向分组(分类)
0x03 流量整形和标记
实现区分服务模型的关键机制(涉及到流量分类)
MPLS EXP标识+diff-serv DS位
MPLS EXP标识:3位,采用标签转发机制
结合diff-serv位,有两种实现方法
E-LSP
队列和优先级标记基于MPLS标签和EXP位
将DS位映射到EXP位,最多可支持8种不同的服务等级
LSR(标记交换路由)根据LABEL和EXP对分组进行队列调度,根据EXP选择性丢包,同一LSP(标记交换路径)的流可能被分到不同的队列,从而实现不同等级控制
是通过标签分发协议建立的普通LSP
L-LSP
队列和优先级标记基于MPLS标签和EXP位之外
将DSCP映射为一个LSP,通过LABEL和EXP向LSR标识QoS要求,一个LSP支持一个QoS等级
LSR根据LABEL对分组进行队列调度,根据EXP选择性丢包,同一LSP的分组被分到同一个队列
通过约束路由标签分发协议或RSVP-TE建立,有一定的QoS能力
QoS策略路由PBR
policy based router,不仅根据目的ip进行路由
主要也是设立一些规则,手工配置,需要同时优化多个参数,调参难,多业务并存难以优化,节点状态信息存储太大,不准确
0x04 拥塞控制和调度策略
不同等级的包被放在不同的队列中,路由器按照一定的AQM进行管理并决定服务的先后顺序
AQM直接影响路由器性能和QoS
队列分硬件队列和软件队列,硬件队列永远FIFO,软件队列有策略,每个队列机制包括分类、排队策略、服务策略三种
队列机制主要有FIFO、PQ、CQ、WFQ、CBWFQ五种
FIFO
first in first out,先进先出
基本上是硬件FIFO的扩展,不提供QoS多级服务
优点:简单快速,支持性好
缺点:流之间没有带宽公平,不分优先级,没法保证重要业务
PQ
priviledge queue,优先级队列
分类标准包括:路由器源端口、IP access list、包大小、分片、TCP源/目的端口、UDP源/目的端口
转发时按照分级从高到低轮询,高的只要不空就永远发不到底的头上
优点:算法简单,可以保障高优先级业务的QoS
缺点:欠公平,低优先级队列饥饿
CQ
customised queue,定制队列
提供16个FIFO定制队列,用户自定义traffic类别
分类标准和PQ一样
队列调度使用轮询算法,每个队列都只能发送规定的字节数,给第一类发N1个,给第二类发N2个,…,给第十六类发N16个,给第一类发N1个,…
优点:可以保障每种等级的带宽,防止出现饥饿
缺点:单一队列仍然是FIFO,需要在每一跳手工配置,容易产生高时延抖动,16种粒度太粗,没办法精细化控制,轮询不能保证最高等级的QoS
改进:加入抢占机制:加一个0队列,只要0有就发0,没有再说
WFQ
weighted fair queue,加权公平队列
解决CQ粗粒度的问题
根据每个流来共享带宽,调度单位是每条流,防止大流量会话独占端口,引入权重,高权重的流会获得更多的带宽
同一个流的数据一般会排到同一个queue中,也可以划到不同队列(比如视频中的基本帧优先级高,增强帧优先级低)
在包加入和包丢弃的环节,考虑HQO和CDT
HQO是硬件允许的最大排队数量,可以理解为buffer的总大小,CDT是可能产生拥塞的阈值,达到这个阈值之后开始尝试丢包
超过HQO,并且这个包的等级是系统要发送的最后一个包,那就直接扔了
超过HQO,但这个包的等级不是系统要发送的最后一个包,那就让它进来,把最后一个包扔了
超过CDT但没超过HQO,并且这个包的等级是系统要发送的最后一个包,那就直接扔了
超过CDT但没超过HQO,这个包的等级也不是系统要发送的最后一个包,那就让它进来,这次不丢包
空队列永远不丢包,每个包进来的时候都被打上finish time标签,按finish time标签依次发送
优点:配置简单,兼顾所有流的带宽,优先保障高优先级流的QoS
缺点:不能对流进行客户化定制,不能提供固定带宽保障(严格按用户要求提供服务)
CBWFQ
0x05 流量监管和流量整形
限速:超过带宽限额的突发数据丢弃或降为低等级流量转发
整形:超过带宽限额的突发数据缓冲起来,等流量下降以后再发送,做平滑处理
测量流量速率的方法:令牌桶
令牌桶中放的有令牌,数据接口每通过一个Bit或者一个byte都要花掉一个令牌,桶里没有令牌的时候不能发送,令牌会定期向桶里添加,也就是加令牌的速度决定了数据通过接口的速度,通过控制这个速度来控制用户流量带宽,这个速率称为承诺信息速率