1 前言
随着因特网的普及,网络和人们生活的关系愈加密切,多样化的业务(数据、语音、视频等)应运而生。通常,这些业务对于通信条件的要求各不相同:数据业务对传递的可靠性要求非常高,误码率是最重要的指标,但可以容忍一定的时延;而语音和视频这类业务具有流量大、延续性、实时性和相关性等特点,时延会造成语音的变声、变调和视频的马赛克等现象,因此对传输时延和抖动要求非常严格,等等。
我们传统IP网络只能提供“尽力而为”服务,所有业务流公平的竞争网络资源,很难保证每类业务的通信要求,这也是引发研究QoS的本质原因。
2 QoS业务分类和业务模型
一般而言,描述网络性能的关键参数有三个:时延、抖动、丢包率。这三个参数也是划分QoS类别的主要区分值。目前国际上从事IP网络QoS标准研究的主要组织有:ITU-T、IETF、ETSI等。他们对QoS有各自的一套分类标准和建议,这里就不作为重点介绍了。
IP QoS在实现的时候,主要分为三种结构模型:尽力而为服务/Best-Effort Service、综合服务/IntServ、区分服务/DiffServ。
2.1 Best-Effort
Best-Effort Service是一种单一服务模型,也是最简单的服务模型,应用程序可以在任何时候发出任意数量的报文,不需要事先获得批准也不需要通知网络,网络尽最大的可能性来发送报文,但对时延可靠性等性能不提供任何保证,Best-Effort服务是现在Internet的缺省服务模型,通过先入先出/FIFO队列来实现。
2.2 IntServ
Intserv是一个综合服务模型,它可以满足多种QoS需求。这种服务模型在发送报文前,需要向网络申请特定的服务。这个请求是通过信令/signal来完成的,应用程序首先通知网络它自己的流量参数和需要的特定服务质量请求,包括带宽、时延等,应用程序一般在收到网络的确认信息,即网络已经为这个应用程序的报文预留了资源后,发送报文。
网络在收到应用程序的资源请求后,执行资源分配检查(Admission control),即基于应用程序的资源申请和网络现有的资源情况,判断是否为应用程序分配资源。一旦网络确认为应用程序的报文分配了资源,则只要应用程序的报文控制在流量参数描述的范围内,网络将承诺满足应用程序的QoS需求。而网络将为每个流/flow,由两端的IP地址、端口号、协议号确定)维护一个状态,并基于这个状态执行报文的分类、流量监管/policing、排队及其调度,来满足对应用程序的承诺,具有面向连接的特性。因此对网络设备的处理能力有较高要求。传送QoS请求的信令是RSVP(Resource Reservation Protocol),它通知路由器应用程序的QoS需求。
2.3 DiffServ
Diffserv即区别服务模型,它可以满足不同的QoS需求。与Integrated service不同,它不需要信令,即应用程序在发出报文前,不需要通知路由器。网络不需要为每个流维护状态,它根据每个报文指定的QoS,来提供特定的服务。可以用不同的方法来指定报文的QoS,如IP包的优先级/Precedence、报文的源地址和目的地址等。网络通过这些信息来进行报文的分类、流量×××、流量监管和排队。
这三种模型中,只有Intserv与Diffserv能提供多服务的IP QoS保障。其中,Intserv具有面向连接的特点,这与IP本身无连接特性是不符合的,容易导致网络的复杂化;在实现的时候,Intserv需要网络对每个流均维护一个状态,因此对设备性能提出更高的要求,另外,还需要全网设备都能提供一致的技术才能实现完整的QoS。而Diffserv则没有这方面的缺陷,且处理效率高,部署及实施可以分布进行。
因此,在实际应用的时候,往往采用Diffserv体系结构。
下面我们主要讲的也就是Diffserv模型的IP QoS:
3 QoS特性
3.1 流的分类与标记
流量分类是将数据报文划分为多个优先级或类。如使用IP报头的ToS(Type of service)字段的前3位,即IP优先级来标记报文,可以将报文最多分成8类;也可以使用DSCP(Differentiated Services Codepoint)ToS域的前6位,则最多可分成64类。
在报文分类后,就可以对不同的分类应用不同的QoS特性,实现基于类的拥塞管理、流量×××等。
网络管理者可以设置报文分类的策略,这个策略除可以包括IP报文的IP优先级或DSCP值、802.1p的CoS值等带内信令,还可以包括输入接口、源地址、目的地址、MAC地址、IP协议或应用程序的端口号等。
3.2 拥塞管理
在数据通信中,通信信道是被多种应用共享的,而且广域网的带宽通常要比局域网的带宽小,当一个局域网的计算机向另一个局域网的计算机发送数据时,由于广域网的带宽较小,局域网的数据将不可能按原有的发送速度在广域网上传输。此时 在局域网和广域网之间的路由器上就会发生了拥塞。
当拥塞发生时,如何进行管理和控制呢?方法是使用队列技术,使得报文在路由器中按一定的策略暂时缓存到队列中,然后再按一定的调度策略把报文从队列中取出,在接口上发送出去。
不同的队列算法用来解决不同的问题,并产生不同的效果。常用的队列有FIFO、PQ、CQ、WFQ、CBWFQ、RTP优先队列等。
3.2.1 FIFO
   FIFO——First-InFirst-Out/先进先出队列,它不对报文进行分类,当报文进入接口的速度大于接口能发送的速度时,FIFO按报文到达接口的先后顺序让报文进入队列,同时,在队列的出口让报文按进队的顺序出队。这是一种尽力而为的服务。
