软件可编程的FPGA网络测量引擎技术实现

2021-01-08 02:25晏子杰王京梅
电子科技 2021年2期
关键词:寄存器IP地址引擎

晏子杰,王京梅,陈 卓,刘 宇

(电子科技大学 电子科学与工程学院,四川 成都 610054)

互联网技术的快速发展和网络流量的高速增长使得网络业务流的种类越来越丰富,网络规模和复杂性也越来越高[1]。其中,基于IP(Internet Protocol)的网络更是极大地影响了人们的生活[2-3]。网络流量作为网络运行状态的首要参考,监听、分析和研究网络流量的数据信息是网络运营和维护的重要环节[4]。通过对IP网络流量的有效测量,获得准确的网络性能特征参数,为网络运营商有效分配网络带宽及更加合理地利用网络资源提供了建设性意见。

传统网络流量测量方法主要有两种:基于硬件的测量方法和基于通用PC(Personal Computer)平台的测量方法[5]。针对基于硬件的测量方法通常采用Cisco公司提出的NetFlow技术,利用包交换芯片对IP数据流进行转发并同步进行简单的测量与统计[6]。由于该方案不要求对从每个接口接收到的每个数据包进行处理,因此需要设定合适的采样率。在这样的采样方式下,设备的设置的采样率很大程度上决定了流量测量的准确性[7-9],因此无法对网络流做到精细化测量。基于通用PC平台的测量方法是利用计算机网卡实现网络数据帧的截取,然后进一步分析,例如Sniffer、Wireshark、NetPeeker等[10]。但是,在高速海量的网络流量下,网络业务种类越来越丰富,传统的软件实现流量监控方法必然会给处理器带来额外的资源开销[11]。此外,由于处理器速度和串行执行等原因的限制,也使其远远无法满足当今网络发展的需求。

鉴于上述情况,本文提出了一种软件可编程的FPGA(Field Programmable Gate Array)网络测量引擎技术实现方案。该方案既能解决采用NetFlow方案中无法对网络流做到精细化测量的问题,又能解决传统基于通用PC平台的测量方法带来的资源开销较大及无法适配当今高速网络链路环境的问题。

1 系统总体设计

本研究设计了一种软件可编程的FPGA网络测量引擎技术实现方案,该方案可应用于分布式多点测量体系。数据采集点分布在网络中的各个节点,测量控制器用于将输入的自定义匹配规则编译成自定义指令集封装发送至数据采集点,并接收由数据采集点上报的数据帧,总体架构如图1所示。

图1 系统总体架构图Figure 1. Architecture diagram of overall system

数据采集点由MAC(Media Access Control)控制逻辑和规则过滤引擎构成,其中MAC控制逻辑用于实现交换机与测量目标之间的双向通路以及数据采集点与测量控制器之间的通信[12-13]。所述规则过滤引擎负责以流水线的方式处理由测量控制器下发的指令集[14-16]。当指令集执行完毕且指定结果寄存器的值发生改变时,认定交换机与计算机之间交互的当前数据帧与自定义规则相匹配,并根据不同的动作对当前数据帧进行过滤,或将其字节数信息通过MAC控制逻辑上报给测量控制器。数据采集点的控制电路在FPGA器件上综合实现,其整体框图如图2所示。

图2 数据采集点整体框图Figure 2.Overall block diagram of data collection point

2 系统实现方案

2.1 规则过滤引擎的实现

规则过滤引擎所支持的指令均采用32位固定长度,将每一条指令的处理过程拆分成取指、译码、执行、写回4个阶段。每个阶段由专门的硬件单元构成,采用多个硬件单元以流水线的方式并行处理多条指令。图3所示为规则过滤引擎的简单示意图,其实际构造比图示复杂。

图3 规则过滤引擎示意图Figure 3. Schematic diagram of rule filter engine

取指阶段负责确定下一条待读取指令的地址PC_NEXT,并将每个时钟周期的上升沿作为取指地址传递给指令存储器。由于需要支持跳转类指令,因此下一条指令的地址有可能是转移地址1(PC+1),也可能是跳转类指令指定的转移地址。根据不同的跳转类指令,转移地址又有两个不同的来源,分别是无条件跳转指令J的转移地址2、条件跳转类指令BEQ和BNE的转移地址3。所以用来选取PC_NEXT的多路选择器会有3个输入地址,在选择信号JUMP_SEL的控制下选择正确的地址。

