有效
一种基于OVS的NFV报文转发方法
原玉磊、时向泉、苏金树、陈曙晖、陶静、赵宝康
中国人民解放军国防科技大学
摘要
本发明公开了一种基于OVS的NFV报文转发方法,目的是解决服务功能链节点间报文转发量大、SFC转发效率低的问题。技术方案是先构建由SF网络数据构建部件、SFC数据构建部件、报文转发控制部件、参数配置文件组成的NFV报文转发系统并将该系统部署在NFV的网络环境中。SF网络数据构建部件根据OVS网桥名称、SF节点的信息构建SF网络数据链表SF_list;SFC数据构建部件根据SF_list和SFC定义数据构建SFC结构数据sfc;报文转发控制部件根据sfc生成正向传输流表和反向传输流表;报文转发控制部件根据正向和反向传输流表完成NFV报文转发。采用本发明可以减少节点数量,避免报文在各个节点间导流时的复杂路由策略计算,避免设计新的应用协议和应用协议处理,极大提高了SFC转发性能。
1.一种基于OVS的NFV报文转发方法,其特征在于包括以下步骤:第一步,构建NFV报文转发系统,NFV报文转发系统由SF网络数据构建部件、SFC数据构建部件、报文转发控制部件、参数配置文件组成;所述OVS指OpenVSwitch,所述NFV指网络功能虚拟化,所述SF指服务功能,所述SFC指网络服务功能链;参数配置文件用于存储NFV报文转发系统的输入参数,包括NFV网络中OVS网桥名称、SF节点数据和SFC定义数据;SF节点数据包括NFV网络环境中SF节点数量N,每个SF节点的名称、SF节点网络接口MAC地址;SFC定义数据包括SFC的名字sfcname、SFC的服务IP地址sfcip、SFC中SF节点数量sfn、SFC中按顺序排列的SF节点名字序列sfname[i],i=1,2,…,sfn;SF网络数据构建部件与SFC数据构建部件、参数配置文件相连,它从参数配置文件中获取NFV网络环境中的SF节点数据,利用NFV网络环境中的网络工具获取SF节点网络接口的编号,构建SF网络数据链表;SF网络数据链表中1个元素存储1个SF节点的SF节点信息;SF网络数据链表元素包括3个域,分别为:SF节点的名称即sf_name,SF节点网络接口MAC地址即sf_mac、SF节点网络接口的编号即sf_id,并将SF网络数据链表输出给SFC数据构建部件;SFC数据构建部件与SF网络数据构建部件、报文转发控制部件、参数配置文件相连;它从SF网络数据构建部件接收SF网络数据链表,从参数配置文件读取SFC定义数据,根据SFC定义数据和SF网络数据链表构建SFC结构数据,SFC结构数据记录1个SFC的信息,包括SFC名字sfc_name、SFC服务IP地址sfc_ip、SFC中SF节点数量sfn、SFC中每个SF节点名称即sfc_sfname[1],…,sfc_sfname[j],…,sfc_sfname[sfn],SFC中每个SF节点MAC地址即sfc_sfmac[1],…,sfc_sfmac[j],…,sfc_sfmac[sfn]、SFC中每个SF节点接口编号即sfc_sfid[2],…,sfc_sfid[j],…,sfc_sfid[sfn],sfn为SF节点个数,j=1,2,…,sfn;报文转发控制部件与SFC数据构建部件相连,它从SFC数据构建部件接收SFC结构数据,根据SFC结构数据生成报文转发控制流表,控制NFV网络环境中的报文转发;第二步,将NFV报文转发系统部署在NFV的网络环境中,方法是:2.1在NFV网络运行的主机中启动NFV报文转发系统;2.2将NFV报文转发系统与NFV网络环境中的分类器相连;2.3将NFV报文转发系统与NFV网络环境中的NFV管理与编排器相连;2.4初始化NFV报文转发系统的参数配置文件,即将NFV管理与编排器中的OVS网桥名称、SF节点数据和SFC定义数据配置到参数配置文件中;第三步,SF网络数据构建部件从参数配置文件读取NFV网络中OVS网桥名称、每个SF节点的信息,获取每个SF节点接口在NFV网络环境中的接口编号,构建SF网络数据链表SF_list,将SF_list发送给SFC数据构建部件,具体方法是:3.1SF网络数据构建部件定义SF网络数据链表SF_list,并初始化SF_list为空;3.2从参数配置文件读取NFV网络中OVS网桥名称,设为ovs_name;从参数配置文件读取NFV网络中SF节点数量N;定义循环变量i1=1;3.3新建SF网络数据链表元素SF_i;从参数配置文件读取第i1个SF节点的名称,设为sfi_name;从参数配置文件读取第i1个SF节点的MAC地址,设为sfi_mac;令:SF_i->sf_name=sfi_name;SF_i->sf_mac=sfi_mac;其中SF_i->sf_name表示SF_i的sf_name,SF_i->sf_mac表示SF_i的sf_mac;3.4获取SF_i的接口在NFV网络中的编号,方法是:3.4.1获取网桥ovs_name上的NI个接口的接口编号及MAC地址,NI为ovs_name网桥上的接口数量:3.4.2从3.4.1步的输出中找到MAC地址与SF_i->sf_mac相同的接口,设该接口编号为i_id;3.4.3令SF_i->sf_id=i_id;3.5将SF_i加入SF_list;3.6令i1=i1+1,如果i1≤N,转步骤3.3,否则将SF_list输出给SFC数据构建部件,转第四步;第四步,SFC数据构建部件从SF网络数据构建部件接收SF_list,从参数配置文件读取SFC定义数据,根据SF_list和SFC定义数据构建SFC结构数据,并将SFC结构数据输出给报文转发控制部件,具体方法是:4.1初始化SFC结构数据sfc为空;4.2从SF网络数据构建部件接收SF_list,从配置文件读取SFC名字sfcname、SFC服务IP地址sfcip、SFC中SF节点数量sfn、按照报文正向转发先后顺序排列的SF名字sfname[i],i=1,2,…,sfn;4.3根据从配置文件读取的SFC定义数据为sfc赋值,令:sfc->sfc_name=sfcname;sfc->sfc_ip=sfcip;sfc->sfc_sfn=sfn;sfc->sfc_sfname[i]=sfname[i],i=1,2,…,sfn;4.4根据SF_list为sfc赋值,具体方法为:4.4.1定义循环变量i2=1;4.4.2从SF网络数据链表SF_list中找出sf_name域与sfname[i2]相同的元素,设为sf_i2;4.4.3令:sfc->sfc_sfmac[i2]=sf_i2->sf_mac;sfc->sfc_sfid[i2]=sf_i2->sf_id;4.4.4令i2=i2+1,如果i2≤sfn,转步骤4.4.2,否则将sfc输出给报文转发控制部件,转第五步;第五步,报文转发控制部件根据从SFC数据构建部件接收的SFC结构数据sfc,生成控制报文转发的正向传输流表和反向传输流表,具体方法是:5.1报文转发控制部件生成正向传输流表并配置OVS以控制报文正向传输;具体方法为:5.1.1定义循环变量i3,令i3=1;5.1.2根据sfc和i3生成正向传输流表flow1_i3:flow1_i3=”ip,in_port=sfc->sfc_sfid[i3],nw_dst=sfc->sfc_ip actions=output:sfc->sfc_sfid[i3+1]”;表示将节点接口编号为sfc->sfc_sfid[i3]的SF节点输出的、协议号为ip并且目的IP地址为sfc->sfc_ip的报文转发至SF节点接口编号为sfc->sfc_sfid[i3+1]的SF节点;5.1.3使用OVS提供的ovs-ofctl命令配置OVS:ovs-ofctladd-flow ovs_name flow1_i3,该命令为OVS网桥ovs_name配置报文转发流表flow1_i3;5.1.4令i3=i3+1,如果i3<sfn,转步骤5.1.2,否则转步骤5.2;5.2报文转发控制部件生成反向传输流表并配置OVS以控制报文反向传输;具体方法为:5.2.1定义循环变量i4,令i4=sfn;5.2.2根据sfc和i4生成反向传输流表flow2_i4:flow2_i4=”ip,in_port=sfc->sfc_sfid[i4],nw_src=sfc->sfc_ip actions=output:sfc->sfc_sfid[i4-1]”;表示将SF节点接口编号为sfc->sfc_sfid[i4]的SF节点输出的、协议号为ip并且源IP地址为sfc->sfc_ip的报文转发至SF节点接口编号为sfc->sfc_sfid[i4-1]的SF节点;5.2.3使用OVS提供的ovs-ofctl命令配置OVS:ovs-ofctladd-flow ovs_name flow2_i4,该命令为OVS网桥ovs_name配置报文转发流表flow2_i4;5.2.4令i4=i4-1,如果i4>1,转步骤5.2.2,否则转第六步;第六步,报文转发控制部件收发报文并完成NFV报文转发,具体方法为:6.1报文转发控制部件从分类器和各个SF节点接收报文,获取报文的协议号、输入端口、源IP地址、目的IP地址;如果报文的协议号不是ip,转步骤6.4;如果报文的协议号是ip,转步骤6.2;6.2从流表flow1_1,flow1_2,…,flow1_i3,…,flow1_sfn-1这sfn-1个正向传输流表中找出in_port与报文输入端口相同并且nw_dst与报文目的IP地址相同的流表,如果没有找到,转步骤6.3;如果找到,设为flow1_j3;将报文转发给第j3+1个SF节点,转步骤6.1,继续接收报文;6.3从流表flow2_sfn,flow2_sfn-1,…,flow2_i4,…,flow2_2这sfn-1个反向传输流表中找出in_port与报文输入端口相同并且nw_src与报文源IP地址相同的流表,如果没有找到,转步骤6.4;如果找到,设为flow2_j4,将报文转发给第j4-1个SF节点,转步骤6.1,继续接收报文;6.4将报文转发至报文目的IP地址所在节点,转步骤6.1,继续接收报文。
2.如权利要求1所述的一种基于OVS的NFV报文转发方法,其特征在于SF节点网络接口的编号利用NFV网络环境中的网络工具ovs-ofctl获取。
3.如权利要求1所述的一种基于OVS的NFV报文转发方法,其特征在于3.4.1步获取网桥ovs_name上的NI个接口的接口编号及MAC地址的方法是通过OVS提供的命令ovs-ofctlshow ovs_name。
4.如权利要求1所述的一种基于OVS的NFV报文转发方法,其特征在于6.2步如果找到了多个in_port与报文输入端口相同并且nw_dst与报文目的IP地址相同的正向传输流表,则将第一个设为flow1_j3;6.3步如果找到了多个in_port与报文输入端口相同并且nw_src与报文源IP地址相同的反向传输流表,则将第一个设为flow2_j4。