2006112632554307.gif
3.2.2 PQ
PQ――Priority Queuing/优先队列,将所有报文依据预先配置分成最多4类,按照FIFO的策略分别进入4个优先级不同的队列。在报文出队的时候,高优先级的队列相对于低优先级的队列具有绝对的优先权,只有高优先级队列报文发送完毕,较低优先级才得到发送,而且较低优先级的报文会在发生拥塞时被较高优先级的报文抢断。因此采用这种队列机制可以保证在网络发生拥塞的情况下,重要业务(设定成高优先级)的数据传输得到绝对的优先传送。但在较高优先级的报文的速度总是大于接口的速度时,会使较低优先级的报文始终得不到发送的机会。
2006112632627704.gif
PQ是一种没有量化的QoS/DiffServ服务,只规定了预先规定的高优先权报文,有优先转发的权利。
3.2.3 CQ
CQ――Custom Queueing/定制队列,根据设置将所有报文分成最多至16类,然后按照FIFO的策略分别进入1个系统队列和16个CQ队列;此外还有一个0号的系统队列。在出队调度上,系统队列具有绝对的优先权,系统总是先处理完该队列后再用处理用户队列;16个用户队列占用出口带宽的比例可以设置,CQ按定义的比例使各队列之间在占用的接口带宽上满足管理员预先配置的比例关系。当拥塞发生时,CQ能保证不同业务根据比例获得相应的带宽占用,从而既保证关键业务能获得较多的带宽,又不至于使非关键业务得不到带宽,避免PQ的一些缺点。
2006112632651920.gif
CQ是为了避免PQ在拥塞时,所有较低优先级的数据都无法发送问题而产生的,这里我们实验的重点也是观察在拥塞发生时,多个队列是如何分享带宽资源的。
3.2.4 WFQ
WFQ――Weighted Fair Queuing/加权公平队列,对进入路由器端口的报文按流进行分类(相同源IP地址,目的IP地址,源端口号,目的端口号,协议号,TOS值相同的报文属于同一个流),每一个流被分配到一个队列。在出队调度的时候,WFQ根据报文的流的优先级(precedence)来分配每个流应占有出口的带宽。优先级的数值越小,所得的带宽越少。优先级的数值越大,所得的带宽越多。在拥塞发生时,它能保证任何流量的流(业务),都能公平地得到一定的带宽占用,减少这个网络的时延,并当流(业务个数)的数目减少时,能自动增加现存流可占的带宽。也就是说剩余活动状态的流会根据各自的优先权比例瓜分空闲出来的带宽资源。
2006112632733200.gif
 路由器的串口中同时存在8个流Sn(n=1~8),它们(流)的优先权Pn(n=1~8)分别为0、1、2、3、4、5、6、7,那么第n个流所占总带宽的比重为:(Pn+1)/∑(Pn+1),如第二个流的所占总带宽的比重为:(1+1)/(1+2+3+ 4+5+6+7+8)=2/36=5.56%。
