1.引言
软件定义网络(SDN)采用(yòng)控制与转发分(fēn)离结构,由于允许网络拥有(yǒu)者和运营商(shāng)对网络行為(wèi)进行编程而取得巨大的成功,在工业界得到广泛认可(kě)。各种开源项目,如ODL和ONOS等,在SDN技术发展中扮演重要角色,是推动SDN应用(yòng)的最大动力。
可(kě)编程交换是当前SDN的研究热点之一。如何实现高性能(néng)的openflow流表查表,如何扩展SDN交换平面功能(néng),如何实现对高级语言编程(P4)的支持等在學(xué)术界都得到了广泛研究。然而与目前存在的大量开源SDN控制器不同,开源SDN交换机难以满足SDN科(kē)研与教學(xué)的需要。OpenVSwitch功能(néng)全面,但全软件的实现方式难以满足高性能(néng)处理(lǐ)需求;NetFPGA实现了openflow 1.0交换,但近年来很(hěn)难看到后续的发展;國(guó)内南京叠锶的ONetSwitch在FPGA上实现了完善的SDN交换功能(néng),但交换机采用(yòng)FPGA内嵌的处理(lǐ)器,能(néng)力较弱,难以在处理(lǐ)器上进行数据路径处理(lǐ)功能(néng)的扩展。
2011年开始,國(guó)防科(kē)技大學(xué)、北京邮電(diàn)大學(xué)和东南大學(xué)等单位相关的课题组基于可(kě)编程交换平台NetMagic08进行了SDN实验平台的开发,形成了支持openflow1.0/1.3的SDN交换机。并采用(yòng)多(duō)核CPU+FPGA的架构(Netmagic Pro平台),实现了支持SDN数据平面功能(néng)扩展的Labelcast交换机以及软件定义隧道交换机(SDTS)等成果。2016年,课题组基于上述成果形成FAST(Fpga bAsed Sdn swiTch)开源项目,支持國(guó)内SDN交换技术的创新(xīn)研究和相关的教學(xué)工作。
2. 科(kē)研与教學(xué)对开源SDN交换机的需求
与在工业界应用(yòng)不同,面向科(kē)研与教學(xué)领域的开源项目的目标用(yòng)户主要是研究机构和大學(xué)中参与SDN技术研究的老师和研究生,这些人员在网络知识储备、编程水平、有(yǒu)意投入工程实现的时间等方面具有(yǒu)较大差异,因此对开源SDN交换项目也有(yǒu)不同的需求,主要具有(yǒu)以下特点。
(1)内部交换机内部的实现流程可(kě)见
研究人员、老师和學(xué)生可(kě)以看到交换机内部详细的工作流程,包括硬件对报文(wén)的处理(lǐ)波形,交换机内部软硬件交互的流程,以及交换机通过南向接口与控制器的通信流程。目前的市场采購(gòu)的SDN交换机无法看到内部工作流程,对研究人员来说是一个典型的“黑盒”,只能(néng)通过各种配置命令改变交换机的处理(lǐ)行為(wèi),或在开源的控制器一侧通过抓包软件观测交换机的外部行為(wèi),对SDN交换技术的研究支持不足。
(2)能(néng)够在交换机中增加自己的创新(xīn)工作
SDN的创新(xīn)研究有(yǒu)可(kě)能(néng)需要增加一个定制的模块来修改硬件处理(lǐ)逻辑,如支持新(xīn)的分(fēn)组格式,新(xīn)的调度算法,也有(yǒu)可(kě)能(néng)是通过在硬件逻辑中(或者流表中)设置一个“钩子”,将指定的流量定向到CPU,通过编写软件代码实现对特定流量施加特定处理(lǐ)。目前基于ASIC的商(shāng)用(yòng)SDN交换机难以支持上述功能(néng),新(xīn)型可(kě)编程SDN芯片(如Barefoot支持P4的芯片)尚未成熟,而且也是无法在硬件处理(lǐ)层次的创新(xīn)实验。
(3)需要更好的应用(yòng)和开发支持
由于在教學(xué)科(kē)研领域的研究人员,特别是研究生,水平层次不齐。特别電(diàn)子工程专业的可(kě)能(néng)擅長(cháng)硬件设计,计算机专业的可(kě)能(néng)擅長(cháng)软件编程,以论文(wén)為(wèi)目标的研究人员可(kě)能(néng)更加注重原理(lǐ)的验证而不是工作的稳定性,而部分(fēn)科(kē)研院所希望能(néng)够稳定可(kě)靠的工作,成為(wèi)产品的原型。因此研究人员希望能(néng)够获得更加专业,甚至是定制的服務(wù)。
(4)平台中立,不涉及具體(tǐ)的商(shāng)业利益
科(kē)研教學(xué)领域的研究主要是面向关键技术的突破和验证,以及SDN原理(lǐ)的學(xué)习。基本不涉及到各种商(shāng)业利益的纷争,因此平台应该具有(yǒu)中立性,不能(néng)依赖特定的平台和操作系统,也不能(néng)与其他(tā)特定的开源项目绑定发展。
因此,100G/40G高速接口和几十甚至是上百个的端口密度不是科(kē)研与教學(xué)平台的第一需求,内部处理(lǐ)流程可(kě)见,平台处理(lǐ)功能(néng)可(kě)定制,良好的服務(wù)技术支持,以及不带有(yǒu)商(shāng)业倾向性的平台设计才是科(kē)研教學(xué)领域的最重要需求。
3.FAST的技术路線(xiàn)
3.1 FAST硬件架构
FAST的FPGA设计主要分(fēn)為(wèi)平台相关逻辑、FAST流水線(xiàn)模块库以及工程配置文(wén)件库三部分(fēn),如图1所示。平台相关逻辑主要是各类用(yòng)于网络实验的FPGA平台,如NetMagic08,NetMagic Pro以及NetFPGA等為(wèi)了支持FAST交换机需要提供的基本功能(néng),包括物(wù)理(lǐ)网络接口分(fēn)组的收发,与CPU的通信,访问板卡外围协处理(lǐ)器(如TCAM)和存储器的接口等。
FAST流水線(xiàn)模块库包含了实现SDN交换逻辑的主要功能(néng)模块,这些模块是在前期项目开发中积累的,包括协议分(fēn)析,关键字提取、查表,动作(封头/去头,令牌桶限速等)、缓冲區(qū)管理(lǐ)和计数器等模块。用(yòng)户可(kě)根据这些模块,针对自己的需求搭建自己的SDN转发流水線(xiàn)。
工程配置文(wén)件库类似C语言的makefile文(wén)件,用(yòng)户可(kě)使用(yòng)工程配置文(wén)件指定FPGA选用(yòng)的平台,将平台相关逻辑以及FAST流水線(xiàn)多(duō)个模块组成一个工程。由于在FAST流水線(xiàn)模块设计中依赖一些器件相关的宏(如基于Altera Quartus II工具生成的FIFO、PLL等实例),因此目前工程配置库只支持基于Altera FPGA的可(kě)编程板卡。
FAST UM规范定义了平台相关逻辑与FAST交换逻辑的接口,详细见《FAST UM接口规范》。基于FAST UM规范设计的SDN转发逻辑可(kě)以方便的在不同的,支持FSAT 的FPGA平台上移植。例如SDN转发逻辑可(kě)以在相对简单的NetMagic08平台上调试,完成后再移植到NetMagic Pro平台。