译码阶段由3个模块组成,分别是寄存器堆、译码控制单元和跳转条件判断模块。寄存器堆由64个16位的寄存器组成。值得一提的是,流经双向以太网通路数据帧的五元组信息将会分别被记录到该模块中的指定寄存器中。该模块包含了两组读端口和一组写端口,负责提供指令处理过程中所需的操作数以及保存指令执行结果。所述译码控制单元负责根据指令的指定字段以及条件判断模块输出的EQUAL信号进行识别,产生相应的控制信号,包括内部操作码、JUMP_SEL信号以及寄存器堆的读使能信号和写使能信号。读使能信号用于判断当前指令所需的源操作数是否需要从寄存器堆中读取,相应地,写使能信号则用于判断当前指令的运算结果是否需要写入寄存器堆。

执行阶段由一个算术逻辑运算单元(Arithmetic and Logic Unit,ALU)构成,在译码阶段给出的内部操作码的作用下,对译码阶段传递过来的两个源操作数进行运算并得到结果。

写回阶段负责将运算结果写入寄存器堆中的目的寄存器。规则过滤引擎处理指令的状态转换图如图4所示,为其设计的指令集如表1所示。

图4 指令处理状态转换图Figure 4. State transition diagram of instruction processing

表1 规则过滤引擎指令集

2.2 规则转译器的实现

规则转译器可实现将输入的自定义匹配规则进行预处理后转译成引擎可执行的指令的功能。匹配对象包括源IP地址、源端口、目的IP地址和目的端口,支持的操作符有“-”和“|”操作符,匹配成功后对应的动作可选择字节计数或过滤。其中,“-”操作符执行的是范围匹配,而“|”操作符则表示“或”操作。例如输入规则“180-196|225”,其表示判断匹配对象是否为180~196范围内任一数值或者是否为225。需要说明的是, IP规则匹配的是IP地址和端口,以“-”字符进行区分。针对IP地址的匹配在规则输入界面表现为4组以“.”字符分隔的形式,对应32位二进制数的IP地址。规则输入界面如图5所示。

图5 规则输入界面示意图Figure 5. Schematic diagram of rule input interface

规则输入完毕后开始对其进行预处理的操作。这里以图5所示的源IP规则为例,由于其规则格式为part1.part2.part3.part4:part5的形式。因此,首先使用Java提供的String.split(String regex)函数以“:”字符为参数将规则拆分成源IP地址part1.part2.part3.part4和源端口part5两部分。针对源IP地址以“\.” (“.”字符在正则表达式中为特殊符号需要转义)为参数继续切分成part1、part2、 part3和part4四部分。此时,规则已经被解析成part1、part2、part3、part4和part5五个独立的字符串,接下来开始对每个part进行进一步解析,将字符串型的part转换成变量型的part,每个变量型的part都包含了range、simple两个list和target_reg、temp_reg、zero_reg共3个字符串变量。基本处理策略如下:对于每个字符串型的part,遇到“\d+ - \d+”形式的字符串就将其放入range型list中,并标识出最大值和最小值,否则将其放入simple型list里。分类完毕后,由于每个字符串型part针对的匹配对象不同,所以接下来需要对其寄存器组进行不同的赋值。具体值与规则过滤引擎中寄存器堆模块的设计相互约束。

经预处理后的生成的变量型part都包含有上述5个类型,此时开始进行生成指令的准备工作:将所有变量型的part放入一个数组中,进行下标加1比较是否小于整个数组长度的操作。该过程用来确定是否存在下一个变量型part,若存在,则判断其 range型List是否为空;若不为空,那么下一part的转译将从range型List开始。

生成指令的准备工作完成后开始对指令进行转译。首先查询当前变量型part中simple型List是否为空,若为空,则完成当前part关于range型List的转译工作后会直接跳转到下一part进行转译,以此类推,即可完成对输入规则的所有遍历。生成的每一条指令包含有指令助记符、当前指令的标签、指定寄存器地址和立即数四组变量,转译指令全部生成完毕后将其放入一个新的List中,采用后续遍历的方法对每条指令的标签进行替换。至此,完成了整个规则转译器的实现过程。

