CN115510287A - 一种OpenFlow大规模流表聚合与加速查找方法 - Google Patents

一种OpenFlow大规模流表聚合与加速查找方法 Download PDF

Info

Publication number
CN115510287A
CN115510287A CN202111286196.1A CN202111286196A CN115510287A CN 115510287 A CN115510287 A CN 115510287A CN 202111286196 A CN202111286196 A CN 202111286196A CN 115510287 A CN115510287 A CN 115510287A
Authority
CN
China
Prior art keywords
flow table
flow
openflow
entry
sub
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202111286196.1A
Other languages
English (en)
Inventor
熊兵
周浩
曾振国
袁月
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Changsha University of Science and Technology
Original Assignee
Changsha University of Science and Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Changsha University of Science and Technology filed Critical Changsha University of Science and Technology
Priority to CN202111286196.1A priority Critical patent/CN115510287A/zh
Publication of CN115510287A publication Critical patent/CN115510287A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90339Query processing by using parallel associative memories or content-addressable memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明设计了一种基于动作集树的流表聚合方法,其根据掩码将原始OpenFlow流表划分成若干个元组,然后通过构建或合成动作集树合并元组内外动作集可能不同的流表项。当流表进行插入或删除时,只聚合或拆分相关表项,以减小流表更新开销。进一步,本发明提供了一种OpenFlow大规模流表加速查找方法。该方法首先将流表项的内容字段分离出来采用DRAM存储,然后采用上述基于动作集树的流表聚合方法压缩流表的匹配字段,以使TCAM能够容纳绝大多数甚至所有流表项。当聚合后的流表仍超出TCAM容量时,将多数的活跃流存入TCAM,只有少数的空闲流存入SRAM,从而使大部分数据包能够直接命中TCAM实现快速转发。

Description

