一种网络交换芯片可识别流表的智能匹配方法
技术领域
本发明涉及网络通信领域,特别涉及一种网络交换芯片可识别流表的智能匹配方法。
背景技术
SDN(软件定义网络)架构具有控制面与转发面分离、开放的可编程接口、集中化的网络控制及网络业务的自动化应用程序控制等特征,越来越受到行业所推崇。 其中,Openflow是SDN网络架构中标准化南向接口的一种。在Openflow协议中,Openflow控制器通过标准的消息接口与交换机通信,协议中定义了流表项中支持的各种match匹配字段以及actions动作字段,这些字段存在于流表中,当报文从不同的端口进来,设备需要查找对应的流表,匹配到流表项后便可执行该条流表项所指定的动作或指令,如从哪个口出去,是否需要丢弃或将报文送到控制器等。目前在实际应用中,由于交换芯片未实现流表统一的标准化的接口,从而导致用户下发的流表不能与芯片流表之间一一映射,常常出现芯片无法识别用户下发流表的表ID,即使表ID被识别了也会出现无法将匹配信息或动作信息对应至芯片流表的情况。
发明内容
本发明为了解决上述技术问题,提供了一种网络交换芯片可识别流表的智能匹配方法。
一种网络交换芯片可识别流表的智能匹配方法,所述方法应用于至少由控制器及网络设备交换机组成的Openflow网络中,具体包括如下步骤:
S1、网络设备交换机分析控制器下发的Openflow侧流表单个流表项的表ID,若表ID为0则进入步骤S2,若表ID不为0则进入步骤S5;
S2、判断流表动作信息是否带GOTO_TABLE跳转指令,若流表动作信息带GOTO_TABLE跳转指令则进入步骤S3,若流表动作信息不带GOTO_TABLE跳转指令 则进入步骤S4;
S3、保存当前流表的匹配信息和动作信息,正向查找Openflow侧流表,判断该流表是否存在,若不存在则不处理,若存在则转入S2;
S4、判断流表的动作信息是否含有输出、丢弃或者上送控制器的指令; 若是则进入S9;若否则不处理,提示异常;
S5、判断流表动作信息是否带GOTO_TABLE跳转指令,若流表动作信息带 GOTO_TABLE跳转指令则进入步骤S7,若流表动作信息不带GOTO_TABLE跳转指令则进入步骤S6;
S6、保存流表的匹配信息和动作信息,反向查找Openflow侧流表,判断该流表是否存在,若存在则继续步骤S6,若不存在则转至步骤S4;
S7、保存流表的匹配信息和动作信息,反向查找Openflow侧流表,判断该流表是否存在,若存在则继续步骤S7,若不存在则进入S8;
S8、保存流表的匹配信息和动作信息,正向查找Openflow侧流表,判断该流表是否存在,若不存在则不处理,若存在则进一步判断流表动作信息是否含有输出、丢弃或上送控制器的指令,若否则继续S8,若是则进入S9;
S9、根据流表链匹配信息的不同将流表匹配至具体的交换芯片侧流表,所述交换芯片侧流表为ASIC流表。
该匹配方法主要针对控制器下发的Openflow协议侧单个流表项的表ID,以及动作信息中的GOTO_TABLE跳转指令进行分析,从而决定是否需要映射交换芯片侧流表处理,一旦确定需要映射则根据Openflow协议侧流表中的匹配信息映射至对应的交换芯片侧流表处理。该匹配方法通用性强,使用户下发流表与交换芯片侧流表之间可智能匹配,有效避免了信息无法识别等情况的发生。
进一步的,步骤S9包括如下子步骤:
S91、获取流表链的所有的匹配信息和动作信息,若匹配信息只带有二层则进入S92;若匹配信息只带有三层则进入步骤S93;若匹配信息带隧道ID则进入步骤S94;若匹配信息带MPLS标签则进入步骤S95;若匹配信息均不符合上述几种情况则使用交换芯片VLAN/ACL流表进行处理,一般而言,交换芯片的ACL流表可以处理上述几种芯片流表无法处理的流表;
S92、可使用交换芯片VLAN/BRIDGE流表处理;
S93、可使用交换芯片VLAN/路由流表处理;
S94、可使用交换芯片Overlay流表处理;
S95、可使用交换芯片MPLS流表处理。
进一步的,步骤S3及步骤S8中通过正向查找Openflow侧流表,获取GOTO-TABLE跳转指令中的ID值对应的流表,来判断GOTO-TABLE跳转指令中的ID值对应的流表是否存在。若根据GOTO-TABLE跳转指令中的ID值找到对应的流表则判断GOTO-TABLE跳转指令中的ID值对应的流表存在,若未找到对应流表则判断GOTO-TABLE跳转指令中的ID值对应的流表不存在。
进一步的,步骤S6及步骤S7中通过反向查找Openflow侧流表,获取GOTO-TABLE跳转指令到当前表ID对应的流表,从而判断GOTO-TABLE跳转指令到当前表ID对应的流表是否存在。即先根据GOTO-TABLE跳转指令查找到GOTO-TABLE跳转指令中的ID值,再通过GOTO-TABLE跳转指令中的ID值查找表ID相符的流表
进一步的,所述流表由若干流表项组成,所述Openflow侧流表及流表项数据结构采用数组链表方式维护。
进一步的,所述交换芯片侧流表及其流表项数据结构采用平衡二叉查找树结构维护。
进一步的,所述表ID可以为0 也可以不为0,若无指定则默认为0。
进一步的,所述流表处理完成后需将匹配信息和动作信息进行清空处理。
上述技术方案中的流表项可以通过动作信息中的GOTO-TABLE跳转指令跳至下一条流表,但GOTO-TABLE跳转指令中的ID值必须大于表ID,当然也可以不通过GOTO-TABLE跳转指令转至其他流表。此外,维护一定的数据结构包括所有流表链中的匹配信息和动作信息以及匹配信息和动作信息使用的带有各类型的数据结构存储。
有益技术效果:
与现有技术相比较,本发明公开的一种网络交换芯片可识别流表的智能匹配方法涵盖了所有条件下的匹配情况,使用户下发流表与芯片流表之间可智能匹配,实现了SDN架构中控制面与转发面之间的分离,利于Openflow流表实现硬件化。
附图说明
图1为网络设备交换机与Openflow控制器的连接示意图。
图2为流表中table id为0的处理流程图。
图3为流表中table id不为0,且actions中不带goto table处理流程图。
图4为流表中table id 不为0,且actions带goto table处理流程图。
图5为流表匹配至具体交换芯片ASIC流表的实现方法流程图。
具体实施方式
下面结合附图对本发明的较佳实施例进行详细阐述,以使本发明的优点和特征更易被本领域技术人员理解,从而对本发明的保护范围作出更为清楚的界定。
实施例1:
本实施例提供了一种网络交换芯片可识别流表的智能匹配方法,该方法应用于至少由控制器及网络设备交换机组成的Openflow网络中,具体包括如下步骤:
S1、网络设备交换机分析控制器下发的Openflow侧流表单个流表项的表ID,若表ID为0则进入步骤S2,若表ID不为0则进入步骤S5;
S2、判断流表动作信息是否带GOTO_TABLE跳转指令,若流表动作信息带GOTO_TABLE跳转指令则进入步骤S3,若流表动作信息不带GOTO_TABLE跳转指令 则进入步骤S4;
S3、保存当前流表的匹配信息和动作信息,正向查找Openflow侧流表,判断该流表是否存在,若不存在则不处理,若存在则转入S2;
S4、判断流表的动作信息是否含有输出、丢弃或者上送控制器的指令; 若是则进入S9;若否则不处理,提示异常;
S5、判断流表动作信息是否带GOTO_TABLE跳转指令,若流表动作信息带 GOTO_TABLE跳转指令则进入步骤S7,若流表动作信息不带GOTO_TABLE跳转指令则进入步骤S6;
S6、保存流表的匹配信息和动作信息,反向查找Openflow侧流表,判断该流表是否存在,若存在则继续步骤S6,若不存在则转至步骤S4;
S7、保存流表的匹配信息和动作信息,反向查找Openflow侧流表,判断该流表是否存在,若存在则继续步骤S7,若不存在则进入S8;
S8、保存流表的匹配信息和动作信息,正向查找Openflow侧流表,判断该流表是否存在,若不存在则不处理,若存在则进一步判断流表动作信息是否含有输出、丢弃或上送控制器的指令,若否则继续S8,若是则进入S9;
S9、根据流表链匹配信息的不同将流表匹配至具体的交换芯片侧流表,交换芯片侧流表为ASIC流表。
其中,步骤S9包括如下子步骤:
S91、获取流表链的所有的匹配信息和动作信息,若匹配信息只带有二层则进入S92;若匹配信息只带有三层则进入步骤S93;若匹配信息带隧道ID则进入步骤S94;若匹配信息带MPLS标签则进入步骤S95;若匹配信息均不符合上述几种情况则使用交换芯片VLAN/ACL流表进行处理,一般而言,交换芯片的ACL流表可以处理上述几种芯片流表无法处理的流表;
S92、可使用交换芯片VLAN/BRIDGE流表处理;
S93、可使用交换芯片VLAN/路由流表处理;
S94、可使用交换芯片Overlay流表处理;
S95、可使用交换芯片MPLS流表处理。
上述流表由若干流表项组成,流表项可以通过动作信息中的GOTO-TABLE跳转指令跳至下一条流表,但前提是GOTO-TABLE跳转指令中的ID值必须大于表ID,当然也可以不通过GOTO-TABLE跳转指令转至其他流表。一般而言,表ID可以为0 也可以不为0,若无指定则默认为0。 在上述流表匹配方法中,Openflow侧流表及其流表项数据结构采用数组链表方式维护,而交换芯片侧流表及其流表项数据结构采用平衡二叉查找树结构维护。维护一定的数据结构包括所有流表链中的匹配信息和动作信息以及匹配信息和动作信息使用的带有各类型的数据结构存储。上述流表处理完成后需将匹配信息和动作信息进行清空处理,方可进入下一流表的处理程序。
实施例2:
本实施例与实施例1类似,进一步的,步骤S3及步骤S8中均是通过正向查找Openflow侧流表,获取GOTO-TABLE跳转指令中的ID值对应的流表,来判断GOTO-TABLE跳转指令中的ID值对应的流表是否存在。若根据GOTO-TABLE跳转指令中的ID值找到对应的流表则判断GOTO-TABLE跳转指令中的ID值对应的流表存在,若未找到对应流表则判断GOTO-TABLE跳转指令中的ID值对应的流表不存在。
而步骤S6及步骤S7中均是通过反向查找Openflow侧流表,获取GOTO-TABLE跳转指令到当前表ID对应的流表,从而判断GOTO-TABLE跳转指令到当前表ID对应的流表是否存在。根据GOTO-TABLE跳转指令查找到GOTO-TABLE跳转指令中的ID值,再通过GOTO-TABLE跳转指令中的ID值查找表ID相符的流表。
上面结合附图对本发明的实施方式作了详细说明,但是本发明并不限于上述实施方式,在本领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下作出各种变化。