一个流中,所有ip报文的TOS是相同的,所以某个流的优先权就是流中数据包的TOS值——一般情况下,绝大多数ip包的默认值为0,如下,ToS值为000:
2006112632750802.gif
 
3.2.5 CBWFQ
CBWFQ――Class Based Weighted Fair Queuing/基于类的加权公平队列。对于ip报文,CBWFQ通常根据DSCP、输入端口、ip报文的五要素来对报文进行分类;不同类别的报文分别进入不同的BQ(bandwidth queueing)队列中,如果不能匹配,则进入系统定义的缺省队列;除此以外,还有一个LLQ(low latency queueing),它是一个具有较高优先权的队列,优先权仅次于二层协议队列和RTP优先队列,如图:
200611263288916.gif
在调度出队的时候,如果LLQ中有报文,则总是优先发送LLQ的内容,直到LLQ为空或者超过为LLQ预留的最大带宽时,才发送其他队列中的报文——这一点和CQ的系统队列、PQ的High队列比较类似。
进入LLQ的报文,在接口没有发生拥塞的时候(所有队列中都没有报文),所有属于LLQ的报文都可以被发送;而发生拥塞的时候(队列中有报文时),进入LLQ的报文被限速,超出规定流量/带宽的报文将被丢弃。这样,在接口不发生拥塞的情况下,可以使属于LLQ的报文能获得空闲的带宽,在接口拥塞的情况下,又可以保证属于LLQ的报文不会占用超出规定的带宽,保护了其他报文的应得带宽。另外,只要LLQ中有报文,系统就会发送LLQ中的报文,所以LLQ中的报文被发送的延迟最多是接口发送一个最大长度报文的时间,无论是时延还是时延抖动,LLQ都可以将之降低为最低限度。这为对时延敏感的应用如VoIP业务提供了良好的QoS保证。
BQ队列在调度出队的时候,按用户设定的带宽值将报文出队发送,可以实现各个类的队列的公平调度。当接口中某些类别的报文没有时,BQ队列的报文还可以公平地“分享”空闲的带宽,大大提高了线路的利用率,当然,在拥塞的时候还能保证各类报文得到用户设定的最小带宽。
当不能匹配用户设定的所有类别时,报文会进入系统定义的缺省类,虽然允许为缺省类配置带宽,使其作为BQ类进行基于类的队列调度,但是更多的情况是为缺省类配置WFQ,使所有进入缺省类的报文进行基于流的队列调度。
3.2.6 RTP
RTP――Real Time Protocol,这是一种用于解决实时业务(语音、视频等)QoS的简单的队列技术,其原理就是将承载语音或视频的RTP报文送入高优先级队列,使其得到优先发送,保证最小的时延和抖动。
2006112632826628.gif
  如图,RTP优先队列可以同其他队列结合使用,它的优先级是最高的,不过由于CBWFQ中的LLQ完全可以解决实时业务的QoS问题,所以不推荐RTP与CBWFQ同时使用。