一种OpenFlow大规模流表聚合与加速查找方法
技术领域
本发明涉及一种基于动作集树的流表聚合方法,以及一种OpenFlow大规模流表聚合与加速查找方法。
背景技术
软件定义网络(Software-Defined Networking,SDN)作为一种创新网络架构,将逻辑控制功能从数据转发设备中解耦出来,构建逻辑上集中的SDN控制平面,进而向上层应用提供统一编程接口,从而大大提升网络的开放性、灵活性和可编程能力,成为迈向互联网未来最有前景的发展方向之一。SDN控制平面负责构建全局网络视图并制定流规则,进而通过以OpenFlow为代表的南向接口协议下发给数据平面的交换机,以指导网络数据包的转发行为。OpenFlow将各层网络协议首部的关键字段作为流表匹配字段,并引入通配符实现任意字段的组合,以灵活定义和管理不同粒度的网络流。由于TCAM存储器支持带通配符的三态数据查询,且具有并行查找整个数据集的能力,能在一个时钟周期内输出查找结果,因此OpenFlow交换机通常采用TCAM存储流表,以实现快速通配查找。
图1展示了OpenFlow交换机的数据包基本处理过程,其工作原理如下:
(1)当OpenFlow交换机接收到一个数据包p时,首先解析提取其各层协议首部中的重要字段,计算其对应的流标识符fid;(2)利用流标识符fid查找OpenFlow流表,即并行匹配TCAM存储器中的所有流表项;(3)若流表查找成功,则返回优先级最高的匹配表项,然后执行相应的动作集。(4)若流表查找失败,则OpenFlow交换机以Packet-in消息的形式发送流安装请求给控制器。控制器再根据全局网络视图生成对应的流规则,然后下发给交换机,并安装到OpenFlow流表中,用于转发处理相应流中的后续数据包。
在OpenFlow交换机中,TCAM存储器成本高,集成度低,容量有限。当SDN部署在大规模网络中,网络并发流数量众多,OpenFlow流表项数量显著增多。同时,随着OpenFlow协议版本的持续演进,流表项的匹配字段越来越多,导致单条流表项的宽度不断增大。这两方面产生的乘法效应导致流表规模迅速增大,使得TCAM无法满足OpenFlow大规模流表的存储空间需求。目前为止,缓解流表存储问题的主流方案是采用SRAM协同TCAM存储流表。然而,SRAM采用地址寻址方式,往往通过元组空间搜索法实现通配查找,查找速度慢。对于OpenFlow大规模流表,SRAM存储的流表项数量多,查找开销大,容易产生数据包转发性能瓶颈。此外,最有前景的方法是采用流表聚合将多条相近的流表项合并成一条流表项,使得TCAM能够容纳绝大多数甚至所有OpenFlow流表项,具体如下:
如图2所示的【方案一】是一种非前缀流表聚合方法Bit Weaving。该方法首先根据流表项匹配字段的比特信息划分正交分组。然后,采用比特交换与比特合并两种技术,将单个分组内的流表项用前缀形式表示,并采用前缀聚合算法合并流表项。最后,通过比特还原将流表项的匹配字段恢复成原始的比特序列。
方案一的聚合过程如下:(1)首先将流表项按匹配字段所包含通配位的数量递增排列,并依次对两条相邻流表项的掩码进行与运算,以判断分组中是否引入交叉现象,从而划分正交分组;(2)通过交换流表项匹配字段的比特顺序,将各分组内流表项的匹配字段转换为前缀形式;(3)通过加权一维前缀聚合算法,合并分组内汉明距离为1且动作集相同的流表项;(4)根据比特交换顺序还原流表项,得到流表项匹配字段的原始比特序列,从而完成OpenFlow流表聚合过程。
如图3所示的【方案二】是一种快速的非前缀流表聚合方法FFTA。该方法根据流表项匹配字段的比特信息划分正交分组,然后在各分组内构建二叉搜索树,迭代地对每个分组进行聚合,以使TCAM能够存储更多流表项。同时,该方法使用改进的ORTC聚合算法,取消了传统聚合方法中将非前缀转换成前缀的比特交换步骤,进而提升了流表的聚合速度。
方案二的聚合过程过程如下:(1)首先将所有流表项按照匹配字段所包含通配符的数量进行递增排序,然后根据各流表项之间的交叉关系,进行正交分组;(2)针对每个分组,计算分组中所有流表项的最近公共祖先(Least CommonAncestors,LCA),并将其设置为二叉搜索树的根结点;(3)根据通配符的位置从前至后依次分解非叶子节点,不断向下扩展,从而将分组中的所有流表项都通过叶子节点表示,以构建二叉搜索树;(4)利用改进的ORTC聚合算法对二叉搜索树进行缩减;(5)从下至上逐层查找树中汉明距离为1且动作集相同的两个结点进行合并,最终得到规模小且转发语义一致的流表。
但上述已有的流表聚合方法分别存在如下缺点:
【方案一】采用比特交换和比特合并两种技术,并使用加权一维前缀聚合算法使分组中的前缀表项最小化。然而,该前缀聚合算法操作复杂,聚合开销大,且各分组的聚合时间将随其中的流表项数量呈线性增长。当OpenFlow流表规模庞大时,流表聚合时间长,严重影响分组转发性能。此外,当流表项发生更新时,该方法需要对整个流表进行重新聚合,更新开销极大。
【方案二】根据流表项之间的交叉关系,将流表划分成多个正交分组,进而对每个分组构建二叉搜索树,并利用改进的ORTC算法对树进行缩减。然而,该方法只能聚合单个分组中的流表项,聚合机会不多。同时,为确保数据包的正确转发,该方法要求待合并的流表项拥有相同的动作集,合并条件严格,聚合程度低。此外,当OpenFlow流表进行更新时,该方法需要重构二叉搜索树,流表更新速度慢。
基于以上,本发明提供一种基于动作集树的流表聚合方法和一种OpenFlow大规模流表聚合与加速查找方法。
发明内容
本发明要解决的技术问题是设计一种流表聚合方法,然后基于本文所提出的流表聚合方法提供一种OpenFlow大规模流表加速查找方法,以实现数据包的快速流表查找。
为了解决上述技术问题,本发明采用的技术方案是:一种OpenFlow大规模流表聚合与加速查找方法,主要包括一种基于动作集树的流表聚合方法和一种OpenFlow大规模流表加速查找架构。
所述基于动作集树的流表聚合方法思想如下:
(1)首先根据掩码将原始OpenFlow流表中的所有流表项划分至聚合流表内不同的元组中;
(2)在每个元组中不断选取匹配字段汉明距离为1的两条流表项进行合并,并将合并后的新流表项根据其掩码放置到对应的元组中继续聚合,直到无法聚合为止。
在上述合并过程中,将所有流表项的动作集生成相应的动作集树,用于指导数据包的转发处理操作。
当流表插入一条新表项时,首先将其放入对应的元组,然后执行上述流表项聚合过程,即可完成流表聚合的更新。若删除一条流表项,首先查找定位对应的聚合表项,然后对其进行必要的拆分,即逆向分解待删除表项参与的聚合过程,最后删除该表项即可。总之,每次流表更新只需更新相关表项,而无需重新聚合整个流表。因此,本专利所提的流表聚合方法不仅聚合程度高,而且具有更新速度快的优点。
上述流表项聚合过程允许被合并的流表项拥有不同的动作集,以放宽聚合条件,增加合并机会。为确保数据包处理语义的正确性,本专利采用Trie树结构为每条聚合表项构建一棵动作集树。在该动作集树中,非叶子节点记录流表项合并时的比特位置信息,而叶子节点保存原始流表项的动作集和优先级,以用于数据包成功匹配聚合表项后确定对应的动作集。
当流表更新时,需更新对应的动作集树。若插入一条流表项,则执行流表项聚合过程,并在每次合并流表项时,将原有的两棵动作集(树)组合成一棵新的动作集树。若删除一条流表项,首先找出对应的聚合表项,定位对应的动作集树,然后从根节点开始沿着待删除流表项的动作集叶子节点方向进行拆分,同时利用非叶子节点所保存的比特位置信息还原流表项及其动作集(树),并存入流表中,最后执行流表项删除操作。
所述OpenFlow大规模流表加速查找架构设计思路如下:
该架构首先将流表项中的内容字段分离出来采用DRAM存储,有效缓解TCAM存储资源紧张的问题。针对流表项的匹配字段,采用上述基于动作集树的流表聚合方法进行压缩,使TCAM能够容纳绝大部分甚至整个OpenFlow流表。若TCAM仍无法完全容纳聚合后的流表,则将其中的流表项按照活跃度分成两部分,形成TCAM子流表和SRAM子流表,分别存储活跃流和空闲流,以使绝大部分数据包能直接命中TCAM。
本发明提供的一种OpenFlow大规模流表聚合与加速查找方法,至少具有以下增益效果:
1、本发明提供的一种基于动作集树的流表聚合方法,将原始流表中的所有流表项按掩码划分为若干个元组,然后合并每个元组中匹配字段汉明距离为1的流表项,并构建动作集树保存合并流表项的动作集,聚合条件宽松。进一步,将合并后的流表项通过掩码重定向到对应的元组中,并继续与该元组中的流表项进行聚合。如此循环聚合,直到新聚合表项所在元组中没有能与之聚合的流表项为止,聚合效果好。当流表进行插入或删除时,只聚合或拆分相关的流表项,流表更新速度快。
2、本发明提供的OpenFlow大规模流表加速查找方法,首先将流表项的内容字段分离出来采用DRAM存储,然后采用上述基于动作集树的流表聚合方法压缩流表的匹配字段,以使TCAM能够容纳绝大多数甚至所有流表项。进一步,当聚合后的流表仍超出TCAM容量时,将多数的活跃流存入TCAM,只有少数的空闲流存入SRAM,从而使大部分数据包能够直接命中TCAM实现快速转发。
3、本发明相比现有技术的方案一,针对方案一存在的缺陷,首先根据掩码将原始OpenFlow流表划分成若干元组,进而直接对每个元组中汉明距离为1的流表项进行合并,而无需交换比特序列进行前缀聚合,以降低流表聚合开销。同时,当流表进行插入或删除时,只聚合或拆分相关的流表项,以实现流表的快速更新。
4、本发明相比现有技术的方案二,针对方案二存在的缺陷,通过构建动作集树可合并动作集可能不同的流表项,并将合并后的流表项根据其掩码重定位到其它元组中继续聚合,以显著增加聚合机会。对于流表插入或删除一条表项,只需对相关表项进行聚合或拆分,而无需重构动作集树,以显著减小流表更新开销。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可根据这些附图获得其他的附图。
图1为OpenFlow交换机的数据包基本处理过程示意图;
图2为现有技术Bit Weaving流表聚合方法示意图;
图3为现有技术FFTA流表聚合方法实例图;
图4为本发明实施提供的流表聚合方法中的流表项聚合过程图;
图5为本发明实施提供的基于Trie树结构的动作集树设计图;
图6为本发明实施提供的一种OpenFlow大规模流表加速查找架构图;
图7为本发明实施提供的一种OpenFlow分组转发流程示意图;
图8为本发明实施提供的一种OpenFlow流表项转存流程示意图;
图9为本发明实施提供的一种OpenFlow流表插入流程示意图;
图10为本发明实施提供的一种OpenFlow流表聚合流程示意图;
图11为本发明实施提供的一种OpenFlow流表删除流程示意图;
图12为本发明实施提供的一种OpenFlow流表项拆分流程示意图;
图13为本发明实施提供的一种基于动作集树的流表聚合方法实例图。
具体实施方式
下面结合实施例及附图对发明进一步说明,但不用来限制本发明的范围。
如图4所示,本发明的一个实施例,提供了一种基于动作集树的流表聚合方法,具体聚合过程如下:
对于一条新加入的流表项,首先根据其掩码定位对应的元组,然后在其中查找与其匹配字段汉明距离为1的流表项。若查找成功,则使用通配符“*”替换两者匹配字段不同的比特位,从而合并这两条流表项,并根据其优先级和动作集(树)生成新的动作集树。对于合并后的流表项,需根据其掩码放置到其它元组中,并继续进行流表项合并和动作集树更新,直到新生成的流表项无法再合并为止。
如图5所示,本发明的一个实施例,提供了一种基于Trie树结构的动作集树,具体构建与使用如下:
对于待合并的两条流表项,首先新建一个根节点,记录两条流表项的匹配字段中比特位不相同的位置,然后将两条流表项的动作集(树)作为其左右孩子节点,从而形成新的动作集树。重复上述操作,最终完成聚合表项的动作集树构建。对于到达的数据包,若成功匹配一条聚合表项,首先获取其中的动作集树,然后依据数据包的匹配字段查找动作集树,定位某个叶子节点,最后按照其中的动作集转发处理数据包。若数据包成功匹配多条流表项得到多个动作集,则按优先级最高的动作集进行处理。
如图6所示,本发明的一个实施例,提供了一种OpenFlow大规模流表聚合与加速查找方法,具体数据包流表查找过程如下:
当OpenFlow交换机接收到一个数据包时,首先提取其匹配字段,然后查找TCAM子流表。若成功找到一条流表项,则根据其中的索引定位对应的DRAM子表项,进而根据其动作集(树)执行相应的转发处理操作。否则,进一步查找SRAM子流表。若查找成功,则根据对应的DRAM子表项进行数据包转发处理。若整个OpenFlow流表查找失败,则将数据包信息封装成流安装请求发送给控制器,以请求下发对应的流规则。由于TCAM存储绝大多数的活跃流,绝大部分数据包可通过TCAM直接进行转发,从而保证了数据包的流表查找性能。
参照图7-13,上述实施例具体包括以下操作:
a、OpenFlow分组转发操作
如图7所示为OpenFlow分组转发流程。当OpenFlow交换机收到网络中的某个数据包后,首先解析其首部字段,并提取其匹配字段,然后查找TCAM子流表。若查找成功,则根据匹配TCAM子表项中的索引值读取对应的DRAM子表项,进而查找其中的动作集(树),最后按照找到的动作集转发处理数据包,并更新DRAM子表项中的计数器与时间戳等内容字段。若TCAM查找失败,则进一步查找SRAM子流表。若查找成功,则同样根据对应的DRAM子表项进行数据包转发处理和内容字段更新。此时,若该数据包所属的流进入活跃状态,则将该流从SRAM子流表转存到TCAM子流表。若TCAM和SRAM子流表查找均失败,则意味着该数据包属于一条新流,于是将该数据包信息封装成packet-in消息发送给控制器,以请求控制器下发对应的流规则。
b、OpenFlow流表项转存操作
如图8所示为OpenFlow流表项转存流程。当一个数据包成功匹配SRAM子流表项后,若其所属的流进入活跃状态,则需将该流从SRAM子流表转存到TCAM子流表。首先获取TCAM中流表项数量,进而逐条对比其中每条流表项的活跃度,找出活跃度最低的流表项作为待交换的流表项。然后,将待交换流表项转存至SRAM子流表,再将当前变活跃的流表项转存至TCAM子流表。
c、OpenFlow流表插入操作
如图9所示为OpenFlow流表插入流程。当OpenFlow交换机接收到SDN控制器下发的带ADD命令的Flow-Mod消息时,首先根据该消息内容新建一条新流表项,然后将其在TCAM子流表中进行聚合。若聚合成功,则将所生成聚合表项的匹配字段与内容字段分别存入TCAM与DRAM子流表。若聚合失败,则将其在SRAM子流表中进一步聚合,否则同样将聚合所生成表项对应的匹配字段与内容字段分别存入SRAM与DRAM子流表中。若TCAM和SRAM子流表聚合均失败,则将其匹配字段与内容字段分别存入SRAM与DRAM子流表中。
d、OpenFlow流表聚合操作
如图10所示为OpenFlow流表聚合流程。当OpenFlow交换机接收到一条待聚合流表项时,首先根据其掩码先后在TCAM和SRAM子流表中查找与其汉明距离为1的流表项。若查找成功,则构建新的动作集树,即新建一个根节点,并将两条流表项匹配字段不同的比特位置bp存入其中,然后再将两条流表项对应的动作集(树)作为根节点的左右孩子。进一步生成合并后的新表项,同时删除被合并的流表项。然后继续在流表中寻找满足聚合条件的流表项,直到新生成的流表项无法再合并。最后,输出聚合结果,即是否进行聚合,以及聚合后的流表项。
e、OpenFlow流表删除操作
如图11所示为OpenFlow流表删除流程。当OpenFlow交换机收到SDN控制器下发的带DELETE命令的Flow-Mod消息时,首先提取流规则中流的匹配字段,然后在TCAM子流表中查找待删除表项。若查找成功,如果其匹配的TCAM子表项为非聚合表项,那么先根据其中的索引值读取对应的DRAM子表项并将其删除,然后再删除TCAM子表项即可。否则进入OpenFlow流表项拆分流程,流表项拆分结束后,利用待删除表项中的索引值读取对应的DRAM子表项,并将其进行删除。若TCAM查找失败,则进一步查找SRAM子流表。若查找成功,则同样通过上述方法进行流表项删除与流表项拆分操作。若TCAM和SRAM子流表查找均失败,则向控制器发送error消息报告流表项删除失败结果。
f、OpenFlow流表项拆分操作
如图12所示为OpenFlow流表项拆分流程。当OpenFlow交换机需从一条聚合流表项中删除一条流表项时,首先根据该聚合流表项中的索引值,定位其对应DRAM子表项中的动作集树。然后,从根节点开始往下拆分动作集树,直至得到待删除流表项所对应的叶子节点为止。接下来,除待删除流表项外,将拆分得到的所有流表项重新插入到流表中。最后移除聚合流表项。
如图13展示了本发明所提出的流表聚合方法聚合实例,具体内容如下:
图左虚线绿框表示一个元组,其中的流表项简化表示为<匹配字段,动作集>的二元组形式,过程①表示同一元组内两条汉明距离为1的流表项合并过程,过程②表示同时根据合并时的比特位置进行动作集树的构建过程,过程③表示将聚合后的新表项重新放置到对应元组中,继续聚合。
与现有技术相比,本发明设计了一种基于动作集树的流表聚合方法,其根据掩码将原始OpenFlow流表划分成若干个元组,然后通过构建或合成动作集树合并元组内外动作集可能不同的流表项。当流表进行插入或删除时,只聚合或拆分相关表项,以减小流表更新开销。进一步,本发明提供了一种OpenFlow大规模流表加速查找方法。该方法首先将流表项的内容字段分离出来采用DRAM存储,然后采用上述基于动作集树的流表聚合方法压缩流表的匹配字段,以使TCAM能够容纳绝大多数甚至所有流表项。当聚合后的流表仍超出TCAM容量时,将多数的活跃流存入TCAM,只有少数的空闲流存入SRAM,从而使大部分数据包能够直接命中TCAM实现快速转发。
以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等同物界定。

