分组进行业务分类,并把分组与相应的队列关联起来;
接纳控制:检查CR-LDP中携带的流量参数,并判断该路由器是否有足够的资源来满足所需的QoS要求;
资源管理:管理资源信息以及队列的参数,主要包括带宽和缓存等;
队列管理器:管理队列中的分组,完成分组的调度,使其获得相应的服务。
二、 标签交换路由器的设计
1. MPLS标签交换以及流量处理
MPLS标签交换以及流量处理主要在接口卡上完成,本节介绍接口卡详细功能,我们在此不讨论物理层和MAC层的处理。如图3所示,当MPLS路由器接收到一个分组后,它执行如下的操作:
(1)MPLS分类器首先判断接收到的分组是带标签的还是不带标签的。如果携带了标签,MPLS分类器就通过查询ILM表得到相应的标签,然后对分组执行标签交换。如果未携带标签,则查询FIB表,若其对应的LSP存在,就与携带标签一样处理。否则,分组被发送到地址分类器。
(2)地址分类器根据路由表对分组执行第三层转发。
(3)如果分组的下一跳就是自己,分组就被送到端口分类器中,然后根据端口号送往相应的上层应用处理程序,如LDP/CR-LDP、OSPF、BGP等。否则,就根据查询的结果进入队列管理器进行排队,等候服务。
(4)当业务分类器接收到来自MPLS分类器的分组后,查找ERB表得到相应的ServiceID,ServiceID指示了分组应该被怎么排队。然后根据ServiceID以及输出接口信息,分组被发送到相应的队列中,并得到相应QoS的服务。来自地址分类器的分组就直接发送到相应输出接口的最低优先级队列进行排队。
从以上分组转发的过程我们看到,分组处理时需要以下4个表:
FIB表只有在入口LSR上保存该表,它记录了FEC到标签的映射信息;
ILM表每个LSR上都保存该表,它记录了已建立的LSP的信息,为携带标签的分组进行标签交换提供信息,它主要包括入/出标签和入/出接口;
ERB表主要维护分组的排队信息,为不同等级的业务提供不同QoS的保证;
路由表与传统的路由表相同,由路由协议维护,主要完成第三层转发信息的存储。
2. 资源预留
接纳控制和资源管理器组件是为了实现资源管理而设计的。资源管理器负责为队列管理器创建和维护队列提供参数信息并且负责资源信息的管理(如资源表)。
图4所示为MPLS路由器对资源预留消息的处理过程。当LDP/CR-LDP组件接收到CR-LDP的Request消息时,它调用接纳控制来检查路由器是否有足够的资源。如果有,接纳控制模块通过更新资源表来预留资源,然后LDP的Request消息被发送到下一个节点。
当LDP/CR-LDP组件接收到CR-LDP的Mapping消息后,在ILM表中记录标签和接口信息,并且在ERB中记录CR-LSP的信息(如LSPID),产生ServiceID。然后,调用资源管理器修改此CR-LSP对应队列的参数,并且在ERB表中记录ServiceID。最后,CR-LDP的Mapping消息被发送到上游节点。
3. 队列管理和Crossbar调度算法
当前的高速交换机和路由器采用的主流排队方法和Crossbar调度方式有3种:输入排队、输出排队和输入/输出排队(CIOQ:Combined Input-output Queued)。
输入排队实现简单,存储器读写速率也只需和接口线速相等,Fabric加速比只需为1。但是,单队列的输入排队会造成队头阻塞(HOL),使吞吐率只有58.6%[6]。由于输出排队受限于存储器的读写速率,并且要求Fabric的加速比为N(N为端口数),所以也不适于高速的交换。本文中的设计选择了CIOQ排队结构,它是一种结合输入/输出排队的实现方法,在输入排队上采用VOQ方式,避免了HOL,大大提高了吞吐率,在输出排队上采用FIFO。如图5所示。研究证明CIOQ的平均分组时延、分组丢失率、分组阻塞率、最大吞吐率都优于其它的方法,并且当Fabric加速比为4时,可以达到99%的吞吐率[5,7]。
由于Internet上越来越多的业务具有不同的QoS要求,因此我们在输入排队处采用两级调度。去往同一端口的分组进入VOQ之前首先进入CBQ进行排队,然后按照不同的优先级进行调度进入VOQ。CBQ是优先级排队的一个变种[8,9],该算法可以通过为某些类型的流量设置优先级来提供公平的排队,并且不允许某个等级的流量独占系统资源和带宽。算法通过改变CBQ的参数可以分别达到不同等级业务需要的性能[10],比如支持Diff