为解决高速以太网链路接口中软件方式实现的MAC层地址表机制在处理效率上受到制约的问题,提出了一种基于FPGA (现场可编程门阵列)硬件电路方式实现以太网交换机中MAC地址表的查找,学习和老化。该方法采用hashing算法建立地址表项索引值与MAC地址之间的对应关系,完成满足平均时间复杂度为O (1)的地址查找。由于实际交换机中地址表容量有限,地址学习只能是MAC地址的子集,通过优化hashing函数降低地址冲突发生的概率以及设计一种地址老化机制提高地址表查找能力。仿真结果表明,地址表机制采用硬件电路方式实现比软件方式处理效率更高。
引 言
在计算机网络中,数据链路层完成节点到节点的通信,二层以太网交换机属于数据链路层设备[1]。MAC (介质访问控制)地址是在网络通信用来识别主机的标识。交换机的缓存中有一个MAC地址表,需要转发数据时,交换机会在地址表查询是否有与目的MAC地址对应的表项,如果有,交换机立即将数据报文往该表项中的转发端口发送;如果没有,交换机则会将数据报文以广播的形式发送到除了接收端口外的所有端口,尽最大能力保证目的主机接收到数据报文。因此,交换机地址表的构建和维护决定了数据转发的方向和效率。
MAC层地址表存储查找多基于hash表。Hashing是一种用于以常熟平均时间插入、删除和查找的技术,hash表通过把关键码值映射到表中一个位置来访问记录。这个映射函数叫做hashing函数,存放记录的数组叫做hash表。交换机地址表存储的是全部MAC地址的一个子集因此必然会发生地址冲突,文献[2-3]对比了几种解决冲突的方法。
MAC地址表的容量是有限的,因此交换机采用老化机制来维护MAC地址表,以保证最大限度地利用地址表项资源。交换机在构建某条表项时,会相应地开启该表项的老化定时器[4],如果在老化时间内,交换机始终没有收到该表项中的MAC地址的报文,交换机就会将该表项删除,失效的表项不会继续占用MAC地址表资源。这样,即使网络中的设备更换或者移除,交换机的MAC地址表始终能保持网络中最新的拓扑结构记录。合适的老化时间可以提高MAC地址表项资源的利用率,但过长或过短的老化时间,反而影响交换机的性能。如果老化时间过长,交换机中保存的MAC地址表项的数量过多会将地址表资源消耗完,网络中的拓扑变化就无法及时更新;如果老化时间过短,则有效的MAC地址表项会被交换机过早删除,从而降低交换机的转发效率。
传统的MAC地址表处理机制主要采用软件的方式实现[5]。随着以太网链路接口的速率从1Gb/s发展到10Gb/s,基于软件的算法在速度上受到串行计算机系统的制约。新一代现场可编程门阵列(FPGA)的出现以后,算法通过硬电路描述,所有的延迟只来源于门电路,而一般门电路的延迟都在ns级别。减少了系统运行所需的时钟周期数,实现了真正的高速率。
1 地址表处理机制
本数字电路设计中,采用单一时钟域的同步时序设计,所有的触发器都是在同一个时钟节拍下进行翻转。这样就简化了整个设计,后端综合、布局布线的时序约束容易实现。
地址表占用的空间由片内存储器RAM 提供,片内存储器是基于FPGA的系统可使用的最简单的存储器,存储、读取是在FPGA内部完成,电路板上无需外部连线,具有最高吞吐量和最低反应延时的,适用于缓存和查找表。地址表表项中至少记录mac物理地址,端口号。每个mac地址表项的数据结构见表1。
定义如下:
Valid:表项有效指示,1代表有效表项,0代表空闲表项。
Age:老化比特,地址表更新时查询的位段,1代表年轻,0代表老化。
Mac address:48bit物理地址。
Port_id:物理地址对应的端口号。
地址表项写入表中的位置即地址学习由源地址(MAC地址)经过hashing算法求得的索引值决定。地址表项的读取即地址表查询由目的地址(物理地址)经过hashing算法求得的索引值决定。Hashing算法本身消耗一部分时序,物理地址的学习和查询就需要等待这部分时序,为了使得地址表处理起来更加清晰、明确,整个设计分为3个模块(如图1所示):地址表的输入调整、地址表处理机制、地址表的输出调整。
模块划分后,本级模块向下一级模块一次性交付需要处理的所有并行数据。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)