Claims (9)

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

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111286196.1A CN115510287A (zh) 2021-11-02 2021-11-02 一种OpenFlow大规模流表聚合与加速查找方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111286196.1A CN115510287A (zh) 2021-11-02 2021-11-02 一种OpenFlow大规模流表聚合与加速查找方法

Publications (1)

Publication Number Publication Date
CN115510287A true CN115510287A (zh) 2022-12-23

Family

ID=84499260

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111286196.1A Pending CN115510287A (zh) 2021-11-02 2021-11-02 一种OpenFlow大规模流表聚合与加速查找方法

Country Status (1)

Country Link
CN (1) CN115510287A (zh)

Similar Documents

Publication Publication Date Title
Basu et al. Fast incremental updates for pipelined forwarding engines
CN111966284B (zh) 一种OpenFlow大规模流表弹性节能与高效查找系统及方法
CN102307149B (zh) Ip查找方法和装置以及路由更新方法和装置
US8335780B2 (en) Scalable high speed relational processor for databases and networks
CN110808910B (zh) 一种支持QoS的OpenFlow流表节能存储架构及其方法
CN104579941A (zh) 一种OpenFlow交换机中的报文分类方法
CN108134739B (zh) 一种基于索引特里树的路由查找方法及装置
CN107967219A (zh) 一种基于tcam的大规模字符串高速查找方法
CN110858823B (zh) 一种数据包的分类方法、装置及计算机可读存储介质
Le et al. Memory-efficient and scalable virtual routers using FPGA
US20140114995A1 (en) Scalable high speed relational processor for databases and networks
CN101277252A (zh) 多分支Trie树的遍历方法
Luo et al. A hybrid IP lookup architecture with fast updates
US9900409B2 (en) Classification engine for data packet classification
Song et al. Packet classification using coarse-grained tuple spaces
Seo et al. Bitmap-based priority-NPT for packet forwarding at named data network
CN111143427B (zh) 基于在网计算的分布式信息检索方法、系统与装置
Qu et al. High-performance pipelined architecture for tree-based IP lookup engine on FPGA
CN115510287A (zh) 一种OpenFlow大规模流表聚合与加速查找方法
Erdem et al. Multi-pipelined and memory-efficient packet classification engines on FPGAs
CN105791132B (zh) 一种基于多路搜索树路由查找的表项更新方法及装置
Lin et al. A multi-index hybrid trie for lookup and updates
CN115455117A (zh) 基于Cuckoo Hash及Chain Hash的Redis集群管理系统及方法
CN110851658B (zh) 树形索引数据结构、内容存储池、路由器及树形索引方法
Erdem Pipelined hierarchical architecture for high performance packet classification

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination