1.一种基于动作集树的OpenFlow流表聚合方法,该方法首先根据掩码将原始OpenFlow流表中的所有流表项划分至聚合流表内不同的元组中,然后在每个元组中不断选取匹配字段汉明距离为1的两条流表项进行合并,并将合并后的新流表项根据其掩码放置到对应的元组中继续聚合,直到无法聚合为止;在上述合并过程中,将所有流表项的动作集生成相应的动作集树,用于指导数据包的转发处理操作,其特征在于,基于Trie树结构的动作集树,非叶子节点记录流表项合并时的比特位置信息,而叶子节点保存原始流表项的动作集和优先级,以用于数据包成功匹配聚合表项后确定对应的动作集,具体包括以下操作:(1)OpenFlow分组转发操作,即每个到达OpenFlow交换机的数据包,通过查找流表匹配对应的流表项,进而根据其中的动作集进行转发;当一个数据包成功匹配SRAM子流表后,若其所属的流进入活跃状态,则需对该数据包所匹配表项进行转存操作;(2)OpenFlow流表插入操作,即当OpenFlow交换机收到SDN控制器下发的带ADD命令的Flow_Mod消息时,需根据消息内容新建一条流表项,然后将其在OpenFlow子流表中进行聚合,并构建相应的动作集树;
(3)OpenFlow流表删除操作,当OpenFlow交换机收到SDN控制器下发的带DELETE命令的Flow_Mod消息后,需删除对应的流表项;若待删除表项为聚合表项,则需对其进行拆分还原,再删除相应的流表项。
2.根据权利要求1所述的一种基于动作集树的OpenFlow流表聚合方法,其特征在于,所述OpenFlow分组转发操作,具体包括以下步骤:首先解析其首部字段,并提取其匹配字段,然后查找TCAM子流表;若查找成功,则根据匹配TCAM子表项中的索引值读取对应的DRAM子表项,进而查找其中的动作集树,最后按照找到的动作集转发处理数据包,并更新DRAM子表项中的计数器与时间戳内容字段;若TCAM查找失败,则进一步查找SRAM子流表;若查找成功,则同样根据对应的DRAM子表项进行数据包转发处理和内容字段更新,若该数据包所属的流进入活跃状态,则将该流从SRAM子流表转存到TCAM子流表;若TCAM和SRAM子流表查找均失败,则意味着该数据包属于一条新流,于是将该数据包信息封装成packet‑in消息发送给控制器,以请求控制器下发对应的流规则。
3.根据权利要求1所述的一种基于动作集树的OpenFlow流表聚合方法,其特征在于,所述OpenFlow流表项转存操作,其转存思想如下:首先获取TCAM中流表项数量,进而逐条对比其中每条流表项的活跃度,找出活跃度最低的流表项作为待交换的流表项,并将待交换流表项转存至SRAM子流表,再将当前变活跃的流表项转存至TCAM子流表。
4.根据权利要求1所述的一种基于动作集树的OpenFlow流表聚合方法,其特征在于,所述OpenFlow流表插入操作,具体包括以下步骤:首先根据该消息内容新建一条新流表项,然后将其在TCAM子流表中进行聚合;若聚合成功,则将所生成聚合表项的匹配字段与内容字段分别存入TCAM与DRAM子流表;若聚合失败,则将其在SRAM子流表中进一步聚合,否则同样将聚合所生成表项对应的匹配字段与内容字段分别存入SRAM与DRAM子流表中;若TCAM和SRAM子流表聚合均失败,则将其匹配字段与内容字段分别存入SRAM与DRAM子流表中。
5.根据权利要求1所述的一种基于动作集树的OpenFlow流表聚合方法,其特征在于,所述OpenFlow流表聚合操作,具体包括以下步骤:首先根据其掩码先后在TCAM和SRAM子流表中查找与其汉明距离为1的流表项;若查找成功,则构建新的动作集树,即新建一个根节点,并将两条流表项匹配字段不同的比特位置bp存入其中,然后再将两条流表项对应的动作集树作为根节点的左右孩子,进一步生成合并后的新表项,同时删除被合并的流表项;然后继续在流表中寻找满足聚合条件的流表项,直到新生成的流表项无法再合并;最后,输出聚合结果,即是否进行聚合,以及聚合后的流表项。
6.根据权利要求1所述的一种基于动作集树的OpenFlow流表聚合方法,其特征在于,所述OpenFlow流表删除操作,具体包括以下步骤:首先提取流规则中流的匹配字段,然后在TCAM子流表中查找待删除表项;若查找成功,如果其匹配的TCAM子表项为非聚合表项,那么先根据其中的索引值读取对应的DRAM子表项并将其删除,然后再删除TCAM子表项即可,否则进入OpenFlow流表项拆分流程,流表项拆分结束后,利用待删除表项中的索引值读取对应的DRAM子表项,并将其进行删除;若TCAM查找失败,则进一步查找SRAM子流表,若查找成功,则同样通过上述方法进行流表项删除与流表项拆分操作;若TCAM和SRAM子流表查找均失败,则向控制器发送error消息报告流表项删除失败结果。
7.根据权利要求1所述的一种基于动作集树的OpenFlow流表聚合方法,其特征在于,所述OpenFlow流表项拆分操作,具体包括以下步骤:首先根据聚合流表项中的索引值,定位其对应DRAM子表项中的动作集树,然后从根节点开始往下拆分动作集树,直至得到待删除流表项所对应的叶子节点为止,进一步除待删除流表项外,将拆分得到的所有流表项重新插入到流表中,并移除聚合流表项。