3 系统工作流程

首先在测量控制器上的规则转译界面输入自定义的匹配规则和对应的动作,每个匹配对象都可以转移条件加上操作符的形式输入实现精确匹配或范围匹配。将输入的自定义规则编译成自定义的指令集,根据以太网802.3协议标准和IP/UDP协议封装发送至数据采集点。

数据采集点中的MAC控制逻辑对接收到测量控制器下发的数据帧进行解帧操作,将封装的指令剥离出来,以每32位二进制数为一个地址单元存放至规则过滤引擎的指令寄存器中。当来自双向以太网通路的控制信号start_begin拉高,说明当前有数据帧流经双向以太网通路且当前数据帧的五元组信息已被剥离出来存入规则过滤引擎的寄存器堆中,此时规则过滤引擎开始工作。

规则过滤引擎以流水线的方式对指令进行取指、译码、执行、写回操作,当执行完STOP指令后,判断寄存器堆中的结果寄存器的值是否发生改变。若发生变化则根据对应动作的不同,相应的执行过滤当前流经以太网通路的数据帧或是启动计数信息数据帧的发送(其中包含了在双向以太网通路中符合匹配规则数据帧的字节数信息),上报给测量控制器。从而完成了一种软件可编程的FPGA网络测量引擎技术的实现。

4 结果验证

在动作为字节计数的条件下向规则输入界面输入“源IP:(180-196|225).(156|168).(0).(1)”实现对源IP地址的匹配,其中(180-196|225)用来匹配流经双向以太网通路的数据帧的源IP地址的第0个字节是否为180~196范围内任一数值或者是否为225;(156|168)则用来匹配源IP地址的第1个Byte的数值是否为156或168,其他以此类推。测量控制器通过对规则的编译,形成数据采集点中规则过滤引擎可执行的指令,如图6所示。值得注意的是,若规则匹配成功将会执行第34条指令(将第31个寄存器的值置1),否则执行第36条指令(空指令),即不执行任何操作。

图6 编译完成的指令示意图Figure 6. Schematic diagram of compiled instructions

其中数据采集点的实现基于Xilinx Artix7系列FPGA设计完成。将MAC控制逻辑和规则过滤引擎采用一个顶层文件封装,在一个多网口外设的开发板平台上进行验证。实验平台如图7所示。

图7 实验平台Figure 7. Experimental platform

当MAC控制逻辑接收完来自测量控制器下发的指令集并将其存入指令存储器后,依次往双向以太网通路中注入源IP地址为192.168.0.1,总字节数分别为86、87、88和89的数据帧。图8所示为采用Wireshark抓包软件抓取测量控制器接收到的数据帧(封装有字节数的信息如图箭头所示),其中56、57、58和59数制为十六进制,分别对应十进制数86、87、88和89。测试结果表明,所设计的系统能正确接收并处理由测量控制器下发的自定义指令集,从而实现对不同网络流进行测量的功能。

图8 Wireshark抓包示意图Figure 8. Capture package diagram of Wireshark

5 结束语

文中描述了一种基于FPGA的可配置网络流量测量技术实现方案,并且通过Wireshark抓包软件验证了系统的正确性以及方案的可行性,为实现网络流量测量提供了一种简单可靠的设计。本设计只完成了基于UDP/IP协议的测量功能,后续可以考虑将更多功能集成到性能日益强大的FPGA内部,例如TCP/IP的硬件实现、多核规则过滤引擎的实现等,其实现方案还需要进一步验证。

猜你喜欢
寄存器IP地址引擎
STM32和51单片机寄存器映射原理异同分析
Lite寄存器模型的设计与实现
铁路远动系统几种组网方式IP地址的申请和设置
IP地址切换器(IPCFG)
蓝谷: “涉蓝”新引擎
基于SNMP的IP地址管理系统开发与应用
公安网络中IP地址智能管理的研究与思考
无形的引擎
基于Cocos2d引擎的PuzzleGame开发
高速数模转换器AD9779/AD9788的应用