有效
一种基于FPGA硬件加速的NFV网络流量分类方法
原玉磊、陈曙晖、时向泉、赵宝康、赵锋、陶静、虞万荣、韩彪、魏子令
中国人民解放军国防科技大学
原
原玉磊 专利 64
中国人民解放军国防科学技术大学网络协议数字信息传输电通信技术
陈
陈曙晖 专利 91
中国人民解放军国防科技大学数据交换网H04L29/00数字信息传输
时
时向泉 专利 58
中国人民解放军国防科技大学数字信息传输电通信技术电学
赵
赵宝康 专利 90
中国人民解放军国防科技大学数字信息传输电通信技术电学
赵
赵锋 专利 114
中国人民解放军国防科技大学雷达系统探测部件无线电定位导航
陶
陶静 专利 72
中国人民解放军国防科技大学数据交换网数字信息传输电通信技术
虞
虞万荣 专利 82
中国人民解放军国防科技大学数字信息传输电通信技术电学
韩
韩彪 专利 35
中国人民解放军国防科技大学数字信息传输电通信技术电学
魏
魏子令 专利 32
中国人民解放军国防科技大学电子数据处理数字信息传输电通信技术
摘要
本发明公开了一种基于FPGA硬件加速的NFV网络流量分类方法,目的是解决传统方法中分类器成为NFV技术性能瓶颈的问题。技术方案是构建由流表配置部件、和采用FPGA实现的流表管理部件、流表存储器、报文接收部件、流表查询部件、报文处理部件、报文发送部件组成的基于硬件加速的NFV分类器。NFV分类器一边进行初始化,监听NFV管理与编排器并从NFV管理与编排器接收服务功能链管理数据,完成报文流表的管理;一边监听网卡MAC层,接收网卡MAC层发送的输入报文,根据输入报文的流表数据结构完成报文分类处理,并发送给NFV服务功能链。本发明将NFV管理编排的服务功能链数据转为报文流表,将报文流表匹配及处理通过FPGA硬件加速来实现,大大提高了NFV分类器的分类速度。
1.一种基于FPGA硬件加速的NFV网络流量分类方法,其特征在于包括以下步骤:第一步,构建基于硬件加速的NFV分类器;NFV分类器由软件部分和硬件部分组成,其中软件部分包括流表配置部件,硬件部分包括流表管理部件,流表存储器,报文接收部件,流表查询部件,报文处理部件,报文发送部件;流表配置部件为软件实现的功能模块,部署运行于NFV网络环境的操作系统中;流表管理部件、报文接收部件、流表查询部件、报文处理部件、报文发送部件为在网卡FPGA中实现的功能模块,部署运行于网卡FPGA中;流表存储器为网卡FPGA中实现的存储空间;流表配置部件与流表管理部件、NFV管理与编排器相连,它从NFV管理与编排器中接收NFV服务功能链管理数据sfc_struct,并将服务功能链管理数据sfc_struct转换为流表管理数据,将流表管理数据发送给流表管理部件;sfc_struct包括7个域:服务功能链管理命令即sfc_cmd,服务功能链编号即sfc_id,服务功能链管理数据的报文原始目的IP地址即sfc_dip1、报文原始端口号即sfc_dport1,服务功能链管理数据对应服务功能链报文的目的IP地址即sfc_dip2、服务功能链报文的目的端口号即sfc_dport2,服务功能链管理数据对应的网络协议号即sfc_proto;以下均以“->”表示sfc_struct的某个域;流表管理数据flow_struct包括7个域:流表管理命令即flow_cmd,流表编号即flow_id,流表管理数据的报文原始目的IP地址即flow_dip1、报文原始端口号即flow_dport1,流表处理后报文的目的IP地址即flow_dip2、流表处理后报文目的端口号即flow_dport2,流表管理数据对应网络协议号即flow_proto;流表配置部件通过数组flowid_used[FLOWN]和链表数组sfc_flow[SFCN]来维护服务功能链编号和流表编号之间的关系;数组flowid_used的第i个元素flowid_used[i]取值0或者1,i=1,2,…,FLOWN;flowid_used[i]取值为0时,表示流表编号i未被使用;flowid_used[i]取值为1时,表示流表编号i已被使用;其中FLOWN表示NFV分类器可支持的最大流表数量;链表数组sfc_flow的第j个元素sfc_flow[j]为1个链表,j=1,2,…,SFCN,该链表存储属于编号为j的服务功能链的所有流表的编号,链表中一个元素为属于服务功能链j的一个流表的编号其中SFCN表示NFV分类器可支持的最大服务功能链数量;服务功能链管理命令和流表管理命令有2种取值:0,1;服务功能链管理命令取值0表示增加服务功能链管理数据;取值1表示删除服务功能链管理数据;流表管理命令取值0表示增加流表管理数据;取值1表示删除流表管理数据;流表管理部件与流表配置部件和流表存储器相连,它从流表配置部件接收流表管理数据,将流表管理数据转化成流表数据结构后存储到流表存储器;流表存储器与流表管理部件和流表查询部件相连,是网卡内FPGA中的数据存储器,用于存储流表数据结构;流表数据结构包括3个域:流表编号即flow_id,流表处理报文目的IP地址即flow_dip2和流表处理后报文目的端口号即flow_dport2;报文接收部件与以太网接口即网卡MAC层和流表查询部件相连,它从以太网接口接收外部输入报文,将输入报文发送给流表查询部件;流表查询部件与报文接收部件、报文处理部件和流表存储器相连,它从报文接收部件接收输入报文,从输入报文中提取出五元组信息(源IP地址,目的IP地址,源端口,目的端口,协议号),对五元组信息计算哈希值,并根据哈希值从流表存储器中查找对应的流表数据结构;查到后,将输入报文和流表数据结构一并发送给报文处理部件;报文处理部件与流表查询部件和报文发送部件相连,它从流表查询部件接收输入报文和对应的流表数据结构,根据流表规则处理报文,并将处理后的报文发送给报文发送部件;报文发送部件与报文处理部件相连,并通过网卡驱动和协议栈与NFV服务功能链相连,它从报文处理部件接收处理后的报文,将处理后报文发送给NFV服务功能链;第二步,NFV分类器按2.1~2.5的流程进行初始化,监听NFV管理与编排器并从NFV管理与编排器接收服务功能链管理数据,完成报文流表的管理;同时NFV分类器按2.6~2.11的流程监听网卡MAC层,接收网卡MAC层发送的输入报文,根据输入报文的流表数据结构完成报文分类处理,并发送给NFV服务功能链;具体步骤如下:2.1流表配置部件进行初始化,具体步骤如下:2.1.1根据NFV网络需求确定FLOWN和SFCN 的值;2.1.2流表配置部件初始化数组flowid_used的每个元素为0,即令flowid_used[1],…,flowid_used[i],…,flowid_used[FLOWN]均=0;2.1.3流表配置部件初始化链表数组sfc_flow的每个元素为空,即令sfc_flow[1],…,sfc_flow[j],…,sfc_flow[SFCN]均为空;2.1.4流表配置部件初始化时间t=当前操作系统时间;2.2流表配置部件监控NFV管理与编排器是否发送了服务功能链管理数据,如果发送了服务功能链管理数据,转步骤2.3;如果没有发送,转步骤2.2.1;2.2.1获取当前操作系统时间t1,若(t1-t)<T,转2.2继续监控;若(t1-t)>=T,转第三步;所述T为超时阈值;2.3流表配置部件更新t为当前操作系统时间,接收服务功能链管理数据sfc_struct,并根据服务功能链管理数据sfc_struct更新数组flowid_used和sfc_flow,构建流表管理数据,具体步骤如下:2.3.1从数组flowid_used中找出第一个为0的元素,如果所有元素均为1,则找出第一个元素;2.3.3将i1插入链表sfc_flow[sfc_struct->sfc_id]中,其中sfc_struct->sfc_id为sfc_struct的sfc_id,sfc_flow[sfc_struct->sfc_id]为链表数组sfc_flow的第sfc_struct->sfc_id个元素;2.3.4定义流表管理数据flow_struct,令:flow_struct->flow_id=i1;flow_struct->flow_cmd=sfc_struct->sfc_cmd;flow_struct->flow_dip1=sfc_struct->sfc_dip1;flow_struct->flow_dport1=sfc_struct->sfc_dport1;flow_struct->flow_dip2=sfc_struct->sfc_dip2;flow_struct->flow_dport2=sfc_struct->sfc_dport2;flow_struct->flow_proto=sfc_struct->sfc_proto;2.4流表配置部件将flow_struct发送给流表管理部件;2.5流表管理部件从流表配置部件接收flow_struct,根据flow_struct构建流表数据结构,并更新流表存储器,具体步骤如下:2.5.1对flow_struct->flow_dip1、flow_struct->flow_dport1和flow_struct->flow_proto计算哈希值,令为flow_hash;2.5.2如果flow_struct->flow_cmd为0,转步骤2.5.3,否则转步骤2.5.4;2.5.3将flow_struct->flow_id、flow_struct->flow_dip2、flow_struct->flow_dport2依次存入流表存储器中第flow_hash个流表数据结构,分别作为第flow_hash个流表数据结构的flow_id,flow_dip2和flow_dport2,转步骤2.2;2.5.4将流表存储器中第flow_hash个流表数据结构的数据全部设置为0,转步骤2.2;2.6报文接收部件初始化时间t2=0,并开始计时;2.6.1报文接收部件监控网卡MAC层是否有输入报文到达,如果有,转步骤2.7,如果没有,则转步骤2.6.2;2.6.2获取当前计时时间t3,若(t3-t2)<T,转2.6.1继续监控;若(t3-t2)>=T,转第三步;2.7报文接收部件更新t2为当前计时时间,从网卡MAC层接收输入报文,令为pkt,将pkt发送给流表查询部件;2.8流表查询部件从报文接收部件接收pkt,根据pkt在流表存储器中查找匹配的流表数据结构,具体步骤如下:2.8.1从pkt中提取报文目的IP地址pkt_dip,目的端口pkt_dport和协议号pkt_proto;2.8.2对pkt_dip、pkt_dport和pkt_proto计算哈希值pkt_hash;2.8.3在流表存储器的第pkt_hash位置处分别提取出流表数据结构的流表编号,记为pkt_fid、流表处理报文目的IP地址,记为pkt_fip、流表处理后报文目的端口号,记为pkt_fport;2.8.4如果pkt_fid为0,将pkt转发至报文发送部件,转步骤2.11;否则,将pkt以及pkt_fip、pkt_fport转发至报文处理部件,转步骤2.9;2.9报文处理部件从流表查询部件接收pkt、pkt_fip、pkt_fport,修改报文pkt目的IP地址、计算并更新IP校验和,得到报文pkt1,并将pkt1发送给报文发送部件;2.10报文发送部件从报文处理部件接收pkt1,并将pkt1根据pkt1的目的IP地址转发至对应的NFV服务功能链,完成报文分类,转步骤2.6.1继续监听接收输入报文;2.11报文发送部件从流表查询部件接收报文pkt,并将pkt根据pkt目的IP地址转发至对应的NFV服务功能链,完成报文分类,转步骤2.6.1继续监听接收输入报文。第三步,此时表示NFV分类器已经有长达T的时间未从NFV管理与编排器接收到输出服务功能链管理数据,或报文接收部件已经有长达T的时间未从网卡MAC层接收到输入报文,说明网络出现了故障,结束。
2.如权利要求1所述的一种基于FPGA硬件加速的NFV网络流量分类方法,其特征在于所述服务功能链管理命令和流表管理命令取值相同。
3.如权利要求1所述的一种基于FPGA硬件加速的NFV网络流量分类方法,其特征在于所述FLOWN=1000,SFCN=100;所述T设置为30分钟。
4.如权利要求1所述的一种基于FPGA硬件加速的NFV网络流量分类方法,其特征在于2.3.1步所述从数组flowid_used中找出第一个为0的元素的方法为:2.3.1.1定义循环变量i1,令i1=1;2.3.1.2如果flowid_used[i1]=0,结束,否则转步骤2.3.1.3;2.3.1.3令i1=i1+1,如果i1≤FLOWN,转步骤2.3.1.2,否则转步骤2.3.1.4;2.3.1.4令i1=1,转步骤2.3.2。
5.如权利要求1所述的一种基于FPGA硬件加速的NFV网络流量分类方法,其特征在于2.5.1步和2.8.2所述计算哈希值的方法是CRC32算法。
6.如权利要求1所述的一种基于FPGA硬件加速的NFV网络流量分类方法,其特征在于2.9步所述报文处理部件计算并更新IP校验和,得到报文pkt1,并将pkt1发送给报文发送部件的方法是:2.9.1报文处理部件将报文pkt的目的IP地址修改为pkt_fip,将报文pkt的目的端口号修改为pkt_fport,得到报文pkt1;2.9.2报文处理部件计算并更新报文pkt1的IP校验和;2.9.3报文处理部件将处理后的报文pkt1发送给报文发送部件。