图1 FAST项目的硬件架构
FAST软件由4部分(fēn)组成,包括平台相关通信库,核心管理(lǐ)软件,转发面扩展软件以及配置管理(lǐ)软件。其中平台无关的核心管理(lǐ)软件,转发面扩展软件以及配置管理(lǐ)软件都是FAST用(yòng)户可(kě)以修改的,统称為(wèi)UA(User Application)。
平台相关通信库实现CPU软件与交换FPGA的通信,根据FPGA平台的不同,会采用(yòng)不同的通信方式,例如与NetMagic08平台采用(yòng)以太网方式进行通信,对于NetMagic Pro平台、NetFPGA平台则采用(yòng)PCIe总線(xiàn)通信的方式。但平台相关软件与FPGA不同的通信方式对上层软件(核心管理(lǐ)软件、转发面功能(néng)扩展软件等)是透明的。即FAST项目定义了平台相关通信库对上层接口的规范,详见《FAST UA设计规范》。基于该规范开发的上层软件可(kě)不考虑下层的具體(tǐ)通信方式。

图2 FAST项目的软件架构
核心管理(lǐ)软件主要是SDN交换机数据平面中由CPU软件实现的基本功能(néng),包括各种表管理(lǐ)软件,硬件相关的驱动和管理(lǐ)软件以及软硬件协同处理(lǐ)中的软件功能(néng)实现部分(fēn)。各部分(fēn)主要功能(néng)如下。
(1)表管理(lǐ)软件:负责所有(yǒu)控制器配置表格的维护,控制器flowmod命令对交换机表操作的命令主要由核心管理(lǐ)软件响应和实现。
(2)算法相关软件:是对硬件平台的驱动。例如NetMagic Pro平台硬件采用(yòng)TCAM实现带掩码的查表,而NetMagic08平台采用(yòng)SBV算法实现288位带掩码的查表。算法相关软件需要根据表管理(lǐ)软件要求,根据平台相关的算法实现特点,实现对硬件中流表的管理(lǐ)。
(3)统计管理(lǐ)软件:例如实现SDN交换机计数器的管理(lǐ),将硬件实现的计数器(如流表项匹配分(fēn)组数目计数器、端口接收计数器)和软件实现的计数器(流表项存活时间)进行统一的管理(lǐ)。又(yòu)如数据平面实现的令牌桶参数、输出调度器配置的参数计算等。
配置管理(lǐ)软件主要实现SDN交换机的外部配置管理(lǐ)接口,包括SDN交换机需要的南向接口协议,如openflow协,以及本地的配置管理(lǐ)界面等。
4.基于FAST架构的用(yòng)户开发
FAST是面向教學(xué)科(kē)研的开源项目,必须為(wèi)网络技术研究和教學(xué)提供简单的第三方开发接口。根据不同科(kē)研单位的不同需求,这些开发接口分(fēn)為(wèi)多(duō)个层次。用(yòng)户可(kě)以选择全定制功能(néng)开发模式,即基于平台提供的FPGA开发接口(UM接口)和软件开发接口(UA接口)开发自己的功能(néng),优点是可(kě)以全新(xīn)打造自己的功能(néng),效率高,但难度较大,周期長(cháng),对开发人员的要求较高。FAST社區(qū)不推荐用(yòng)户采用(yòng)全定制功能(néng)开发的模式,而推荐采用(yòng)用(yòng)户定义功能(néng)模块开发模式。
用(yòng)户可(kě)借鉴已有(yǒu)的FAST软硬件架构和已有(yǒu)成熟的功能(néng)模块,只增加与自己应用(yòng)相关的模块,优点是开发时间短,对人员要求较低,而且可(kě)以得到FAST社區(qū)最大程度的技术支持。用(yòng)户可(kě)选择只开发自定义的硬件功能(néng)模块,或自定义的软件功能(néng)模块,或者同时开发硬件和软件模块,实现特定网络功能(néng)的协同处理(lǐ),FAST用(yòng)户定义模块开发示意如图3所示。
4.1 硬件UM开发
FAST社區(qū)已经开发了可(kě)工作的SDN转发的流水線(xiàn)demo程序,如图3所示。主要包含协议分(fēn)析(Parser)、查表(match)以及动作执行(match)等阶段。用(yòng)户可(kě)以在现有(yǒu)基础上增加自己的模块,如对新(xīn)协议的parser模块(P4),新(xīn)的动作执行模块(H4)等,而不需修改其他(tā)部分(fēn)。FAST UM规范定义了5个接口,分(fēn)别是A(从物(wù)理(lǐ)端口接收报文(wén))、B(向物(wù)理(lǐ)接口发送报文(wén))、C(将报文(wén)送软件处理(lǐ))、D(从软件接收报文(wén))和E(软件对硬件的配置接口)。
用(yòng)户开发的硬件模块如果需要软件管理(lǐ)配置,只要将需要管理(lǐ)配置的寄存器、计数器和控制表等预先映射到虚拟地址空间中,软件UA按照虚拟空间的地址,通过平台提供的API可(kě)以直接访问到这些资源。虚拟地址空间的原理(lǐ)见《FAST虚拟地址空间设计和使用(yòng)方法》。
4.2软件UA开发
用(yòng)户可(kě)在CPU的用(yòng)户空间进行定制模块的开发。用(yòng)户程序通过平台提供的接口接收和发送数据包, 在每个数据包之前会携带32个字节的metadata,Metadata的定义和使用(yòng)详见4.3节。
软件模块的开发主要遵循FAST UA规范中定义的F(接收Matadata和分(fēn)组的接口)、G(发送Matadata和分(fēn)组的接口)和H(向系统注册用(yòng)户定义功能(néng)模块的接口,获取自己的MID号等),并将需要管理(lǐ)的硬件模块的资源在虚拟地址空间中定义。
根据图2中的软件架构,用(yòng)户定义的模块位于SDN交换机数据平面,因此一方面可(kě)实现对L2-L3功能(néng)的软硬件协同处理(lǐ),例如对新(xīn)性网络协议的解析,另一方面也可(kě)实现数据平面对L4-L7处理(lǐ)功能(néng)的扩展,如扩展有(yǒu)状态防火墙功能(néng),扩展对指定流的DPI功能(néng)等。

