1.一种OpenFlow流表深度聚合方法,该方法构建内容表项树聚合动作集不同的流表项,保证分组转发语义的正确性。同时,表项聚合不仅针对匹配字段之间汉明距离为1的情形,还扩展到汉明距离为2,从而实现双重比特合并,显著提高聚合程度。考虑到不同表项聚合顺序可能生成不同数量的聚合表项,该方法首先预判聚合程度大小确定表项聚合顺序,即优先聚合匹配字段汉明距离为1还是为2的流表项,然后执行双重比特合并,以进一步优化聚合效果。
2.根据权利要求1所述的一种OpenFlow流表深度聚合方法,其特征在于,所述基于二叉树结构的动作集树,其设计如下:非叶子节点记录表项聚合时的合并比特位置,而叶子节点存储原始表项的内容字段(含动作集),以用于数据包成功匹配聚合表项后确定对应的动作集。
3.根据权利要求1和2所述的一种OpenFlow流表深度聚合方法及快速查找系统,具体包括以下操作:a、OpenFlow分组转发操作
每个到达OpenFlow交换机的数据包,通过查找匹配子流表中对应的流表项,进而根据其匹配的流表项中对应的动作集进行转发。
b、OpenFlow流表插入操作
当OpenFlow交换机收到SDN控制器下发的带ADD命令的Flow_Mod消息时,需根据消息内容新建一条流表项,将其放入匹配子流表中进行聚合,若聚合成功,则直接更新内容子流表中对应表项的内容表项树。若聚合失败,则将该流表项放入聚合加速备份表中进一步聚合,并构建相应的内容表项树(含动作集)。
c、OpenFlow流表删除操作
当OpenFlow交换机收到SDN控制器下发的带DELETE命令的Flow_Mod消息后,需删除对应的流表项;若待删除表项为聚合表项,则需根据其匹配字段查找对应内容表项树,直至成功找到待删除表项对应的叶子节点,最后将其删除即可。
4.根据权利要求3所述的OpenFlow流表深度聚合方法及快速查找系统,其特征在于,所述OpenFlow分组转发操作,具体包括以下步骤:首先解析其首部字段,并提取其匹配字段,然后查找匹配子流表;
若查找成功,查找成功则根据匹配表项的索引值,定位到内容子流表中对应的内容表项树,并查找对应叶子节点;
若查找成功,则获取正确的动作集,对数据包进行转发处理,并更新该内容表项树中对应表项的计数器与时间戳等内容字段;
若在匹配子流表中查找失败,则意味着该数据包属于一条新流,OpenFlow交换机将把该数据包的头部信息打包成packet‑in消息上交给控制器,以请求控制器下发新的流规则。
5.根据权利要求3所述的OpenFlow流表深度聚合方法及快速查找系统,其特征在于,所述OpenFlow流表插入操作,具体包括以下步骤:首先根据该消息内容新建一条新流表项,然后执行流表项聚合操作;
首先查找匹配子流表中包含其的流表项,若查找成功,则定位包含其流表项对应的内容表项树,获取对应内容表项树,并查找该内容表项树中的对应位置,将该流表项作为对应叶子节点插入;
否则根据掩码在聚合加速备份表中定位对应元组,然后查找可与该待聚合流表项聚合的流表项;
若查找成功,则执行内容表项树构建过程操作,生成一条新的流表项,并在匹配子流表和聚合加速备份表中删除被合并的流表项;
若查找失败,则将聚合表项的匹配字段分别存入匹配子流表和聚合加速备份表;
若查找都失败,即聚合失败,则将该流表项的匹配字段存入匹配子流表和聚合加速备份表,内容字段存入内容子流表。
6.根据权利要求5所述的OpenFlow流表插入操作,其特征在于,所述内容表项树构建操作,具体包括以下步骤:首先获取获取内容表项树层数的上限值threshold及这两条流表项对应内容表项树最高那棵的层数tier(只含一个动作集则默认树高为1);
若两者匹配字段之间汉明距离为1且tier+1小于设定的内容表项树层数的上限值,则将两条流表项进行合并;
否则,判断tier+2是否小于设定的内容表项树层数的上限值,若小于则将两条流表项进行合并;
若匹配字段汉明距离为2,则新建一个根节点,并将两条流表项匹配字段中第一个不同的比特位置bp1存入其中。然后,将两条流表项匹配字段中第二个不同的比特位置bp2作为根节点的左右孩子。最后,将两条流表项对应的内容表项树作为对应左右孩子的孩子节点;
然后,查找元组中可被包含于新聚合表项的其他表项。若查找成功,则将被包含的流表项动作集存入聚合表项内容表项树对应的叶子节点中,同时进一步生成新的内容表项树;
若匹配字段汉明距离不为2,则新建根节点,记录两条流表项匹配字段中不同的比特位置bp,并将两条流表项对应的内容表项树作为根节点的左右孩子节点。
7.根据权利要求3所述的OpenFlow流表深度聚合方法及快速查找系统,其特征在于,所述OpenFlow流表删除操作,具体包括以下步骤:首先提取流规则中流的匹配字段,然后在主匹配流表中查找待删除表项;
若查找成功,且匹配表项为聚合表项,则则先定位聚合表项对应的内容表项树;
然后,根据待删除表项的匹配字段查找内容表项树,若成功找到待删除表项对应的叶子节点,删除该叶子节点并定位其父节点;
若该父节点有孩子节点,则需删除该节点,同时更新匹配子流表和聚合加速备份表中对应的匹配表项;
不断回溯删除节点的父节点,重复上述的操作,直至其无孩子节点为止;
若在匹配子流表中查找待删除表项查找成功,且匹配表项不为聚合表项,则根据待删除表项的索引值删除内容子流表中对应的内容表项,删除匹配子流表和聚合加速备份表中的匹配表项;
若在匹配子流表中查找待删除表项失败,则向控制器发送error消息,报告流规则删除失败结果。