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中高优先级队列的问题。