QoS简介
服务质量QoS(Quality of Service)用于评估服务方满足客户服务需求的能力。通过配置QoS,对企业的网络流量进行调控,避免并管理网络拥塞,减少报文的丢失率,同时也可以为企业用户提供专用带宽或者为不同的业务(语音、视频、数据等)提供差分服务。
影响网络质量的因素:
网络带宽:
网络带宽是指在单位时间(一般指的是1秒钟)内能传输的数据量。
网络时延:
时延是指一个报文从一个网络的一端传送到另一端所需要的时间。
实时应用通信质量都比较关注时延大小,如语音、视频等。以语音传输为例,时延是指从说话者开始说话到对方听到所说内容的时间。若时延太大,会引起通话声音不清晰、不连贯或破碎。
单个网络设备的时延包括传输时延、串行化时延、处理时延、以及队列时延。
- 传输时延:一个数据位从发送方到达接收方所需要的时间。该时延取决于传输距离和传输介质,与带宽无关。
- 串行化时延:指发送节点在传输链路上开始发送报文的第一个比特至发完该报文的最后一个比特所需的时间。该时延取决于链路带宽以及报文大小。
- 处理时延:指路由器把报文从入接口放到出接口队列需要的时间。它的大小跟路由器的处理性能有关。
- 队列时延:指报文在队列中等待的时间。它的大小跟队列中报文的大小和数量、带宽以及队列机制有关。
抖动:
由于每个报文的端到端时延不一样,就会导致这些报文不能等间隔到达目的端,这种现象叫做抖动。一般来说,时延越小则时延抖动的范围越小。
某些业务类型(特别是语音和视频等实时业务)是极其不能容忍抖动的。报文到达时间的差异将在语音或视频中造成断续;另外,抖动也会影响一些网络协议的处理,有些协议是按固定的时间间隔发送交互性报文,抖动过大就会导致协议震荡,而实际上所有传输系统都有抖动,但只要抖动在规定容差之内就不会影响服务质量,另外,可利用缓存来克服过量的抖动,但这将会增加时延。
抖动的大小跟时延的大小直接相关,时延小则抖动的范围也小,时延大则可能抖动的范围也大。
丢包:
丢包率是指在网络传输过程中丢失报文占传输报文的百分比。丢包可用于衡量网络的可靠性。
丢包(packetloss)可能在所有环节中发生,例如:
- 处理过程:路由器在收到报文的时候可能由于CPU繁忙,无法处理报文而导致丢包;
- 排队过程:在把报文调度到队列的时候可能由于队列被装满而导致丢包;
- 传输过程:报文在链路上传输的过程中,可能由于种种原因(如链路故障等)导致的丢包。
少量的丢包对业务的影响并不大,例如,在语音传输中,丢失一个比特或一个报文的信息,通话双方往往注意不到;在视频广播期间,丢失一个比特或一个报文可能造成屏幕上瞬间的波形干扰,但视频很快就会恢复正常。即使使用传输控制协议(TCP)传送数据也能处理少量的丢包,但大量的丢包就会严重影响到传输效率。
QoS的功能:
分组分类器和标记器
网络边界上的路由器根据TCP/IP分组报头中的一个或多个字段,使用分类器功能来标记识别属于特定通信类的分组,然后用标记器功能标记已被分类的通信,这是通过设置IP优先字段或区分服务代码点(DSCP)字段来实现的。
通信速率管理
服务提供商使用控制(policing)功能度量进入网络的客户通信,并将其与客户的通信配置文件(profile)进行比较。同时,接入服务提供商网络的企业可能需要使用通信整形功能 来度量其所有的通信,并以恒定的速率将它们发送出去,以符合服务提供商的控制功能。令牌桶一种常用的通信度量方案。
资源分配
先进先出 (FIFO) 调度是一种被当前的 Internet 路由器和交换机所广泛采用的传统排队机制。虽然先进先出调度部署起来很简单,但是在提供 QoS 时有一些基本的问题。它没有提供优先级处理对延迟敏感的通信并将其移至队开头的手段,对所有的通信都完全同等地对待,不存在通信区分或服务区分的概念。
对于提供QoS的调度算法,至少要能区分队列中的不同分组,并知道每个分组的服务等级。调度算法决定接下来处理队列中的哪一个分组,而流分组获得服务的频度决定了为这个流分配的带宽或资源。
拥塞避免和分组丢弃策略
在传统的先进先出排队技术中,队列管理是这样实现的:当队列中的分组数量达到队列的最大长度后,将到达的分组全部丢弃。这种队列管理技术叫做尾部丢弃(tail drop), 它只在队列完全填满时发出拥塞信号。在这种情况下,没有使用积极的队列管理来避免拥塞,也没有减小队列尺寸来使排队延迟最小。积极的队列算法管理使得路由器在队列溢出前就可以检测到拥塞。
QoS信令协议
SVP 是在 Internet 上提供端到端 QoS 的 IETF Intserv 体系结构的一部分,它使得应用程序可以向网络提出每个流的服务质贯要求。服务参数用来量化这些要求,供管理控制使用。
交换
路由器的主要功能是根据转发表中的信息快速、高效地将所有输入通信交换到正确的输 出端口和下一中继段地址。传统的基于缓存的转发机制虽然高效,但是由于 它是由通信驱动 的,所以存在扩展性和性能方面的问题,并且在网络不稳定时会增加缓存维护工作,并降低 交换性能。
基于拓扑的转发方法通过建立一个与路由器路由表完全相同的转发表,解决了基于缓存的转发机制中存在的问题。
路由
传统的路由仅仅基于目的地,并且在最短路径上是根据路由表来路由分组的。对于某些网络情况,这显得不够灵活。策略路由是一种 QoS 功能,它使得用户可以不根据目的地进行路由,而是根据各种用户自己可以配置的分组参数进行路由。
当前的路由选择协议提供了最短路径路由,它基于量度值(如管理成本、权重或中继段数)来选择路由。分组是根据路由表被传输的,而对流的要求或路由上可用的资源一无所知。 QoS 路由则是一种考虑了流的 QoS 要求的路由选择机制,它在选择路由时,对网络上可用的资源有一定的了解。
QoS服务模型
尽力而为的服务模型(Best-Effort):
- Best-Effort是一个单一的服务模型,也是最简单的服务模型。应用程序可以在任何时候,发出任意数量的报文,而且不需要事先获得批准,也不需要通知网络。
- 应用Best-Effort服务模型的网络尽最大的可能性来发送报文,但对时延、可靠性等性能不提供任何保证,但它适用于绝大多数网络应用,如FTP、E-Mail等。
- Best-Effort服务是现在Internet的缺省服务模型,它是通过先入先出(FIFO)队列来实现的。
在尽力而为的服务模型下,可通过增大网络带宽和升级网络设备来提高端到端通信质量:
- 增大网络带宽:可以增大单位时间内传输的数据量,使其按照传统先进先出的方式在单位时间内传输更多的数据,改善网络拥塞问题。
- 升级网络设备:可以增大数据处理能力,使其按照传统先进先出的方式在单位时间内能够处理更多的数据,改善网络拥塞问题。
综合服务模型(Integrated Services):
RSVP协议工作过程:在应用程序发送报文前,需要向网络申请特定的带宽和所需的特定服务质量的请求,等收到确认信息后才发送报文。
综合服务模型(IntegratedServicesModel):
- IntServ是一种最为复杂的服务模型,它需要用到RSVP(ResourceReservation Protocol)协议。该服务模型在发送报文前,需要向网络申请特定的服务。这个请求是通过信令(signal)来完成的,应用程序首先通知网络它自己的流量参数和所需的特定服务质量的请求,包括带宽、时延等。应用程序一般在收到网络的确认信息后,即认为网络已经为这个应用程序的报文发送预留了资源,然后立即发送报文。
- IntServ模型要求端到端网络的所有节点都支持RSVP协议,且每个节点都需要周期性地同相邻节点交换状态信息,这样就会加大协议报文导致的开销。更关键的是,所有网络节点都需要为每个数据流保存状态信息,而当前在Internet骨干网上有着成千上万条数据流,因此IntServ模型在Internet骨干网上无法得到广泛应用。
区分服务模型(DiffServ):
DiffServ区分服务工作过程:首先将网络中的流量分成多个类,然后为每个类定义相应的处理行为,使其拥有不同的优先转发、丢包率、时延等。
Diffserv服务模型概述:
- 业务流分类和标记由边缘路由器来完成。边界路由器可以通过多种条件(比如报文的源地址和目的地址、ToS域中的优先级、协议类型等)灵活地对报文进行分类,然后对不同类型的报文设置不同的标记字段,而其他路由器只需要简单地识别报文中的这些标记,然后对其进行相应的资源分配和流量控制即可。因此,DiffServ是一种基于报文流的QoS模型。
- 它只包含有限数量的服务等级,少量的状态信息来提供有差别的流量控制和转发。
- 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模型充分考虑了IP网络本身所具有的灵活性、可扩展性强等特点,将复杂的服务质量保证通过报文自身携带的信息转换为单跳行为,从而大大减少了信令的工作。该模型是目前应用最广的服务模型。
三种服务模型的对比:
优点 | 缺点 | |
---|---|---|
尽力而为服务模型 | 实现机制简单 | 对不同业务流不能进行区分对待 |
综合服务模型 | 可提供端到端QoS服务,并保证带宽、延迟 | 需要跟踪和记录每个数据流的状态,实现较复杂,且扩展性较差,带宽利用率较低 |
区分服务模型 | 不需跟踪每个数据流状态,资源占用少,扩展性较强; 且能实现对不同业务流提供不同的服务质量 | 需要在端到端每个节点都进行手工部署,对人员能力要求较高 |
MQC简介
模块化QoS命令行MQC(Modular QoS Command-Line Interface)是指通过将具有某类共同特征的报文划分为一类,并为同一类报文提供相同的服务,也可以对不同类的报文提供不同的服务。
随着网络中QoS业务的不断丰富,在网络规划时若要实现对不同流量(如不同业务或不同用户)的差分服务,会使部署比较复杂。MQC的出现,使用户能对网络中的流量进行精细化处理,用户可以更加便捷的针对自己的需求对网络中的流量提供不同的服务,完善了网络的服务能力。
MQC三要素:
MQC包含三个要素:流分类(traffic classifier)、流行为(traffic behavior)和流策略(traffic policy)。
流分类
流分类用来定义一组流量匹配规则,以对报文进行分类。
流分类中各规则之间的关系分为:and或or,缺省情况下的关系为or
流行为
流行为用来定义针对某类报文所做的动作。
流策略
流策略用来将指定的流分类和流行为绑定,对分类后的报文执行对应流行为中定义的动作。
一个流策略可以绑定多个流分类和流行为。
MQC配置流程:
- 配置流分类:按照一定规则对报文进行分类,是提供差分服务的基础。
- 配置流行为:为符合流分类规则的报文指定流量控制或资源分配动作。
- 配置流策略:将指定的流分类和指定的流行为绑定,形成完整的策略。
- 应用流策略:将流策略应用到接口或子接口。
MQC配置命令行:
1 | classifier behavior |
优先级映射概述
优先级映射用来实现报文携带的QoS优先级与设备内部优先级(又称为本地优先级,是设备内部区分报文服务等级的优先级)之间的转换,从而设备根据内部优先级提供有差别的QoS服务质量。
用户可以根据网络规划在不同网络中使用不同的QoS优先级字段,例如在VLAN网络中使用802.1p,IP网络中使用DSCP,MPLS网络中使用EXP。当报文经过不同网络时,为了保持报文的优先级,需要在连接不同网络的设备上配置这些优先级字段的映射关系。当设备连接不同网络时,所有进入设备的报文,其外部优先级字段(包括802.1p、DSCP和MPLS EXP)都被映射为内部优先级;设备发出报文时,将内部优先级映射为某种外部优先级字段。
原理描述:
不同的报文使用不同的QoS优先级,例如VLAN报文使用802.1p,IP报文使用DSCP,MPLS报文使用EXP。当报文经过不同网络时,为了保持报文的优先级,需要在连接不同网络的网关处配置这些优先级字段的映射关系。
优先级映射实现从QoS优先级到内部优先级(或者本地优先级)或从内部优先级到QoS优先级的映射,并利用DiffServ域来管理和记录QoS优先级和服务等级之间的映射关系。对于进入设备的报文,设备将报文携带的优先级或者端口优先级映射为内部优先级,然后根据内部优先级与队列之间的映射关系确定报文进入的队列,从而针对队列进行流量整形、拥塞避免、队列调度等处理,并可以根据配置修改报文发送出去时所携带的优先级,以便其他设备根据报文的优先级提供相应的QoS服务。
QoS优先级字段:
为了在Internet上针对不同的业务提供有差别的QoS服务质量,人们根据报文头中的某些字段记录QoS信息,从而让网络中的各设备根据此信息提供有差别的服务质量。这些和QoS相关的报文字段包括:
Precedence字段
根据RFC791定义,IP报文头ToS(Type of Service)域由8个比特组成,其中3个比特的Precedence字段标识了IP报文的优先级,Precedence在报文中的位置如下图所示:
比特0~2表示Precedence字段,代表报文传输的8个优先级,按照优先级从高到低顺序取值为7、6、5、4、3、2、1和0。最高优先级是7或6,经常是为路由选择或更新网络控制通信保留的,用户级应用仅能使用0~5。
除了Predecence字段外,ToS域中还包括D、T、R三个比特:
- D比特表示延迟要求(Delay,0代表正常延迟,1代表低延迟)。
- T比特表示吞吐量(Throughput,0代表正常吞吐量,1代表高吞吐量)。
- R比特表示可靠性(Reliability,0代表正常可靠性,1代表高可靠性)。
DSCP字段
RFC1349重新定义了IP报文中的ToS域,增加了C比特,表示传输开销(Monetary Cost)。之后,IETF DiffServ工作组在RFC2474中将IPv4报文头ToS域中的比特0~5重新定义为DSCP,并将ToS域改名为DS(Differentiated Service)字节。
DS字段的前6位(0位~5位)用作区分服务代码点DSCP(DS Code Point),后2位(6位、7位)是保留位。DS字段的前3位(0位~2位)是类选择代码点CSCP(Class Selector Code Point),相同的CSCP值代表一类DSCP。DS节点根据DSCP的值选择相应的PHB(Per-Hop Behavior)。
lDSCP值有两种表达方式:(PHB)
- 数字形式:DSCP取值范围为0~63;
- 关键字表达方式:用关键字标识的DSCP值。
AFxy中,x代表不同的类别,根据不同的分类后续可以定义进入相对应的队列,y代表当队列被装满的时候丢包的概率,例如AF1类中的报文,其中丢包概率由小到大排序为AF11<AF12<AF13。
不同关键字常用于标识不同报文(可自行定义):
- CS6和CS7默认用于协议报文,而且是大多数厂商设备的硬件队列里最高优先级的报文,因为如果这些报文无法接收的话会引起协议中断。
- EF常用于承载语音的流量,因为语音要求低延迟,低抖动,低丢包率,是仅次于协议报文的最重要的报文。
- AF4用来承载语音的信令流量.
- AF3可以用来承载IPTV的直播流量,直播的实时性很强,需要连续性和大吞吐量的保证。
- AF2可以用来承载VOD(Videoon Demand:视频点播)的流量,相对于直播流量来说,VOD对实时性要求没那么强烈,允许有时延或者缓冲。
- AF1可以用来承载普通上网业务。
VLAN帧头中的802.1p优先级:
通常二层设备之间交互VLAN帧。根据IEEE 802.1Q定义,VLAN帧头中的PRI字段(即802.1p优先级),或称CoS(Class of Service)字段,标识了服务质量需求。
VLAN帧中的PRI字段位置如下图所示:
- 在802.1Q头部中包含3比特长的PRI字段。PRI字段定义了8种业务优先级CoS,按照优先级从高到低顺序取值为7、6、5、4、3、2、1和0。
MPLS EXP字段:
MPLS报文与普通的IP报文相比增加了标签信息。标签的长度为4个字节,封装结果如下图所示:
标签共有4个域:
- Label:20比特,标签值字段,用于转发的指针。
- EXP:3比特,保留字段,用于扩展,现在通常用做CoS。
- S:1比特,栈底标识。MPLS支持标签的分层结构,即多重标签,S值为1时表明为最底层标签。
- TTL:8比特,和IP分组中的TTL(Time To Live)意义相同。
对于MPLS报文,通常将标签信息中的EXP域作为MPLS报文的CoS域,与IP网络的ToS域等效,用来区分数据流量的服务等级,以支持MPLS网络的DiffServ。EXP字段表示8个传输优先级,按照优先级从高到低顺序取值为7、6、5、4、3、2、1和0。
- 在IP网络,由IP报文的IP优先级或DSCP标识服务等级。但是对于MPLS网络,由于报文的IP头对LSR(Label Switching Router)设备是不可见的,所以需要在MPLS网络的边缘对MPLS报文的EXP域进行标记。
- 缺省的情况下,在MPLS网络的边缘,将IP报文的IP优先级直接拷贝到MPLS报文的EXP域;但是在某些情况下,如ISP不信任用户网络、或者ISP定义的差别服务类别不同于用户网络,则可以根据一定的分类策略,依据内部的服务等级重新设置MPLS报文的EXP域,而在MPLS网络转发的过程中保持IP报文的ToS域不变。
- 在MPLS网络的中间节点,根据MPLS报文的EXP域对报文进行分类,并实现拥塞管理,流量监管或者流量整形等PHB行为。
DSCP/ IP-Precedence/ 802.1p/ EXP值表:
配置优先级映射:
信任报文的802.1p优先级
- 对于带VLAN Tag的报文,设备根据报文携带的802.1p优先级查找优先级映射表,确定报文进入的队列,并可以修改报文的优先级值。
- 对于不带VLAN Tag的报文,设备将使用端口优先级作为802.1p优先级,查找优先级映射表,确定报文进入的队列,并可以修改报文的优先级值。
信任报文的DSCP优先级
设备按照报文携带的DSCP优先级查找DSCP优先级映射表,确定报文进入的队列,并可以修改报文的优先级值。
信任报文的MPLS EXP优先级
设备按照报文携带的MPLS EXP优先级查找MPLS EXP优先级映射表,确定报文进入的队列,并可以修改报文的优先级值。
1 | input 0 to 15 output 0 |
简单流分类:
- 简单流分类是指根据IP报文的IP优先级或DSCP值、MPLS报文的EXP域值、VLAN报文的802.1p值,将报文划分为多个优先级或多个服务等级。配置基于简单流分类的流量策略可以将一种网络流量中的优先级映射到另外一种网络流量中,使流量在另外一种网络中按照原来的优先级传送。
- 简单流分类的应用场景:在IP,MPLS,VLAN报文跨域转换时,可以使用简单流分类实现DSCP/IP-PRE/EXP/802.1P之间的映射,并保证报文的服务等级不受变化。
- 简单流分类通常配置在网络的核心位置。
- 简单流分类不止应用在物理端口,还可以用于逻辑端口。在企业组网中逻辑端口有更加广阔的应用。
复杂流分类:
复杂流分类是指根据五元组(源地址、源端口号、协议号码、目的地址、目的端口号)等报文信息对报文进行分类(一般的分类依据都局限在封装报文的头部信息,使用报文内容作为分类的标准比较少见),缺省应用于网络的边缘位置。报文进入边缘节点时,网络管理者可以灵活配置分类规则。分类的结果是没有范围限制的,它可以是一个由五元组(源地址、源端口号、协议号码、目的地址、目的端口号)确定的狭小范围,也可以是匹配某网段的所有报文。
复杂流分类通过提取报文信息,如报文优先级、源IP、目的IP、源MAC、目的MAC、802.1p、报文封装类型等等,组成关键字去匹配规则表,然后通过匹配规则得到一个索引,再根据索引查动作表,将报文映射为内部优先级,除了映射内部优先级外,复杂流分类还可以支持流量监管(CAR)、PBR( Policy-basedRouting )、重标记,报文过滤、采样、镜像等其它动作。
链路效率机制
VRP提供了两种链路效率机制:IP报文头压缩协议(IPHeader Compression,IPHC)和链路分片与交叉(LinkFragmentation and Interleaving,LFI)。 其中IP报文头压缩协议可以对RTP和TCP报文头进行压缩。
对于同一个流的数据部,IP头部的大部分字段是相同的,因此可以对这些字段进行压缩,提高链路传输的效率。
LFI技术主要在低速链路上使用,目的是减小实时数据报文的延时和抖动。
##IPHC:
IP报文头压缩协议(IPHeader Compression,IPHC)是一个主机-主机协议,用于在IP网络上承载语音、视频等实时多媒体业务,是在PPP链路和FR链路应用的低速链路技术。IPHC支持对RTP和TCP报文头的压缩。
RTP包括数据部分和头部分,RTP的数据部分相对较小,而RTP的头部分较大。12字节的RTP头,加上20字节的IP头和8字节的UDP头,就是40字节的IP/UDP/RTP头。而RTP典型的负载是20字节到160字节。为了避免不必要的带宽消耗,可以使用IPHC特性对报文头进行压缩。IPHC将IP/UDP/RTP头从40字节压缩到2~4字节,对于40字节的负载,头压缩到4字节,压缩比为(40+40)/(40+4),约为1.82,可见效果是相当可观的。
对于TCP数据包,IP头加上TCP头一共40字节,使用TCP压缩,可以压缩到3~5字节。
LFI:
链路分片与交叉是在PPP链路和FR链路应用的低速链路技术。
在低速串行链路上,实时交互式通信,如Telnet和VoIP,往往会由于大型分组的发送而导致阻塞延迟,例如,正好在大报文被调度而等待发送时,语音报文到达,它需要等该大报文被传输完毕后才能被调度。对于诸如交互式语音等实时应用而言,大报文导致的这种阻塞延迟太长了,对端将听到断断续续的话音。交互式语音要求端到端的延迟不大于100~150ms。
一个1500bytes(即通常MTU的大小)的报文需要花费215ms穿过56Kbps的链路,这超过了人所能忍受的延迟限制。为了在相对低速的链路上限制实时报文的延迟时间,例如56KbpsFrame Relay或64KbpsISDN B通道,需要一种方法将大报文进行分片,将小报文和大报文的分片一起加入到队列。
LFI将大型数据帧分割成小型帧,与其他小片的报文一起发送,从而减少在速度较慢的链路上的延迟和抖动。
参考资料:华为HedEx文档