冯国仕, 李 璞, 吴 海
(中国电子科技集团公司第三十研究所,四川 成都 610041)
各种网络应用需要借助网络通信设备来完成端到端的信息交互,随着网络应用的丰富,对网络带宽和传输时延提出了更高的要求。为了满足应用对网络的高带宽等需求,二层交换技术得到了迅速的发展,其中以太网速率从10/100 Mb/s提高到1 Gb/s等更高速率,极大地提高了局域交换的吞吐量。相比于成本相对低廉的二层交换机,三层路由器的价格更为昂贵,而低端的路由器的转发性能又不能满足较高的带宽需求,因此业界将三层路由与二层交换机功能进行融合,形成了三层交换机[1],以达到成本相对较低同时又能快速路由和交换的目的。
相较于商业应用,工业应用往往对设备的结构尺寸、温度等环境适应性等要求更为苛刻,因此往往在商业应用中成熟的产品满足不了特定的工业需求,笔者也因此参与研发了一款千兆三层交换机。文中描述了该设备的软硬件体系架构,并深入阐述三层交换核心驱动模块的开发方法。
在局域网中往往利用 VLAN[2]技术来实现网段的划分,达到隔离广播域的目的。同一个VLAN内的站点之间直接通过二层交换完成通信,而位于不同VLAN之间的站点则借助于三层路由功能进行通信。三层交换机通过在二层交换机上引入路由功能,利用三层协议中的信息来完成路由和交换,以实现不同VLAN网段之间主机的通信。三层交换的路由通过软件学习获取,但IP报文转发通过硬件实现,从而达到三层线速转发。
三层交换机具有多张表,分为二层表和三层表两大类。其中三层有两种核心表,分别是三层接口表和三层交换表:三层接口表为VLAN虚拟接口的集合,其条目可抽象为
该三层交换机的硬件平台如图1所示,主要包括主控制和以太网交换两个模块。
图1 硬件结构
主控制模块由MPC8271[3]等芯片构成,主要负责三层交换机的控制和管理,运行生成树协议(STP[4])、动态主机配置协议(DHCP[5])等协议,并运行RIP、OSPF等多种路由协议。通过PCI连接以太网交换模块,以完成2层和3层表的配置,并利用DMA完成交换芯片与CPU之间的IP报文的收发。
以太网交换模块的交换芯片为BCM56224[6],该芯片是Broadcom公司推出的具有多层交换能力的以太网交换芯片,具有28路以太网接口,接口速率自适应 10/100/1000 Mb/s,其中有 4路可以配置为2.5 Gb/s以支持级联。BCM56224通过 SGMII连接BCM54680E PHY芯片,以提供对外连接的以太网接口。
软件平台操作系统采用VxWorks5.5,使用风河公司的Tornado 2.2完成软件开发与调试,交换芯片的配置管理则采用Broadcom公司提供的SDK[7]。
软件系统结构图如图2所示,主要包括基础支撑层、中间层和应用层,其中应用层分为业务协议处理和管理两大部分。
图2 软件结构
基础支撑层是软硬件之间的接口,为 VxWorks运行于特定的硬件平台提供支撑,实现系统对硬件底层的透明性。
中间层通过调用底层接口函数,结合本层的功能给上层应用提供各种系统服务,主要包含三层交换芯片支持包(SSP)、三层交换驱动模块、二层管理支撑模块等。其中三层交换芯片支持包为Broadcom公司提供的SDK,是三层交换开发中的一个核心中间件,用于完成交换芯片的配置管理,三层交换驱动模块也基于此模块进行开发。
应用层:主要包括协议处理模块和配置管理模块。协议处理模块包括链路层协议和路由协议处理;配置管理模块用于给设备提供各种外部管理接口,包括命令行接口、WEB管理接口、SNMP网络管理接口,便于用户对设备的状态进行监控和维护。
由上述的软件体系结构可以看出,该软件体系结构具有良好的可移植性和可扩展性,能充分利用其它产品(路由器、交换机)的开发成果,便于产品线的平滑升级。
三层交换核心模块基于Broadcom公司的SDK进行开发,因此重点工作是完成SDK基于VxWorks环境的编译与集成,并基于SDK提供的管理接口开发三层驱动模块。
由于BCM56224通过PCI总线连接CPU,因此需要移植PCI驱动,依据硬件连接设PCI的基地址、中断号和设备号等。
依据SDK中提供的Makefile模板,创建自己的Make.local文件,通过该文件来配置支持的芯片和功能模块,利用编译开关可以极大地压缩可执行代码的尺寸。
完成SDK移植后,首先需要验证芯片能正确初始化,以确保系统可以正常运行,方法是在VxWorks系统启动后,调用SDK的初始化函(diag_shell)完成交换芯片的初始化,并通过SDK提供的CLI对芯片进行配置与测试,如果验证通过即完成了 SDK的移植。
三层交换机由硬件完成三层数据的转发,但需要软件配置三层交换接口,并依据路由和主机等信息配置三层交换表,因此三层驱动的核心设计是如何融合路由、出接口、网关MAC地址等信息生成并下发相关表项,并当网关等信息发生变更时快速更新相关的三层交换表项。本模块构建并维护三层交换表采用的方法如下:
1)利用RouteInfo_st、HostInfo_st、L3Intf-Info_st三种数据结构分别表示路由信息、主机信息和三层接口信息。其中RouteInfo_st中包含IP/MaskLen、如果为非直连路由则包括指向其网关的指针(类型为 HostInfo_st),直连路由则包括指向三层接口的指针;HostInfo_st信息包括主机的IP地址、指向三层接口的指针、MAC地址和出二层端口号,并维护一个以本机为网关的路由项列表,便于网关的信息改变时能快速更新所有以该主机作为网关的路由的三层转发表项;L3IntfInfo_st表示一个三层接口,包括Intf-id、VLAN-ID、MAC等信息。
2)当收到路由管理模块下发的新增路由消息,则依据是否是直连路由进行不同处理:直连路由则完成路由登记并与出接口信息关联起来;非直连路由则完成路由登记并与网关关联起来。如果网关信息完整,则依据这三项信息可以得出完整的
3)当收到路由管理模块下发的删除路由消息,且该路由条目对应的信息已下发到交换芯片,则从交换芯片中删除该路由对应的三层转发表项。
4)监听发往CPU的IP报文,判断其源IP地址是否属于某一个直连网段,是则创建或者修改到该主机的三层转发信息,如果该主机信息属于新建或者发生改变,则更新所有以该主机作为网关的三层转发表项。
业界往往用以下三个指标衡量路由交换设备的性能:①吞吐量:是指在没有帧丢失的情况下,设备能接收并转发的最大数据速率;②转发时延:在最大吞吐量情况下,转发一个报文的平均时延;③丢包率:是指因系统资源不足等原因而导致的包丢失率。这几个性能指标采用安捷伦公司的N2X测试获得,端口速率为1 Gb/s,测试结果见表1。
表1 交换机性能测试结果
文中介绍了三层交换机的工作原理,并详细描述了自主研发的三层交换机的软件体系架构[8-9],深入介绍了三层交换驱动的实现方法。经过功能和性能测试,表明该三层交换机实现了二层、三层线速交换,软硬件架构设计合理,为后续的深入开发提供了可靠的基础平台。
[1] METZLE J, DENOIA L. Layer 3 switching: A guide for IT professionals[M].[s.l.]: Prentice Hall, 1999.
[2] IEEE Std 802.1Q-1998.IEEE Standards for Local and Metro-politan Area Networks: Virtual bridged local area networks[S].USA:IEEE,1998.
[3] MPC8272 PowerQUICC IITMFamily Reference Manual[S].[s.l.]:Freescale Semiconductor, Inc , 2005.
[4] IEEE 802.1D-1998. IEEE Standard for Information Technology——Telecommunications and Information Exchange Between Systems——LocalandMetropolitan Area NetworksCommon Specifications Part 3: Media Access Control(MAC) Bridges[S]. iso/iec 15802-3.USA:IEEE, 1998.
[5] DROMS R.Dynamic Host Configuration Protocol[S].[s.l.]:IETF RFC2131,1997.
[6] BCM56220/56020 Programmer’s Reference Guide[S].[s.l.]: Broadcom Corporation ,2002.
[7] Network Switching Software Development Kit Release 6.0.0[S]. [s.l.]:Broadcom Corporation ,2012.
[8] 易克非,胡庆锋.基于 DSP的实时多任务调度内核设计[J].通信技术,2011,44(06):135-137.
[9] 王胜银,付国晴,陈周国,等.基于linux平台的双机双工的实现[J].通信技术,2009,42(12):232-234,233.