目录
三层报文多使用IP Precedence和DSCP标识QoS优先级
网络质量主要通过带宽、时延、抖动、丢包率四方面体现
网络带宽
带宽指的是单位时间内能够传输的数据总量(单位bps)
带宽越大,网络质量越好
一条传输路径的最大带宽主要取决于传输路径上耳朵最小带宽(木桶效应)
带宽的单位转换
计算速率时
以bit为单位(也就是bps)
1000bit/s = 1kbit/s
1000kbit/s = 1Mbit/s
1000Mbit/s = 1Gbit/s
以Byte为单位(也就是Bps)
1Byte/s=8bit/s
计算存储容量时
1024b = 1Kb
1024Kb = 1Mb
1024Mb = 1Gb1Byte = 8bit
我们通常说的百兆是以bps为单位的,也就是100Mbit/s,换算就是100/8=12.5MB/s网络时延
由传输时延、串行化时延、处理时延、队列时延构成。
端到端网络时延等于路径上所有延时之和
延迟越低,网络质量越好;单位为ms
传输时延
数据从发送方到达接收方所需要的时间
该时延与传输距离和介质有关,与带宽无关
串行化时延
发送节点开始发送报文的第一个bit到最后一个bit所需的时间
该时延与链路带宽和报文大小有关,但是报文大小一般是不可控的
所以一般通过提升带宽、设备来减少此时延
处理时延
设备把报文从入接口放到出接口所需要的时间
该时延与路由器的处理性能有关
队列时延
报文在队列中等待的时间
该时延与队列中报文的大小、报文的数量、带宽、队列机制有关
抖动
由于每个报文的端到端时延不一样,这样就会导致这些报文不能等间隔的到达目的端(抖动是最大时延和最小时延的时间差)
抖动越小,网络越稳定
这种现象就是抖动,时延的问题解决了,抖动的问题也就基本解决了
丢包率
丢包率是指网络传输过程中丢失报文占传输报文的百分比,一般用来衡量网络的可靠性
丢包越少,网络越稳定
丢包可能在所有环节发生:
- 处理过程 路由器在收到报文的时候可能由于CPU繁忙,无法处理报文导致丢包
- 排队过程 在把报文调度到队列的时候可能由于队列被装满而导致丢包
- 传输过程 报文在链路的传输过程中,可能由于某些原因导致的丢包
当今企业网络或数据中心网络都承载着多种业务类型的数据(如语音、视频以及存储数据等),要保证不同业务在资源有限的情况下依然可以保证各自的业务质量,就需要在网络中部署Qos来尽量保证每种业务的质量要求。(Qos不可能使得每种业务流量都得到优化,它是通过牺牲部分业务流量,优化部分业务流量—例如增大了视频的带宽,其它业务的带宽就会减少)
没有QoS定义的网络,各种业务流量公平争用有限的资源,先进先出,使用FIFO队列来实现,对不同业务流不能进行区分对待
缺点
无法保证各类业务的服务质量,需要通过增大网络带宽、升级网络设备等方式提升服务质量
缺省的Internet服务模型就是尽力而为转发模型
一种基于“流”的QoS解决方案,保证高优先级的流量带宽足够
使用RSVP(资源预留协议)为业务流申请预留带宽资源,保证业务流在进入网络的时候有足够的带宽资源
缺点
需要路径上的每一台设备都支持RSVP协议,如果有一台不支持,则无法实现端到端的服务质量
不过实现较复杂,当无流量发送时,仍独占带宽,带宽利用率低。
应用场景
目前使用RSVP的综合服务模型在语音或者视频场景下应用较多(只有对非常重要的业务做优化时会遇到—相关技术RSVP-TE)
一种基于“类”的QoS解决方案,对每个类单独定义策略,分配资源,需要在路径上的每个节点都手工配置,对人员能力要求较高
通过在网络边界上为各类报文打标记,根据标记在每一跳设备上将其映射成本地对其定义的服务等级,根据不同的服务等级值进入相应的缓存队列,根据队列间的调度机制实现不同的转发服务。
缺点
每台设备都需要针对某一种标记的报文设置统一的服务质量,这样才可以实现端到端的QoS
对工程师的能力要求较高
目前应用最广的就是此模型,以下介绍的也是此模型
基本概念
PHB描述了DS节点对具有相同DSCP的分组采用的外部可见的转发行为
在每一个DS节点上对分组的处理称为每跳行为PHB
PHB的定义
可以用优先级来定义PHB,也可以用一些可见的服务特征(分组延迟、抖动、丢包率)来定义
标准协议定义的四种标准的PHB
类选择码:CS(Class Selctor)
加速转发:EF(Expedited Forwarding)
确保转发:AF(Assured Forwarding’)
尽力而为:BE(Best-Effort) BE是缺省的PHB,每台路由器都支持
可以实现DiffSerc功能的网络节点称为DS节点
DS边界节点
负责连接另一个具有DS功能的域的节点 或 连接一个没有DS功能的域的节点
负责将进入此DS域的业务流进行分类和流量控制
DS内部节点
用于在同一个DS域中连接DS边界节点和其它内部节点
DS内部节点仅需基于DSCP进行简单的流分类以及对相应的流实施流量控制
注意:
一般在DS边界将进入此DS域内的复杂流转为简单流分类
使得DS内部节点仅需要配置简单流分类并对其实施流量控制
DS域
DS域由一组采用相同的服务提供策略和实现了相同PHB(Per Hop Behaviors 每跳行为)的相连DS节点组成(即DS域内的DS节点策略都是相同的)
一般一个DS域可以是一个ISP,也可以是一个企业的内部网络
DS区
一个或多个邻接的DS域统称为DS区
同一个DS区中的不同DS域可以有不同的PHB,以实现不同的服务提供策略,它们之间通过SLA和TCA协调提供跨域服务
SLA/TCA指明了如何在DS域边界节点调整从一个DS域转向另一个DS域的业务流
SLA指的是用户(个人、企业、有业务往来的相邻ISP等)和服务提供商签署的关于业务流在网络中传递时用户所应当获得的待遇(它描述了每个服务层次的详细性能参数,如平均速率、峰值速率、承诺突发尺寸、最大突发尺寸等),是DiffServ网络进行流控的主要依据。
流量分类是部署DiffServ QoS的基础,按照一定的规则进行分类,然后根据不同类别的流量提供不同的服务
流量分类在华为设备中又分为 简单流分类和复杂流分类
根据报文自身携带的标识QoS优先级的字段值来进行分类
802.1P
IEEE 802.1P是IEEE 802.1Q标准的扩展协议,两者共同运作,使得二层网络交换机能够提供流量优先级和动态过滤服务
802.1p优先级定义在二层802.1Q标签头中的TCI字段中,和Vlan ID一起使用
缺点
- 由于802.1Q和Label(EXP)在报文传输时不会一直携带,会出现字段丢失的情况,无法实现端到端QoS
- 802.1Q从Access发出时会移除Tag,Label可能会进行标签弹出
802.1Q Vlan Tag中的PRI字段(3bit 0~7)
0优先级最低,7优先级最高
MPLS Label中的EXP字段(3bit 0~7)
IP的报文标记不会丢失,可以实现真正的端到端转发
IPv4中的TOS字段(IP Precedence 只使用了3bit)
D:延迟(0为正常延迟、1为低延迟)
T:吞吐量(0为正常吞吐量,1为高吞吐量)
R:可靠性(0为正常可靠性,1为高可靠性)
IPv4中的TOS字段(DSCP 对IP-Precedence字段进行了扩充 使用了6bit)
由于IP-Precedence字段最多只能将IP报文分为8类,在实际网络中这些优先级是远远不够的,所以又定义了DSCP
DSCP字段的两种表达方式:
数字形式:0~63
PHB(Per-hop Behavior 每跳行为)表达形式:用标准协议定义的四种PHB来定义部分DSCP值(只对应了数字形式的21个)
优先级由高到低: CS > EF > AF > BE
DSCP优先级介绍:
CS(0~7)(CS对应DSCP高3位,后3位一直为0)
类别服务,用于和IP Precedence/802.1P/EXP实现映射的兼容性(即用于做优先级映射),代表的服务等级与现有网络中使用的IP Precedence相同
例子
- CS1 对应001,其DSCP数值为001 000,也就是8 ,对应的IP-Precedence、802.1q、EXP为001,也就是1
- CS7 对应111,其DSCP数值为111 000,也就是56,对应的IP-Precedence、802.1q、EXP为111,也就是7
常见用途
EF 对应的DSCP值为101 110,也就是46
快速转发服务 一般用于标识低时延、低丢包率的业务
对应的IP-Precedence、802.1q、EXP为101,也就是5
常见用途
常用于承载语音的流量(低时延、低抖动、低丢包率),是仅次于协议报文的最重要的报文
AFxy (其中x对应DSCP的高3位,y对应中间2位,最后一位一直为0)
确保转发服务,实现业务的带宽保证
适用于TCP类业务,或者对丢包不敏感的业务进行分类
不太适合实时流量(例如语音、视频等)
x、y代表的含义
X(1-4)代表优先级,值越大,优先级越高
Y(1-3)代表丢弃率 值越大代表丢弃率越高
例子
- AF11 对应001 01 ,DSCP数值为 001 010 ,也就是10,对应的IP-Precedence、802.1q、EXP为001,也就是1
- AF43 对应100 11,DSCP数值为 100 110 ,也就是38,对应的IP-Precedence、802.1q、EXP为100,也就是4
常见用途
BE 为CS0
尽力而为,默认优先级
在实际网络部署时,可能需要对报文进行更加精细的分类
例如:要求经理的报文优先转发、要求为FTP文件传输服务提供一定的优先级等场景
复杂流分类又分为链路层复杂流分类和IP层复杂流分类
链路层复杂流分类
- 可通过VLan内/外层Tag的802.1p
- 源目/MAC地址
IP层复杂流分类
- IP-Precedence
- 源/目IPv4地址
- TCP/UDP源端口号
- TCP/UDP目的端口号
- 协议号
报文分类的本身不确定设备对报文的优先级待遇,真正体现差分服务的技术是对不同分类的报文执行对应拥塞管理和拥塞避免技术,实现为不同类别的报文分配不同的服务等级
拥塞避免——当队列中的报文满后,丢弃加入队列中的报文
拥塞管理——对队列进行不同的调度
拥塞的根本原因就是带宽不够
进入设备的报文数量过多过快,而转发报文速度慢,在设备出口处“拥堵”(即接口的硬件转发队列存储空间满了),就认为出现了拥塞现象
硬件转发队列是长度有限的FIFO队列,当拥塞后,会通过调度机制将不同软件队列中的报文调度到硬件队列,通过牺牲低级别队列的数据来保证高级别业务数据。
拥塞产生的点:
- 流量汇聚的链路上
- 流量从高速链路往低速链路发哦是那个
拥塞管理具体是通过队列技术来实现的
- 将准备从一个接口发出的所有报文放入不同的缓存队列中
- 根据各队列间的调度机制调度队列来实现不同报文的区分转发
- 当网络间歇性的出现拥塞,且关键报文要求被更优先地转发时,此时就需要进行拥塞管理。通过采用队列技术以及不同的调度算法来发送队列中的报文流
如何将优先级和队列联系起来,此时就需要优先级映射表来实现
根据报文所携带优先级对应的LP值与硬件队列索引号进行关联,将不同的报文送入不同的队列(队列索引号越大,队列优先级越高)
华为大部分路由器默认8队列(0~7),一般6,7队列是留给路由协议的
LP:本地优先级,又称为内部优先级
实现了从数据原始携带的QoS优先级到内部优先级 或 从内部优先级到 QoS优先级的映射。从而使得设备根据内部优先级提供有差别的QoS服务质量
当数据报文进入设备时,将QoS优先级映射为内部优先级,将报文加入内部优先级对应的队列中;当报文离开设备时,报文将内部优先级映射为QoS优先级
根据队列调度算法,决定队列调度顺序
队列中的报文都是先进先出的,我们只能对队列整体的顺序做手脚
FIFO
先进先出技术,先进入接口的报文先出接口
缺点
无法有差别的对待优先级不同的报文
PQ
先分类,再转发
将报文加入到相关队列后,严格按照队列优先级的高低顺序进行调度,只有高优先级的报文全部调度完毕后,低优先级的才有调度机会
PQ的高优先级一般给对时延要求高,带宽要求低的数据
缺点
低优先级队列可能出现“饿死”现象(低优先级数据一直不被转发)
WRR加权轮询调度
避免了低优先级“饿死”现象的发生
WRR是通过为不同队列分配权重,根据权重比例来轮流调度。
此权重是以字节为单位的,例如若高优先级队列权重为3000字节,低一级的优先级队列为1000字节,则等高优先级的3000字节数据发完之后,再发送完低一级优先级队列的1000字节的数据
缺点
WRR的权重设置为多少不好定义,因为权重是按照字节来设置,调度是按照报文来调度,容易出现不平等调度
WFQ 加权公平队列
调度前先对队列的报文重新分类,然后将分类后的报文加入到队列,并给队列给予不同的权重,按照权重分配带宽
WFQ的目的
尽可能公平的分享网络资源,使得所有流的延迟和抖动达到最优
一般用在低速链路中使用,WFQ 在低速链路上相对公平的一个加权公平队列(照顾到了优先级较高的报文)
两种分类机制
基于流的分类机制:当报文的五元组+TOS相同的为同一个流,放入到同意队列
基于优先级分类:优先级相同的报文放入到同一个队列
缺点
低时延的业务得不到及时调度
PQ+WFQ
调度前先对队列的报文重新分类,将低时延报文加入同一队列,并使用PQ方法调度
其它报文加入到队列后根据WFQ调度方式进行调度
保证了低时延业务得到及时调度,而且实现了按照权重分配带宽
CBQ(与之前都有所不同)
与之前调度方法的不同之处
CBQ不用管出口有几个队列了,不再按系统硬件队列(0~7队列)进行安排
CBQ根据IP优先级、DSCP、输入接口、IP报文的五元组等规则(复杂流分类)对进入系统的报文进行分类,将其加入CBQ为其提供的4种类型队列中,进行调度转发
用户可以自己定义队列,CBQ为用户提供了3种类型队列
EF 加速转发队列 适用于低时延、低丢弃概率、占用带宽不是很大的业务
AF 确保转发队列 适用于需要带宽保证的关键数据业务
BE 尽力而为队列 适用于不需要严格QoS保证的尽力发送的业务
其中: EF>AF>BE
缺点
由于涉及到复杂的流分类,固启动CBQ会耗费一定的系统资源
CBQ 企业用的比较多 PQ+WFQ 运营商用的比较多
拥塞避免是通过监视网络资源(队列或缓冲区)的使用情况,当拥塞发生时,通过主动丢弃报文以缓解网络过载的一种流控机制(即当发现队列报文装满后,丢弃其余加入队列中的报文)
传统使用尾丢弃策略,即当某一队列被装满后,将后续发往该队列的报文全部丢弃,直至拥塞接触
当客户TCP报文被丢弃时,TCP连接重传(会降低TCP窗口大小和频率,进入慢启动状态)
当多个TCP主机在队列种因同时丢弃各自TCP连接的报文,造成多个TCP连接同时进入慢启动状态而导致流量降低。
之后又在某个时间同时出现流量高峰,如此反复,使得网络流量起伏波动
RED通过提前随机的丢弃一些低优先级的报文,使得TCP连接不同时降低发送速度,避免了TCP全局同步现象,使得TCP速率及网络流量都趋于稳定
具体实现方式
通过设置队列长度的阈值门限,不同阈值门限内的队列丢弃概率不同
队列长度小于低阈值门限,不丢弃报文
队列长度大于高阈值门限,丢弃所有收到的报文
队列长度在其之间,随机丢弃到来的报文(为队列种的每个报文都赋予一个随机数,当随机数大于丢弃概率时,报文被丢弃)-队列越长,报文被丢弃的概率越高
当队列中有TCP报文和UDP报文时,TCP由于丢包重传,速率降低,而UDP不受丢包机制影响,持续以恒定速率进入队列,占用过多的空间,导致TCP因无空间存储而导致“TCP饿死”
尾丢弃无法对流量进行区分,很可能导致大量的非关键数据被转发,而大量的关键数据被丢弃
基于RED技术,设备实现了WRED。
WRED通过对不同优先级的数据包或队列设置相应的丢弃策略,实现对不同的流量进行区分丢弃
具体实现方法
与RED相比,支持每一种优先级都可以独立设置报文丢包的上下门限及丢包率
对每一种优先级的处理方式都和RED类似,不过RED是针对整体的,WRED是针对单个优先级的
队列支持基于DSCP或IP优先级进行WRED丢弃
使用了令牌桶技术,通过CAR监督进入网络的流量速率,对超过限制的流量进行“惩罚”(可以实现对不同类别的报文分别进行限速),使得流量被限制在一个合理的范围之内,保护网络资源和企业网用户的利益
CAR
CAR工作在网络层,对网络层报文进行流量监管
CAR可以应用在入方向,也可以应用在出方向
流量监管工作原理
流量监管由三部分组成
Meter: 通过令牌桶机制对网络流量进行度量,向Master输出度量结果
Marker:根据Meter的度量结果对报文进行染色(绿色、黄色、红色三种颜色)
Action: 根据染色结果对报文执行动作(“惩罚动作”)
动作为Pass 表示对测量结果为“符合”的报文继续转发。
动作为remark + pass 表示修改报文内部优先级后再转发。
动作为discard 表示对测量结果为“不符合”的报文进行丢弃。
默认情况下,为green、yellow报文执行Pass动作,red报文执行Discard动作
优缺点
优:对不同报文限速以及重标记(降低优先级)
缺:较高的丢包率,带宽得不到充分利用
使用了令牌桶技术,将队列中超过流量限制的报文存放在缓存队列中
限制流出某一网络的某一连接的正常流量与突发流量的速率,使这类报文以比较均匀的速率向外发送(通过GTS来实现)
GTS
对输出的流量进行控制
只可以应用在出方向
工作原理
1、当队列配置了流量整形时,会按照用户设定的队列整形速率向令牌桶中放置令牌
2、当报文进入到配置了流量整形的队列中时,如果令牌桶中有足够的令牌来发送报文,则报文直接发送,并对令牌做相应的减少
3、如果令牌桶中没有足够的令牌,则将报文放入缓存队列中
4、如果缓存队列已满,则丢弃报文
5、当缓存队列有报文时,系统按照一定的周期从缓存队列中取出报文进行发送。
注意
缓存队列每次发送报文时都会与令牌桶中的令牌数作比较,直到令牌桶中的令牌数减少到缓存队列中的报文不能再发送(即当发送报文速率超过限制时)或缓存队列中的报文全部发送完为止
优缺点
优:较少的丢弃报文,充分利用带宽
缺:引入了额外的时延与抖动,需要较多的设备缓冲资源
先进行流量监管→ 进行拥塞避免 → 进行流量整形 → 进行拥塞管理并进行队列调度