RTP对进入队列的报文进行了限速,超出规定流量的报文将被丢弃,这样在接口拥塞的情况下,也可以保证属于RTP优先队列的报文不会占用超出规定的带宽,保护了其他报文的应得带宽;避免了PQ中高优先级队列的问题。
3.2.7 综合比较
Queue数 优点 缺点FIFO 1 缺省的队列机制,队列长度配置简单,易于使用;处理简单,物理延迟较小; 所有报文同等对待,报文到来的次序决定了可占用的带宽、延迟和丢包情况; 无法对某类报文进行带宽保证,没有约束力;时间敏感的实时应用(如VoIP)的延迟得不到保证; PQ 4 对不同业务数据提供绝对的优先服务,对实时性的应用(如VoIP)的延迟可以得到保证;对优先业务的报文的带宽占用可以绝对优先; 根据需要配置,处理速度较慢;如果不对高优先级的报文加以带宽限制,会造成低优先级的报文得不到带宽;CQ 16+1 对不同业务的报文按带宽比例分配带宽;预定义的某类报文没有传输时,可自动调配给其他报文可占; 根据需要配置,处理速度较慢; 不适于解决对时延敏感的实时业务;WFQ 自定义 配置简单,报文分类自动完成;可以保护某类数据(流)发送的带宽;可以使延迟的抖动减小;可以为不同优先级的流分配不同的带宽;当流的数目减少时,空余的带宽可自动调配给其他流占用; 处理速度较快(比FIFO慢,但比PQ、CQ要快);不适于解决对时延敏感的实时业务。CBWFQ 0~63 可以按多种方式对数据进行划分,并分别提供不同的服务;可以为进入BQ队列的业务提供严格精确的带宽保证,并且保证各queue之间的比例关系;可以为进入LLQ的业务提供绝对优先的队列调度,确保实时数据的时延,同时对高优先级数据流量限制了带宽上限,克服了PQ的弊病;对于一般的缺省类数据,提供基于WFQ的调度服务; 当配置的类较多时,系统开销会比较大。 RTP - - -
3.3 拥塞避免
由于路由器、交换机等网络设备的内存资源总是有限,按照传统的处理方法,当队列的长度达到规定的最大值时,后续到来的报文都将被丢弃,对于TCP报文,如果大量的报文被丢弃,会造成TCP超时,从而引发TCP的慢启动和拥塞避免/ 流控机制,使TCP减少报文的发送;当队列同时丢弃多个TCP连接的报文时,将造成多个TCP连接同时进入慢启动和拥塞避免,称之为“TCP全局同步”,这样多个TCP连接发向队列的报文将同时减少,使得发向队列的报文的量不及线路发送的速度,从而减少了线路带宽的利用 。并且,发向队列的报文的流量总是忽大忽小,使线路的上的流量总在极少和饱满之间波动。
为了避免这种情况的发生,队列可以采用WRED/Weighted Random Early Detection加权随机早期检测的报文丢弃策略。 WRED引入IP优先权 DSCP值和MPLS EXP来区别丢弃策略,采用WRED时,用户可以设定队列的threshold/阈值,当队列的长度小于低阈值时,不丢弃报文,当队列的长度在低阈值和高阈值之间时,WRED开始随机丢弃报文,队列的长度越长,丢弃的概率越高;当队列的长度大于高阈值时;丢弃所有的报文。
由于WRED随机地丢弃报文,将避免使多个TCP连接同时降低发送速度,从而避免了TCP的“全局同步”现象,即便当某个TCP连接的报文被丢弃,开始减速发送的时候,其他的TCP连接仍然有较高的发送速度。这样,无论什么时候,总有TCP连接在进行较快的发送,提高了线路带宽的利用率。
但是,如果直接采用队列的长度与用户设定的阈值比较并进行丢弃,将会对突发性的数据流造成不公正的待遇,不利于数据流的传输;所以,在与设定的阈值比较并进行丢弃时,采用队列的平均长度,它既反映了队列的变化趋势,又对队列长度的突发变化不敏感,避免了对突发性的数据流造成不公正的待遇。
WRED可以感知QoS的带内信令,包括IP优先级DSCP 和MPLS EXP,可以为不同IP优先级DSCP或MPLS EXP的报文设定不同的队列长度滤波系数、队列阈值、丢弃概率等,从而对不同优先级的报文提供不同的丢弃特性。
WRED和队列机制的关系如下图所示:
 