图3 用(yòng)户定义功能(néng)模块开发原理(lǐ)示意图
(a)用(yòng)户模块的工作原理(lǐ)(b)软硬件模块通信携带的metadata格式
4.3软硬件协同处理(lǐ)机制
FAST通过两种机制实现软硬件处理(lǐ)的协同。一是将软硬件处理(lǐ)模块统一编址,為(wèi)每个action模块分(fēn)配统一的MID(Module ID)。例如图3(a)中三个硬件action模块(H1、H2和H3)和一个软件功能(néng)模块(S1)都会分(fēn)配一个唯一的MID。流表可(kě)以按照匹配结果将一个报文(wén)显示的分(fēn)派到指定的软件或者硬件功能(néng)模块。二是软硬件分(fēn)组通信时同时携带32字节的metadata。Metadata的定义如图3(b)所示。
FAST规范显式定义了Matadata的前16字节(Metadata0),如表1所示。通过Matadata,FPGA UM可(kě)将报文(wén)接收的端口、長(cháng)度、接收的精确时间和序列号,以及发出的硬件模块,目的软件模块等信息送给软件,平台相关软件根据DMID信息将其送给指定的用(yòng)户UA程序。用(yòng)户UA程序处理(lǐ)完分(fēn)组后,又(yòu)可(kě)通过Metadata信息将其送给指定的硬件模块,也可(kě)直接指定目的输出接口(输出调度器也通过DMID指定)。
FAST没有(yǒu)对Matadata的后16字节(Metadata1)进行定义。当SMID和DMID都是用(yòng)户自己设计时,可(kě)以自行约定Metadata1的含义,平台相关硬件和软件不对Metadata1进行任何检查和修改。
4.4 FAST.0参考设计
目前基于图1和图2的硬件和软件架构,以及图3的软硬件协同模型,國(guó)防科(kē)大课题组已经开发了支持openflow1.3的交换机原型FAST.0。FAST.0运行在NetMagic Pro平台,实现了与floodlight控制器的互联互通,以及标准的二层转发功能(néng)。
在FPGA硬件方面,FAST.0支持以太网/IPv4分(fēn)组的解析,L2-L4层关键字的提取,以及基于比特向量算法(BV)的288位带掩码的规则匹配功能(néng);在CPU软件方面,支持BV算法的管理(lǐ),通用(yòng)流表管理(lǐ),标准的openflow 1.3的接口软件等。FAST.0软硬件代码已经完全开源,可(kě)作為(wèi)用(yòng)户基于FAST架构进行定制开发的基础。
5.基于FAST的创新(xīn)研究示例
目前FAST项目基于NetMagic Pro等多(duō)个平台已经有(yǒu)支持openflow1.3的标准SDN交换机原型。基于这个原型,用(yòng)户可(kě)以进一步增加自己的许多(duō)功能(néng)。本节通过两个例子说明基于FAST项目进行SDN交换机功能(néng)扩展研究的方法和流程。
在5.1的基于内容的转发机制ICN-X实现中,用(yòng)户只需进行相关用(yòng)户态软件开发,不需任何硬件编程;5.2实现的精准测量服務(wù)AMS(Accurate Measurement Service)中,需要分(fēn)别设计软件和硬件模块,实现精确分(fēn)组发送时刻控制以及时间戳标记。
5.1支持基于内容的转发机制(ICN-X)
用(yòng)户可(kě)在FAST交换机上实现内容中心的转发机制ICN-X。这种机制在网络中可(kě)以与IPv4,IPv6转发机制共存。在FAST交换机上实现ICN-X转发机制的方法如下。
(1)将以太网type/length设置為(wèi)“X”,用(yòng)于指代上层协议為(wèi)ICN-X;交换机可(kě)根据该域的值區(qū)别以太网帧封装的上层协议分(fēn)组為(wèi)IPv4,IPv6,ARP、MPLS或是ICN-X。
(2)在用(yòng)户空间开发ICN-X协议转发软件ICN-X UA,ICN-X UA实现ICN-X的分(fēn)组转发控制,ICN-X机制的路由和其他(tā)管理(lǐ)分(fēn)组可(kě)通过ICN-X UA重新(xīn)定向成Packet-in分(fēn)组,发给控制器上相关的应用(yòng)处理(lǐ)。
(3)ICN-A UA启动时向UA管理(lǐ)器(UA-M)注册,注册信息包括:
ICN-X UA的模块版本号/开发者信息;
ICN-X UA中需要控制器管理(lǐ)的流表(如由控制器APP计算的转发表等);
(4)UA-M给ICN-X UA分(fēn)配唯一的模块号MID=Y;
(5)SDN控制器(应用(yòng))通过南向接口或其他(tā)方式获取ICN-X UA的模块号Y,以及需要通过FlowMod消息管理(lǐ)的流表信息;
(6)控制器(应用(yòng))根据Packet-in消息计算ICN-UA中转发规则,并通过flowMod消息配置这些规则;
(7)控制器(应用(yòng))产生并配置UM流表中的“钩子规则”,如:
Rule =“Type/length=X”,“other field= don’t care”
Atcion = Goto Module Y
经过上述步骤,用(yòng)户定制的FAST交换机就可(kě)以在正常进行IP分(fēn)组交换的同时,支持新(xīn)的ICN-X交换机制了。ICN-X UA完成分(fēn)组转发和二层封装后,直接将分(fēn)组发送回FAST UM,同时在metadata中设置输出端口号以及输出调度器的MID。该分(fēn)组会通过平台相关的软件和硬件送到UM的输出调度模块,不经修改的从相应的物(wù)理(lǐ)接口发出。
5.2支持精准测量服務(wù)(AMS)
主动测量是获取网络状态的有(yǒu)效手段。例如利用(yòng)香港理(lǐ)工大學(xué)提出的oneProbe测试方法,通过在用(yòng)户网中向分(fēn)布在全球的web服務(wù)器发送背靠背的TCP分(fēn)组对(packet pair),通过计算服務(wù)器对分(fēn)组对得响应情况,精确的推断出用(yòng)户主机到分(fēn)布在全球的互联网服務(wù)器之间的带宽和延时情况,从而进一步推断广域网的链路特性。
这种测试的精确性取决于能(néng)否控制分(fēn)组对真正的背靠背发送(中间没有(yǒu)插入延时),能(néng)否精确的获取分(fēn)组对发出以及返回的时间戳。由于基于标准服務(wù)器的实现存在测量进程收到内核调度,中断处理(lǐ)以及系统时钟不精确等特点,很(hěn)难保证测量的精确性,因此测量必须借助专用(yòng)的,昂贵的可(kě)编程网卡实现,而且发送进程与网卡之间的时间和状态同步控制也比较复杂。
通过对部署在用(yòng)户网络中的FAST交换机进行扩充,可(kě)以在交换机上方便的提供对精确的主动测量的支持。设发起测量的主机H连接FAST交换机端口A,连接被测网络的是FAST交换机的接口B,基本测量的流程為(wèi):测量主机H通过FAST接口A发送两个背靠背的TCP分(fēn)组P1和P2,这两个分(fēn)组经过交换机转发后从端口B发向被测网络;被测网络通过接口B返回对这两个分(fēn)组的响应P1’和P2’,交换机将这两个分(fēn)组通过接口A返回测试主机H。
通过对FAST交换机功能(néng)扩展,提供的精准测量服務(wù)包括:(1)交换机严格控制P1和P2从接口B背靠背发出,中间不插入任何延时;(2)交换机能(néng)够精确记录B口发出P1和P2,以及接收P1’和P2’的时间戳;(3)FAST交换机将时间戳信息通告给测试主机H。
要在FAST交换机上实现用(yòng)户定义的精准测量服務(wù),需要在FAST UM中开发专用(yòng)的分(fēn)组输出调度模块Hams,以及相关控制软件AMS UA。主机H使用(yòng)FAST交换机扩展的AMS服務(wù)流程如下。
(1)控制器上AMS APP配置交换机的流表规则,将主机H与被测服務(wù)器S之间的测量报文(wén)(用(yòng)H和S的地址标识,这些信息可(kě)通过离線(xiàn)方式或在線(xiàn)的方式通知控制器上的AMS APP),对送软件中的(预先完成向UA-M注册,并获取到MID)AMS UA模块处理(lǐ);
(2)AMS UA将P1和P2两个报文(wén)标记為(wèi)测量报文(wén)对,通过Matadata1中自定义的字段发给FAST UM中的Hams模块,Hams模块对输出调度器具有(yǒu)最高优先级,在收到两个报文(wén)后,通过输出调度模块背靠背发出,同时将发出时间记录在Hams模块中,在虚拟地址空间预先注册的寄存器中,AMS UA通过轮训读写该寄存器,获得报文(wén)发出的精确时间戳。
(3)P1’和P2’从B端口返回后,根据流表中的规则,会定向到AMS UA处理(lǐ)。AMS UA根据报文(wén)matadata0可(kě)获取分(fēn)组到达的精确时间戳。
(4)控制器上AMS APP从南向接口获取主机H测量必须的分(fēn)组对精确发出时间和响应的返回时间,并提交给主机H,完成AMS服務(wù)。
6.总结
综上所述,FAST技术架构具有(yǒu)以下特点。一是基于FPGA加多(duō)核CPU的异构处理(lǐ)平台设计,用(yòng)户可(kě)以根据自己的特点通过软件编程或硬件编程实现自己定制的模块,进行交换功能(néng)的扩充;二是FAST平台采用(yòng)开源结构,内部分(fēn)组的处理(lǐ)流程完全可(kě)见;三是软硬件设计基于平台无关接口,不依赖特定的平台实现,可(kě)移植性好;四是具有(yǒu)完善的软硬件参考设计,研究人员可(kě)以根据自己研究的需求定制自己的交换机。
参考文(wén)献
(1)《FAST UM接口规范》
(2)《FAST UA设计规范》
(3)《FAST虚拟地址空间设计和使用(yòng)方法》
(4)《FAST.0 硬件设计说明》
(5)《FAST.0 软件设计说明》
(以上文(wén)档整在修订,即将陆续发布。。。)