摘要:区分服务Diffserv在QOS网络体系结构越来越受到广泛的应用,它具有很强的扩展性。本文给出了一种高性能路由器中支持Diffserv的实现方案。重点介绍了数据包分类机构和流量控制机构的实现。该实现方案在国家863项目“可扩展到T比特的高性能IPv4/v6路由器基础平台及实验系统”上测试已通过,并取得了较好的结果。
1.引言
随着IP 网络上新业务的不断出现,对IP 网络的服务质量(Quality of Service ,QoS) 提出了更高的要求。然而,传统的尽力而为的服务并不提供关于数据分组何时或是否被传送 给接收方的服务保证。1994 年,IETF 成立了Intserv (集成服务) 工作组,扩展Internet 服务模型,以更好地满足新出现的各种语音/视频应用程序的需要。Intserv 的目的是以流 为单位提供服务,因此每个网关内保持每个流的状态,处理每个数据包时需要参考数据包报 头的内容和流的状态。随着网络规模的不断扩大,引起流的数量变得庞大、网关处状态查询 时间增大、性能降低,以及网关的流状态管理变得困难等一系列问题。也就是说,Intserv 对于用户来说是易懂易使用的服务,但缺点是缺乏扩展性。
为了克服这个缺点,1998 年,IETF 成立了Diffserv(区分服务)工作组。Diffserv 是联系Intserv 的保证QoS 要求和目前Internet 所提供的尽力而为服务的桥梁,通过将通 信分成几类并为之提供相关的服务优先级来区分通信。本文的以下内容是这样组织的:首先 简要介绍了Diffserv 体系结构的原理,给出了Diffserv 体系结构中路由器的模型;然后讨 论了路由器中Diffserv 的实现;最后对全文进行了总结。
2.Diffserv 体系结构原理
Diffserv 体系模型的核心思想是:在网络边界将数据流按QoS 要求进行简单分类,不 同的类在内部节点的每次转发中实现不同的转发特性。Diffserv 体系使得ISP 能够提供给 每个用户不同等级和质量的服务。用户(或网络边界节点)通过设置每个数据包的DS 字段 (IPv4 首标中的服务类型(ToS)字段或Ipv6 首标中的通信类(Traffic Class 字段)的值 要求特定的服务等级。其中,被设置的DS 字段被称为区分服务码点(DSCP)。在每个支持Diffserv 的网络节点中,这个DS 值将数据报映射到一类转发行为PHB(Per-Hop Behavior) 中去,从而在转发中区别对待。用户和ISP 之间有一个协定,此协定规定了该用户在每个服 务等级上所能发送的最大数据率。超过此最大速率的数据包或被丢弃,或无法享受到它所要 求的服务。Diffserv 网络最大的特征是其可扩容性。此体系将许多复杂的控制移到了网络 边界,使内部节点能对叠加之后的数据流进行处理,而不必对每个数据流分别处理,从而大 大减小了网络内部应该记录的状态,简化了网络内部节点的操作。
在Diffserv 体系中定义了三种服务质量,分别为尽力而为服务(BE)、奖赏服务(EF) 和保证服务(AF),其中奖赏服务是指将网络带宽中的一小部分带宽分配给奖赏服务用户使 用,主要用于实时服务;而保证服务是提供比尽力而为服务尽可能好的服务质量,其与尽力 而为服务的区别在于当网络拥塞时先丢弃尽力而为分组。
3. Diffserv 在路由器中的实现
3.1 Diffserv 路由器的模型
路由器由控制平面和数据平面组成,如图一所示。其中数据平面包括流量调节机构、转发、流量控制机构、和数据包分类机构。
1) 流量调节机构:设置在每个路由器的输入端口。输入数据包按流分类,分别检查是否满 足被指定的流的特性。如果满足,就让它通过。如果不满足,就按照流量调节的框架处 理。作为处理的例子有丢弃、延迟、标志等。
2) 转发:参照每个数据包的报头内的发送目的地和路由器内的路由选择表,选择网关的输 出端口,并向端口传送。
3) 流量控制机构:将从网关内的多个输入端口向特定的输出端口传送的数据包按流分类, 使得每个流都满足被指定的特性,执行流量控制(队列管理装置和调度)。
4) 数据包分类机构:流量调节机构和流量控制机构的内部设置有数据包分类机构,它将抽 出作为流量调节和流量控制对象的数据包。参照数据包的多个报头,执行数据包分类的 分类机构称做MF(Multi Field)分类机构;只参照数据包的DS 字节执行分类的机构称 作BA(Behavior. Aggregate)分类机构。
在本路由器上实现对DiffServ 的支持采用一般的实现方法:首先根据包的DSCP 域确定 包的优先级,并打上相应的优先级标签,8 个优先级根据DiffServ 定义的十多个PHB 划分; 然后对不同优先级的包进行流量调节,最后根据优先级对包进行缓存和调度输出。
3.2 数据包分类机构的实现
本路由器中,数据包分类机构由优先级查表模块来实现。Diffserv 优先级表的结构如 下表所示:
优先级查表模块实现对数据包的分类:根据包的DS 域的前6 比特,查找Diffserv 优先 级表,确定包的4 比特优先级,并打上相应的优先级标签。同时根据处理机发出的命令完成 表对DiffServ 优先级映射表的维护。 优先级查表模块的工作原理图如图三:
为了能够在规定的时间内完成优先级查表的功能,以及考虑到FPGA 引脚的限制,本模块 主要有一个深度为64,宽度为4 比特的双端口RAM 实现DiffServ 业务流的优先级表。
用Project Navigator Ise 4.2i 的Core generation 作为工具,使用Xilinx Vertex 系列FPGA 内部的资源产生所需要的CAM 和双端口SRAM。CAM 和双端口SRAM 占用资源情况如 下:
3.3 流量控制机构的实现
流量控制机构由队列管理装置和优先级排队(Priority Queuing:PQ)来实现。优先 级排队是一种相对简单可支持区分等级服务的队列调度算法。典型的优先级排队中,分组首 先经分类送入不同优先级的队列中缓存,调度端严格按照优先级从高到低的次序优先发送较 高优先级队列中的分组,当较高优先级队列为空时,再发送较低优先级队列中的分组。即调 度端只在更高优先级的所有队列为空时才服务一个给定的优先级队列,在每个优先级队列中 分组按照FCFS 准则接受调度。这种调度器也被称为严格优先级(Strict Priority)机制。
PQ 准则天然的支持完整包调度,在优先级队列数不大的情况下,比较起GPS 等理想型 算法,PQ 属于实用的调度算法。
PQ 对提供延迟特性要求严格的业务非常有用,只需将这类业务如交互式的语音、视频 等,映射到最高优先级,即可确保它们获得尽可能低的时延。又因为调度端只需要查看各优 先级队列中是否有分组即可决定服务队列,它的计算负荷很低复杂度为O(1),易于在硬件 中实现。如图四所示:
根据内部报文的报头标识(第一个长字的7~3 比特为优先级指示)完成8╳1 结构的8 优先级调度。调度策略为:(a)若只有1 个内部FIFO 中有报文,则输出该FIFO 中的报文, (b)若同时有多于1 个内部FIFO 中有报文,则输出优先级最高的报文,(c)优先级最高的 报文多于1 个,则轮询输出。
4 总结
本文采用FPGA 实现了高性能路由器对区分服务的支持,并在国家863 项目“可扩展到 T 比特的高性能IPv4/v6 路由器基础平台及实验系统”上进行了测试。测试结果表明,该方 案完全符合性能需求,达到了设计指标。