3.4 流量监管与×××
流量监管(Traffic Policing)的典型作用是限制进入某一网络的某一连接的流量与突发情况。在报文满足一定的条件时,如某个连接的报文流量过大,流量监管就可以对该报文采取不同的处理动作,例如丢弃报文、或重新设置报文的优先级等,通常的用法是使,CAR来限制某类报文的流量。
流量×××(Traffic Shaping)的典型作用是限制流出某一网络的某一连接的流量与突发情况,使这类报文以比较均匀的速度向外发送。流量×××通常使用缓冲区和令牌桶来完成,当报文的发送速度过快时,首先在缓冲区进行缓存,在令牌桶的控制下,再均匀地发送这些被缓冲的报文。
2006112632928625.gif
3.4.1 CAR
CAR――Committed Access Rate/约定访问速率。网络管理者可以使用CAR来对流量进行控制。CAR是利用TB/Token Bucket令牌桶来进行流量控制。
2006112633012342.gif
图为CAR利用令牌桶原理进行流量控制的过程:首先,根据预先设置的匹配规则来对报文进行分类,如果是没有规定流量特性的报文,就直接继续发送,并不需要经过令牌桶的处理,如果是需要进行流量控制的报文,则会进入令牌桶中进行处理,如果令牌桶中有足够的令牌可以用来发送报文,则允许报文通过 报文可以被继续发送下去,如果令牌桶中的令牌不足,则报文被丢弃。
令牌是按照一个用户设定的标准的速率往桶中不断存放的。这样,就可以对某类报文的流量进行控制。
当然令牌桶的容量也是由用户设置的,超出桶的容量的时候,令牌的量不再增加。 最终可以通过设置往令牌桶中存放Token的速率来控制路由器发送某类报文的速率。
3.4.2 GTS
GTS――Generic Traffic Shaping/通用流量×××,可以对不规则或不符合预定流量特性的流量进行×××,以利于网络上下游之间的带宽匹配。
与CAR一样,GTS也采用了令牌桶技术来控制流量,它们的主要区别在于,利用CAR进行报文流量控制时,对不符合流量特性的报文进行丢弃,而GTS对于不符合流量特性的报文则是进行缓冲,减少了报文的丢弃,同时满足报文的流量特性。
2006112633058762.gif
GTS可以对接口上指定的报文流或所有报文进行×××,当报文到来的时候,首先对报文进行分类,如果报文不需要进行处理,就继续发送;不需要经过令牌桶的处理,如果报文需要进行GTS处理,则与令牌桶中的令牌进行比较,令牌桶按用户设定的速度向桶中放置令牌,如果令牌桶中有足够的令牌可以用来发送报文,则报文直接被继续发送下去;同时,令牌桶中的令牌量按报文的长度做相应的减少。
当令牌桶中的令牌少到报文不能再发送时,报文将被缓存入GTS队列中,当GTS队列中有报文的时候,GTS按一定的周期从队列中取出报文进行发送,每次发送都会与令牌桶中的令牌数作比较,直到令牌桶中的令牌数减少到队列中的报文不能再发送、或是队列中的报文全部发送完毕为止――这样就能减少报文的丢失。
3.5 物理接口的速率限制
LR――Line Rate/物理接口总速率。在一个物理接口上,可以通过LR限制接口发送所有报文的总速率。
LR的处理过程仍然是采用令牌桶进行流量控制,如果用户在路由器的某个接口上配置了LR,规定了流量特性,则所有经由该接口发送的报文首先要经过LR的令牌桶进行处理,只有当令牌桶中有足够的令牌时才能发送报文,否则就强制进入QOS队列进行拥塞管理,这样,就可以对通过该物理接口的报文流量进行控制。
2006112633137450.gif
相较于CAR,LR能够限制在物理接口上,对通过的所有报文生效,而CAR则是在IP层实现的,对于不经过IP层处理的报文不起作用;而较之于GTS,LR不但能够对超过流量限制的报文进行缓存,并且能利用QoS丰富的队列来缓存报文,而GTS则是将报文缓存在GTS队列中。同样,GTS也是是在IP层实现的,所以对不经过IP层处理的报文不起作用。
3.6 链路效率机制
链路效率机制,用于改善链路的性能,间接提高网络的QoS 。如降低链路发包的时延、调整有效带宽等。目前主要有LFI和IPHC两种链路效率机制。
3.6.1 LFI
LFI――Link Fragment & Interleave/链路分片与交叉。对于低速链路,即使为语音等实时业务报文配置了高优先级队列,如RTP或LLQ,也不能够保证其时延与抖动,原因在于接口在发送其他数据报文的瞬间,语音业务报文还是只能等待。而且低速接口发送较大的数据报文要花费相当的时间,如果采用LFI数据报文,非RTP、LLQ报文在发送前被分片,逐一发送。而此时如果有语音报文到达,则被优先发送,从而保证了语音等实时业务的时延与抖动。
当然,LFI主要用于低速链路。
2006112633219732.gif
如图,启用LFI后,在大报文出队的时候,可以将其分为定制长度的小片报文, 这就使RTP、LLQ的报文等待的时间大大缩短。
3.6.2 IPHC
IPHC――IP Header Compression/IP报文头压缩,主要在低速链路上使用,可将40字节的IP/UDP/RTP头压缩到2~4个字节,如果不使用校验和,可压缩到2字节,从而提高链路的利用率,IPHC主要得益于同一会话的语音分组头和语音分组头之间的差别往往是不变的,因此只需传递增量。
RTP协议用于在IP网络上承载语音、视频等实时多媒体业务,RTP报文包括数据部分和头部分,RTP的数据部分相对小,而RTP的头部分较大,12字节的RTP头,加上20字节的IP头和8字节的UDP头,就是40字节;而RTP典型的负载是20字节到160字节,为了避免不必要的带宽消耗,可以使用IPHC特性对报文头进行压缩。
IPHC可以将IP/UDP/RTP头从40字节压缩到2~5字节,效果是相当可观的,可以有效的减少链路,尤其是低速链路带宽的消耗。
在具体实现上面,BDCOM不仅对IP head可以压缩,其他的一些“头”同样可以压缩,从而提高传输效率;主要包括DLC、CTCP、CRTP等,他们分别针对Data Link、TCP、RTP的头进行压缩的。
BDCOM在提供CTCP功能的时候,除了cisco-format模式以外,还同时提供IPHC-format、Passive等模式;另外还支持CRTP功能,这是专门对低速PPP链路RTP报文进行压缩,它们在原理和使用上面都大同小异,这里就不一一详述了。
除了报头压缩,BDCOM路由器还支持DLC报文压缩。
3.7 QoS特性的配合
前面介绍了关于QoS的很多技术要点,但它们都是零散的知识点,在实际的网络环境中它们是怎样协同工作的呢?请看下图:
200611263333483.gif
原始的报文序列在进入路由器、交换机等网络设备的设备的时候:
A首先需要根据ip包的源/目的ip地址、源/目的端口、协议类型、TOS等参数进行分类(CLASS);
B 然后在根据这些不同CLASS的报文进行CAR、GTS、WRED等操作,这些工作主要是通过令牌桶技术来完成的;
C 然后,这些经过预处理过的报文,根据自身的特点,安排进入不同的优先队列中进行排队;
D 网络设备根据各个队列的优先权,进行报文的出队调度,最终实现QoS的DiffServ。
4 总结
本文主要讲述了IP QoS的主要技术应用,其中又以DiffServ的内容为主,cisco路由器能够全面的支持和应用;虽然这些技术非常的有效,但要发挥它们的作用,必须使全网的路由器、交换机都开启QoS功能,进行协调配合,统一调度,但可行性却太低,所以最终在网络实施中,QoS的应用并不是非常广泛的,这一点是比较遗憾的。