FIFO队列原理简述 拥塞避免原理

拥塞管理是指网络在发生拥塞时,如何进行管理和控制。fifo队列不对报文进行分类,按报文到达接口的先后顺序让报文进入队列,采用尽力而为的转发模式,pq队列是针对关键业务应用设计的。
虽然流量分类几乎可以根据报文的任何字段进行,但是流量分类标记则一般只对802.1q 以太网帧的cos域、ip报文的tos域、mpls报文的exp域进行标记。流量的标记主要的目的就是让其他处理此报文的应用系统或设备知道该报文的类别,并根据这种类别对报文进行一些事先约定了的处理。
例如,在网络的边界做如下分类和标记:
1)所有voip数据报文聚合为ef业务类,将报文的ip优先级标记为5,或者将dscp值标记为ef;
2)所有voip控制报文聚合af业务类,将报文的ip优先级标记为4,或者将dscp值标记为af31。
当报文在网络边界被标记分类之后,在网络的中间节点,就可以根据标记,对不同类别的流量给予差别服务了。例如:对上述例子中的ef类业务保证时延和减少抖动,同时进行流量监管;对af业务类在网络拥塞时仍然保证一定的带宽,等等。
拥塞管理技术原理 1 拥塞管理基本概念 在计算机数据通信中,通信信道是被多个计算机共享的,并且,广域网的带宽通常要比局域网的带宽小,这样,当一个局域网的计算机向另一个局域网的计算机发送数据时,由于广域网的带宽小于局域网的带宽,数据将不可能按局域网发送的速度在广域网上传输。此时,处在局域网和广域网之间的路由器将不能发送一些报文,即网络发生了拥塞。
如下图所示,当公司分支1向公司总部以100m的速度发送数据时,将会使router2的串口s0/1发生拥塞。
图1 实际应用中的拥塞实例
拥塞管理是指网络在发生拥塞时,如何进行管理和控制。处理的方法是使用队列技术。将所有要从一个接口发出的报文进入多个队列,按照各个队列的优先级进行处理。不同的队列算法用来解决不同的问题,并产生不同的效果。常用的队列技术有fifo、pq、cq、wfq、cbwfq等,下文逐一介绍这些常用队列技术的基本原理。
2 fifo队列原理简述 fifo(first in first out,先进先出)队列示意图如下所示:
图2 fifo队列示意图
fifo队列不对报文进行分类,当报文进入接口的速度大于接口能发送的速度时,fifo按报文到达接口的先后顺序让报文进入队列,同时,fifo在队列的出口让报文按进队的顺序出队,先进的报文将先出队,后进的报文将后出队。
fifo队列具有处理简单,开销小的优点。但fifo不区分报文类型,采用尽力而为的转发模式,使对时间敏感的实时应用(如voip)的延迟得不到保证,关键业务的带宽也不能得到保证。
3 pq原理简述 pq(priority queuing,优先队列)示意图如下所示:
图3 pq队列示意图
pq队列是针对关键业务应用设计的。关键业务有一个重要特点,需要在拥塞发生时要求优先获得服务以减少响应的延迟。pq可以根据网络协议(如ip、ipx)、数据流入接口、报文长短、ip报文的tos、五元组(协议id、源ip地址、目的ip地址、源端口号、目的端口号)等条件进行分类,对于mpls网络,则根据mpls报文exp域值进行分类。最终将所有报文分成最多4类,分别属于pq的4个队列中的一个,然后,按报文所属类别将报文送入相应的队列。
pq的4个队列分别为高优先队列、中优先队列、正常优先队列和低优先队列,它们的优先级依次降低。在报文出队的时候,pq首先让高优先队列中的报文出队并发送,直到高优先队列中的报文发送完,然后发送中优先队列中的报文,同样,直到发送完,然后是正常优先队列和低优先队列。这样,分类时属于较高优先级队列的报文将会得到优先发送,而较低优先级的报文将会在发生拥塞时被较高优先级的报文抢占。这样会使得实时业务(如voip)的报文能够得到优先处理,非实时业务(如e-mail)的报文在网络处理完关键业务后的空闲间隙得到处理,既保证了实时业务的优先,又充分利用了网络资源。
pq的缺点是,当较高优先级队列中总有报文存在时,则低优先级队列中的报文将一直得不到服务,出现队列“饿死”现象。
4 cq原理简述 cq(custom queuing,定制队列)示意图如下所示:
图4 cq队列示意图
cq的分类方法和pq基本相同,不同的是它最终将所有报文分成最多至17类,每类报文对应cq中的一个队列,接口拥塞时,报文按匹配规则被送入对应的队列;如果报文不匹配任何规则,则被送入缺省队列(缺省队列默认为1,可配置修改缺省队列)。
cq的17个队列中,0号队列是优先队列,路由器总是先把0号队列中的报文发送完,然后才处理1到16号队列中的报文,所以0号队列一般作为系统队列,把实时性要求高的交互式协议报文放到0号队列。1到16号队列调度采用轮询方式,按照用户预先配置的额度依次从1到16号用户队列中取出一定数量的报文发送。如果轮询到某队列时该队列恰好为空,则立即转而轮询下一个队列。
cq把报文分类,然后按类别将报文分配到cq的一个队列中去,而对每个队列,又可以规定队列中的报文所占接口带宽的比例,这样,就可以让不同业务的报文获得合理的带宽,从而既保证关键业务能获得较多的带宽,又不至于使非关键业务得不到带宽。但由于采用轮询调度各个队列,cq无法保证任何数据流的延迟。
5 wfq原理简述 wfq(weighted fair queuing,加权公平队列)示意图如下所示:
图5 wfq队列示意图
wfq对报文按流特征进行分类,对于ip网络,相同源ip地址、目的ip地址、源端口号、目的端口号、协议号、tos的报文属于同一个流,而对于mpls网络,具有相同的标签和exp域值的报文属于同一个流。每一个流被分配到一个队列,该过程称为散列,采用hash算法来自动完成,这种方式会尽量将不同特征的流分入不同的队列中。每个队列类别可以看作是一类流,其报文进入wfq中的同一个队列。wfq允许的队列数目是有限的,用户可以根据需要配置该值。
在出队的时候,wfq按流的优先级(precedence)来分配每个流应占有出口的带宽。优先级的数值越小,所得的带宽越少。优先级的数值越大,所得的带宽越多。这样就保证了相同优先级业务之间的公平,体现了不同优先级业务之间的权值。
wfq优点在于配置简单,有利于小包的转发,每条流都可以获得公平调度,同时照顾高优先级报文的利益。但由于流是自动分类,无法手工干预,故缺乏一定的灵活性,且受资源限制,当多个流进入同一个队列时无法提供精确服务,无法保证每个流获得的实际资源量。wfq均衡各个流的延迟与抖动,同样也不适合延迟敏感的业务应用。
6 cbq原理简述 cbq(class based queuing,基于类的队列)示意图如下所示:
图6 cbq队列示意图
cbq首先根据ip优先级或者dscp、输入接口、ip报文的五元组等规则来对报文进行分类;对于mpls网络的lsr,主要是根据exp域值进行分类。然后让不同类别的报文进入不同的队列。对于不匹配任何类别的报文,报文被送入系统定义的缺省类。
cbq包括一个低时延队列llq(low latency queuing,低时延队列),用来支撑ef(expedited forwarding,快速转发)类业务,被绝对优先发送,保证时延。进入ef的报文在接口没有发生拥塞的时候(此时所有队列中都没有报文),所有属于ef的报文都可以被发送。在接口发生拥塞的时候(队列中有报文时),进入ef的报文被限速,超出规定流量的报文将被丢弃。
另外有64个bq队列(bandwidth queuing,带宽保证队列),用来支撑af(assured forwarding,确保转发)类业务,可以保证每一个队列的带宽及可控的时延。系统调度报文出队列的时候,按用户为各类报文设定的带宽将报文出队发送。这种队列技术应用了先进的队列调度算法,可以实现各个类的队列的公平调度。当接口中某些类别的队列没有报文时,bq队列的报文还可以公平地得到空闲的带宽,和时分复用系统相比,大大提高了线路的利用率。同时,在接口拥塞的时候,仍然能保证各类报文得到用户设定的最小带宽。
最后还有一个wfq队列,对应be(best effort,尽力传送)业务,使用接口剩余带宽进行发送。
cbq可根据报文的输入接口、满足acl情况、ip precedence、dscp、exp、label等规则对报文进行分类、进入相应队列。对于进入ef和af的报文,要进行测量;考虑到链路层控制报文的发送、链路层封装开销及物理层开销(如atm信元头),建议ef与af占用接口的总带宽不要超过接口带宽的75%。
cbq可为不同的业务定义不同的调度策略(如带宽、时延等),由于涉及到复杂的流分类,对于高速接口(ge以上)启用cbq特性系统资源存在一定的开销。
7 rtp原理简述 rtp优先队列(real time protocol priority queuing) 示意图如下所示:
图7 rtp队列示意图
rtp优先队列是一种保证实时业务(包括语音与视频业务)服务质量的简单队列技术。其原理就是将承载语音或视频的rtp报文送入高优先级队列,使其得到优先发送,保证时延和抖动降低为最低限度,从而保证了语音或视频这种对时延敏感业务的服务质量。
rtp优先队列将rtp报文送入一个具有较高优先级的队列,rtp报文是端口号在一定范围内为偶数的udp报文,端口号的范围可以配置,一般为16384~32767。rtp优先队列可以同前面所述的任何一种队列(包括fifo、pq、cq、wfq与cbq)结合使用,它的优先级是最高的。由于cbq中的ef完全可以解决实时业务,所以不推荐将rtp优先队列与cbq结合应用。
由于对进入rtp优先队列的报文进行了限速,超出规定流量的报文将被丢弃,这样在接口拥塞的情况下,可以保证属于rtp优先队列的报文不会占用超出规定的带宽,保护了其他报文的应得带宽,解决了pq的高优先级队列的流量可能“饿死”低优先级流量的问题。
拥塞避免原理 受限于设备的内存资源,按照传统的处理方法,当队列的长度达到规定的最大长度时,所有到来的报文都被丢弃。对于tcp报文,如果大量的报文被丢弃,将造成tcp超时,从而引发tcp的慢启动和拥塞避免机制,使tcp减少报文的发送。当队列同时丢弃多个tcp连接的报文时,将造成多个tcp连接同时进入慢启动和拥塞避免,称之为:tcp全局同步。这样多个tcp连接发向队列的报文将同时减少,使得发向队列的报文的量不及线路发送的速度,减少了线路带宽的利用。并且,发向队列的报文的流量总是忽大忽小,使线路的上的流量总在极少和饱满之间波动。
为了避免这种情况的发生,队列可以采用加权随机早期检测wred(weighted random early detection)的报文丢弃策略(wred与red的区别在于前者引入ip优先权,dscp值,和mpls exp来区别丢弃策略)。采用wred时,用户可以设定队列的阈值(threshold)。当队列的长度小于低阈值时,不丢弃报文;当队列的长度在低阈值和高阈值之间时,wred开始随机丢弃报文(队列的长度越长,丢弃的概率越高);当队列的长度大于高阈值时,丢弃所有的报文。
wred和队列机制的关系如下图所示:
图8 wred处理方式示意图
流量监管原理 流量监管(commit access rate,简称car)的典型作用是限制进入某一网络的某一连接的流量与突发。在报文满足一定的条件时,如某个连接的报文流量过大,流量监管就可以对该报文采取不同的处理动作,例如丢弃报文,或重新设置报文的优先级等。通常的用法是使用car来限制某类报文的流量,例如限制http报文不能占用超过50%的网络带宽。
car利用令牌桶(token bucket,简称tb)进行流量控制。下图所示为利用car进行流量控制的基本处理过程:
图9 car处理方式示意图
首先,根据预先设置的匹配规则来对报文进行分类,如果是没有规定流量特性的报文,就直接继续发送,并不需要经过令牌桶的处理;如果是需要进行流量控制的报文,则会进入令牌桶中进行处理。如果令牌桶中有足够的令牌可以用来发送报文,则允许报文通过,报文可以被继续发送下去。如果令牌桶中的令牌不满足报文的发送条件,则报文被丢弃。这样,就可以对某类报文的流量进行控制。
在实际应用中,car不仅可以用来进行流量控制,还可以进行报文的标记(mark)或重新标记(re-mark)。具体来讲就是car可以设置ip报文的优先级或修改ip报文的优先级,达到标记报文的目的。
流量整型原理 通用流量整形(generic traffic shaping,简称gts)可以对不规则或不符合预定流量特性的流量进行整形,以利于网络上下游之间的带宽匹配。
gts与car一样,均采用了令牌桶技术来控制流量。gts与car的主要区别在于:利用car在接口的出、入方向进行报文的流量控制,对不符合流量特性的报文进行丢弃;而gts只在接口的出方向对于不符合流量特性的报文进行缓冲,减少了报文的丢弃,同时满足报文的流量特性,但增加了报文的延迟。
gts的基本处理过程如下图所示,其中用于缓存报文的队列称为gts队列。
图10 gts处理过程示意图 物理接口总速率限制原理 利用物理接口总速率限制(line rate,简称lr)可以在一个物理接口上,限制接口发送报文(包括紧急报文)的总速率。
lr的处理过程仍然采用令牌桶进行流量控制。如果用户在路由器的某个接口上配置了lr,规定了流量特性,则所有经由该接口发送的报文首先要经过lr的令牌桶进行处理。如果令牌桶中有足够的令牌可以用来发送报文,则报文可以发送。如果令牌桶中的令牌不满足报文的发送条件,则报文入qos队列进行拥塞管理。这样,就可以对通过该物理接口的报文流量进行控制。
lr的基本处理过程如下图所示:
图11 lr处理过程示意图
其他提高qos的技术 链路效率机制 链路效率机制,用于改善链路的性能,间接提高网络的qos,如降低链路发包的时延(针对特定业务)、调整有效带宽。链路效率机制有很多种,下面介绍两种比较典型的链路效率机制及其基本原理。
1 链路分片与交叉(link fragment & interleave,lfi)
对于低速链路,即使为语音等实时业务报文配置了高优先级队列(如rtp优先队列或llq),也不能够保证其时延与抖动,原因在于接口在发送其他数据报文的瞬间,语音业务报文只能等待,而对于低速接口发送较大的数据报文要花费相当长的时间。采用lfi以后,数据报文(非rtp实时队列和llq中的报文)在发送前被分片、逐一发送,而此时如果有语音报文到达则被优先发送,从而保证了语音等实时业务的时延与抖动。lfi主要用于低速链路。
链路效率机制的工作原理图如下所示:
图12 lfi处理过程示意图
如上图所示,应用lfi技术,在大报文出队的时候,可以将其分为定制长度的小片报文,这就使rtp优先队列或llq中的报文不必等到大片报文发完后再得到调度,它等候的时间只是其中小片报文的发送时间,这样就很大程度的降低了低速链路因为发送大片报文造成的时延。
2 rtp报文头压缩(rtp header compression,crtp)
crtp用于rtp(real-time transport protocol)协议,对ip头、udp头和rtp头进行压缩,通常在低速链路上使用。可将40字节的ip/udp/rtp头压缩到2~4个字节(不使用udp校验和可到2字节),提高链路带宽的利用率。crtp主要得益于同一会话的语音分组头和语音分组头之间的差别往往是不变的,因此只需传递增量。
rtp协议用于在ip网络上承载语音、视频等实时多媒体业务。rtp报文包括头部分和数据部分,rtp的头部分包括:12字节的rtp头,加上20字节的ip头和8字节的udp头,就是40字节的ip/udp/rtp头;rtp数据部分典型载荷是20字节到160字节。为了避免不必要的带宽消耗,可以使用crtp特性对报文头进行压缩。crtp可以将ip/udp/rtp头从40字节压缩到2~4字节,对于40字节的载荷,头压缩到4字节,压缩比为(40+40)/(40+4),约为1.82,可见效果是相当可观的,可以有效的减少链路带宽的消耗,尤其是低速链路。
rtp报文头压缩的处理过程如下图所示:
图13 crtp处理过程示意图
链路层qos技术 链路层qos技术主要针对atm(asynchronous transfer mode,异步传输模式)、帧中继等链路层协议支持qos。atm作为一种面向连接的技术,提供对qos最强有力的支持,而且可以基于每个连接提供特定的qos保证;帧中继网络确保连接的cir(committed information rate,承诺信息速率)最小,即在网络拥塞时,传输速度不能小于这个值。
1 atm qos
atm是异步传输模式(asynchronous transfer mode)的简称,以信元为基本单位进行信息传输、复接和交换。atm信元具有53字节的固定长度,其中5个字节构成信元头部,主要用来标识虚连接,另外也完成了一些功能有限的流量控制,拥塞控制,差错控制等功能,其余48个字节是有效载荷。atm是面向连接的交换,其连接是逻辑连接,即虚电路。每条虚电路(virtual circuit,vc)用虚路径标识符(virtual path identifier,vpi)和虚通道标识符(virtual channel identifier,vci)来标识。一个vpi/vci值对只具有本地意义,不具有全局有效性。它在atm节点上被翻译。当一个连接被释放时,与此相关的vpi/vci值对也被释放,它被放回资源表,供其它连接使用。
atm中每一条vc都有一定的qos保障,这是由atm的连接管理来实现的。当用户与网络或网络与网络建立一个连接的时候,双方就确定了一份通信契约,契约中包括流量参数和qos参数两部分。此通信契约为双方所共识,双方必须遵守。流量参数包括峰值信元速率(pcr,peak cell rate)、持续信元速率(scr,sustained cell rate)、最小信元速率(mcr,minimum cell rate)以及最大突发量(mbs,maximum burst size),它们描述业务本身的流量特性,又称为源流量参数。qos参数主要包括最大信元传递时延(mctd,meancell transfer delay)、信元抖动容限(cdvt,celldelayvariationtolerance)和信元丢失率(clr,cell loss ratio), mctd是信元从一个端点到另一个端点所需要的时间, cdvt是信元间隔的上限, clr是可以接受的因网络拥塞而导致信元丢失比例。
atm端系统负责确保传输的流量符合qos合同。atm端系统通过缓冲数据来对流量进行整形,并按约定的qos参数传输通信。atm交换机控制每个用户的通信指标,并将其与qos合同进行比较。对于超过了qos合同的通信,atm节点可以设置信元的clp(cell loss priority,信元丢弃优先级)位。在网络拥塞时,clp置位的信元被丢弃的可能性更大。
atm网络拥塞管理的基本思想在于:引入预防性控制措施,不再是出现拥塞之后再采取措施来消除拥塞,而是通过精心管理网络资源来避免拥塞的出现。
2 fr qos
fr(frame relay,帧中继)是一种统计复用的协议,它能够在单一物理传输线路上提供多条虚电路。每条虚电路用dlci(data link connection identifier,数据链路连接标识)来标识。每条虚电路通过lmi(local management interface,本地管理接口)协议检测和维护虚电路的状态。
帧中继采用vc(virtual circuit)虚电路技术,即帧中继传送数据使用的传输链路是逻辑连接,而不是物理连接。虚电路是面向连接的,可以保证用户帧按顺序传送至目的地。根据虚电路建立方式的不同,将帧中继虚电路分为两种类型:永久虚电路(pvc,permanent virtual circuit)和交换虚电路(svc,switched virtual circuit)。pvc是手工设置产生的虚电路,而svc是通过协议协商自动创建和删除的虚电路。
帧中继报头中的3个位提供了帧中继网络中的拥塞控制机制,这3个位分别叫做向前显式拥塞通知(fecn,forward explicit congestion notification)位、向后显式拥塞通知(becn,backward explicit congestion notification)位和丢弃合格(de,discard eligible)位。可以通过帧中继交换机将fecn位置1来告知诸如路由器等目标数据终端设备(dte,data terminal equipment),在帧从源传送到目的地的方向发生了拥塞。帧中继交换机将becn位置1则告知目标路由器,在帧从源传送到目的地的反方向上发生了拥塞。de位由路由器或其他dte设备设置,指出被标记的帧没有传输的其他帧那么重要,它在帧中继网络中提供了一种基本的优先级机制,如果发生拥塞时,de位置位的帧会被优先丢弃。
帧中继流量整形(frts,frame relay traffic shaping)对从帧中继vc输出的通信进行整形,使之与配置速率一致,它将超出平均速率的分组放到缓冲区来使突发通信变得平滑。根据配置的排队机制,当有足够的可用资源时,这些缓冲的分组出队并等候被传输。排队算法是基于单个vc配置的,它只能针对接口的出站通信进行设置。frts可对每个vc的流量进行整形,将其峰值速率整形为承诺信息速率(cir,committed information rate)或其他定义的值,如超额信息速率(eir,excess information rate)。自适应模式的frts还能够根据收到的网络becn拥塞指示符降低帧中继vc的输出量,将pvc的输出流量整形为与网络的可用带宽一致。

《时代周刊》评选年度最佳发明,每一项都很颠覆性!
浅谈远程预付费集抄电能表在农网配电中的应用
华尔街日报:特朗普把制造业搬回美国对深圳影响有限
全球首款个性化营养可穿戴设备可以无痛测量关键的饮食生物标志物
华为Mate9高清渲染图:徕卡双摄抢眼 还有Pro版
FIFO队列原理简述 拥塞避免原理
如何搞定不规则形状的PCB设计难题
正沿触发的抛物线时基发生器
鲁大师公布2月新发手机性能榜 三星S20系列霸榜
国内外融资大事件简析汇总
基于几何分析的神经辐射场编辑方法
广东禅城今年计划建成充电站9座和各类充电桩489支
高通收购恩智浦为什么如此艰难?
为什么要进行无功补偿_无功补偿的意义
跨时钟设计:异步FIFO设计
手机销量暴降,这家厂商为何还要投入1000亿研发
iPhone8什么时候上市?iPhone8最新消息:iPhone8外观、配置、价格全面提升,iPhone8五大变化汇总很期待
三星推出随享系列智能投影仪_希捷助力CyArk实现数字化转型
用Arduino做一个自动割草机
三安光电利用部分固定资产开展融资租赁业务 将优化融资结构补充流动资金