CN105224692B - 支持多核处理器的sdn多级流表并行查找的系统及方法 - Google Patents

支持多核处理器的sdn多级流表并行查找的系统及方法 Download PDF

Info

Publication number
CN105224692B
CN105224692B CN201510737067.8A CN201510737067A CN105224692B CN 105224692 B CN105224692 B CN 105224692B CN 201510737067 A CN201510737067 A CN 201510737067A CN 105224692 B CN105224692 B CN 105224692B
Authority
CN
China
Prior art keywords
list item
flow table
item
fast
flow
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.)
Active
Application number
CN201510737067.8A
Other languages
English (en)
Other versions
CN105224692A (zh
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.)
Fiberhome Telecommunication Technologies Co Ltd
Original Assignee
Wuhan FiberHome Networks Co Ltd
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 Wuhan FiberHome Networks Co Ltd filed Critical Wuhan FiberHome Networks Co Ltd
Priority to CN201510737067.8A priority Critical patent/CN105224692B/zh
Publication of CN105224692A publication Critical patent/CN105224692A/zh
Application granted granted Critical
Publication of CN105224692B publication Critical patent/CN105224692B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24532Query optimisation of parallel queries

Landscapes

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

Abstract

本发明公开了一种支持多核处理器的SDN多级流表并行查找的系统及方法,涉及网络技术领域。该方法包括以下步骤:在每一个多级流表的尾端增加一条默认表项;前期的数据流进入多级流表查找时,自动构建一个基于数据流关键字的快表,记录数据流与每一级流表匹配的表项结果,数据流通过快表直接与SDN设备中的多级流表的表项关联起来;后期的数据流从快表中直接获取多级流表中的转发规则信息,直接通过快表找到多级流表中待匹配的表项和执行的动作,将SDN多级流表中进行的多次匹配转化为快表中的单次匹配。本发明能提高查找效率,提高多核处理器在SDN多级流表中的执行效率。

Description

支持多核处理器的SDN多级流表并行查找的系统及方法
技术领域
本发明涉及网络技术领域,具体是涉及一种支持多核处理器的SDN多级流表并行查找的系统及方法。
背景技术
SDN(Software Defined Network,软件定义网络)对现有网络提出了革命性的改变,将网络设备控制面与数据面分离出来,从而实现了网络流量的灵活控制,为核心网络提供了统一的管理化平台。SDN中数据平面的转发区别于传统二层网络基于MAC(MediumAccess Control,介质访问控制)地址查找、三层网络基于IP(Internet Protocol,网络之间互连的协议)地址查找和MPLS(Multi-Protocol Label Switching,多协议标签交换)网络基于标签(Lable)查找的单一方式,采用以流为单位对数据报文进行分类处理和转发,流表是决定数据流转发的核心,流表的设计是SDN设备的关键技术。
当前随着SDN的快速发展,流表中需要匹配的字段在不断增加,数据流在转发过程中需要执行的转发行为也在不断丰富,为了给用户提供更加灵活多变的配置方式,多级流表已在SDN新的协议规范中被提出。多级流表的设计需求对SDN传统ASIC(ApplicationSpecific Integrated Circuit,专用集成电路)硬件平台提出了很多挑战。
现有的ASIC架构芯片(如网络处理器、交换芯片)由于报文解析、流表查找、逻辑处理都只能依据严格的逻辑模式进行,灵活性较差,通常只能使用TCAM(Ternary ContentAddressable Memory,三态内容寻址存储器)来实现流表的存储和查找。TCAM专用芯片面积大、功耗大,价格高昂,如果芯片内置则表项大小很少,外扩成本和功耗都很大,同时TCAM支持的表项宽度有限,对于当前SDN多关键字的表项在存储与查找方面都难以满足。ASIC芯片所具有的设计方式和硬件本身的特性与SDN越来越灵活的功能需求形成明显的矛盾。
在新的需求下,高性能的多核处理器在数据处理过程中能够实现并行处理,网络延时小,数据吞吐量大,并且流程设计灵活,硬件约束小,在当前网络设备中已有着广泛的应用,SDN数据平面的硬件平台也在向多核处理器方向迁移。在多核处理器的应用过程中,存储都是SDRAM(Synchronous Dynamic Random Access Memory,同步动态随机存取存储器)为主,相对TCAM,多核处理器的优点是大容量和低价格,表项的格式根据用户需求可以自由设计,没有位宽限制,可以包含任意多个关键字。表项的查找方式依据表项的存储数据结构来决定,完全是用软件算法来实现,区别于TCAM的硬件查找,由此可以看出基于多核平台的SDN设备性能由表项的查找算法决定。
当前基于SDRAM的流表查找主要有线性查找算法、树形查找算法、几何查找算法和递归查找算法等,但是上述传统算法在多核处理器中对可并行执行、快速命中等性能方面的要求显得不足,主要表现在以下方面:
线性查找算法基于线性链表的数据组织方式,流表表项以链表的方式存储在SDRAM中,数据报文进行表项查找时需要对链表上的表项逐条匹配。该算法数据结构简单,容易实现,但是在表项存储量较大的情况下,链表的深度较大,设备端口上通过的每个数据报需要和链表上的表项进行匹配的平均次数增大,匹配的次数最坏情况下是表项的整个表项总数,所以在表项较多情况下算法的执行效率较低。在流表表项数目较多的情况下,单纯依靠线性查找算法是不可取的,线性查找算法只适用于流表表项较少的应用场合。
树形查找算法、几何查找算法和递归查找算法都是在查找次数上进行优化和改进,通过数据结构的优化,将表项的存储分散成树或图的数据结构,避免单纯的线性存储方式。树形查找算法、几何查找算法和递归查找算法从一定程度上降低了表项的存储深度,减少了平均查找的次数,优化了查找的性能,但是这三种算法相对于线性查找算法数据结构组织复杂,在掩码查找上支持的能力较弱,同时在并行查找和频繁表项更新等环境中算法的运行效率不高,这三种算法一般只适用于单核处理器和表项结构较为稳定的设备环境中,并且在容量较大的情况下树或图的层次不可能控制在几层范围内,也很难实现表项的快速匹配查找。
上述算法分别适合不同的环境,每种算法适用不同的场合,需要结合具体的环境才能发挥其较好的性能优势,但是在基于多核处理器的SDN设备中,要求支持多级流表表项的并行查找、大容量表项存储、频繁表项更新等操作,单纯的应用上述传统算法难以满足实际应用的需求,并且造成多核处理器处理性能瓶颈,对硬件资源造成浪费。
SDN设备由ASIC芯片向多核处理器平台迁移的过程中,之前的表项设计方式和基于TCAM的硬件查找方式已经不再具有借鉴意义。新的多核平台在芯片内部集成的核数多达32个、64个,对算法的并行执行效率提出了更大的挑战,如果设计的算法难以满足其并行执行的要求,严重情况下将造成多核处理器平台的技术瓶颈,使得多核芯片的处理性能难以发挥到应有的水平。
传统的线性查找算法、树形查找算法、几何查找算法和递归查找算法等实现的多级流表查找算法,由于其数据结构和算法组织方式的局限性,难以在网络数据设备多核处理器平台下实现大容量的并行快速查找,给平台造成技术瓶颈,使得多核处理器的并行处理能力不能完全得以发挥,造成极大的资源浪费。
参见图1所示,传统的多级流表采用完全独立流表依次串联的设计方案,以三级流表为例,每个数据报文(Packet)依次查找表1(Table 1)、表2(Table 2)、表3(Table 3)中的表项。每张表中的表项越多,数据报文需要匹配的平均次数就越多;多级串联的流表数量越多,数据报文需要匹配的平均次数也越多,可见现有的多级流表算法整体的平均匹配次数与表项数目和表的大小成正比。无论采用上述那种算法,算法的性能与流表的级数成反比,每增加一级流表就意味着算法需要增加更多的匹配次数,花费更多的查找时间。多级流表依次查找,算法性能表现对SDN流表的级数和表项条目数极为敏感,随着流表级数和表项数目的增加,算法性能也随之下降。出于对性能的考虑,传统多级流表的设计往往控制在几层范围内,这在一定程度上限制了SDN流程设计的灵活性和SDN功能设计的完善性。
发明内容
本发明的目的是为了克服上述背景技术的不足,提供一种支持多核处理器的SDN多级流表并行查找的系统及方法,对多级流表的组织结构重新设计,增加基于数据流关键字的快表,将传统SDN多级流表中进行的多次匹配转化为快表中的单次匹配,能够提高查找效率,提高多核处理器在SDN多级流表中的执行效率。
本发明提供一种支持多核处理器的SDN多级流表并行查找的系统,该系统包括快表建立单元、表项设计单元、流表表项删除单元、流表表项添加单元,其中:
快表建立单元用于:前期的数据流进入多级流表查找时,自动在多级流表中增设一个基于数据流关键字的快表,记录每一级流表匹配的表项结果,将各类输入数据包头部的关键字哈希到众多快表上,进行数据的转发规则获取和转发,优化多核处理器的并行执行;数据流通过快表直接与SDN设备中的多级流表的表项关联起来;后期的数据流从快表中直接获取多级流表中的转发规则信息,直接通过快表找到多级流表中待匹配的表项和执行的动作,将SDN多级流表中进行的多次匹配转化为快表中的单次匹配;
表项设计单元用于:在多级流表匹配数据流的过程中,在快表表项中建立数据流的快表信息;在每一个多级流表的尾端增加一条默认表项;
流表表项删除单元用于:删除流表表项时,让原本关联到默认表项的快表感知多级流表的表项发生变更,自动解除流表与默认表项的关联,让快表表项重新去关联没有被删除的流表表项;
流表表项添加单元用于:添加流表表项时,让原本关联到默认表项的快表感知多级流表的表项发生变更,自动解除流表与默认表项的关联,重新绑定新增的流表表项。
在上述技术方案的基础上,所述快表的表项成员中包括三个用于记录数据流匹配的多级表项指针,每个输入的数据报文提取报文头部的关键字,进行哈希运算,根据哈希值的不同将数据包划分到不同的快表表项桶Bucket中,每个Bucket中含有8个表项成员,根据表项中的指针地址找到匹配的表项,执行相关的动作;
所述表项设计单元定义以下名词:
关键字的集合Key={k[1],k[2],k[3],…,k[n]},k[n]属于集合Key,k表示关键字的字段,字段有多个,根据SDN的版本不同有所区别,n是变量,k[n]是一条表项中的关键字字段第n个匹配字段,k[n]是数据报文中IP头部、用户数据报协议UDP头部信息或传输控制协议TCP头部信息;
关键字掩码的集合Mask={m[1],m[2],m[3],…,m[n]},m[n]属于集合Mask,m表示掩码,字段对应的掩码有多个,n是变量,m[n]是一条表项中的条件字段第n个匹配字段的掩码;
动作的集合Action={a[1],a[2],a[3],…,a[i]},a[i]属于集合Action,a表示执行的动作,执行的动作有多个,i是变量,a[i]是一条流表表项中第i个需要执行的动作;
流表的集合L[x]={r[1],r[2],r[3],…,r[j]},L是流表的集合,x是变量,L[x]表示第x张流表;r表示流表的表项,j是变量,r[j]属于流表集合L[x],r[j]是流表第x张流表L的第j条表项;
快表的集合F={b[1],b[2],b[3],…,b[n]},F表示快表的集合,b表示快表表项,n是变量,b[n]属于快表集合F,b[n]是快表F的第n条表项,快表表项Bucket的最大值Bucket_Max,表示快表F中容纳的最大表项数;
网络上所有可能的出现的数据包的集合P={p[1],p[2],p[3],…,p[j]},P表示数据报文的集合,j是变量,p[j]表示具有同一特征类型的数据报文;
所述表项设计单元设计快表表项时,为快表表项的每个成员设计以下数据域:
Valid1:第一有效位,用于表示该条表项的有效性;
Pending:状态位,用于表示该条表项的可用性;
Key:关键字,表项的关键字字段,是该表项的特征值;
Flag:标志位,表示后面数据域三个指针的有效性;
Ptr1:第一指针,用于指向第一级流表表项的指针;
Ptr2:第二指针,用于指向第二级流表表项的指针;
Ptr3:第三指针,用于指向第三级流表表项的指针;
流表的表项包括:
Prev:链表前向指针,用于指向前一个表项结构体的指针;
Prio:优先级字段,表示该表项的优先级高低,数值越大优先级越高,反之越小;
Key:关键字;
Mask:掩码,表示访问控制列表的表项中的掩码,用于与数据流信息的条件字段进行与运算;
Ref:引用计数,用于记录当前正在使用该表项的成员个数;
Valid2:第二有效位,用于表示该表项的有效性;
Lock:结构体资源锁,用于多个核间并行执行时,对表项资源的同步和互斥;
Action:执行动作,流表定义的执行动作;
Next1:第一链表后向指针,用于指向后一个表项结构体的指针,整个流表表项通过该指针以双链表的方式进行逻辑存储;
流表的表头包括:
Table_Id,表示流表的表号;
Conut,表示当前流表中含有多少个表项;
Lock:结构体资源锁;
Next2:第二链表后向指针,指向流表的第一个表项结构;
所述流表表项的存储结构为链表方式、树形结构或图形结构;
所述快表中一个成员的第一有效位被置为1,表示满足该成员关键字条件的数据报文,通过该成员直接找到多级流表需要执行的表项,成员中的标志位=7,二进制为111,表示在三级流表中分别找到三个能匹配的表项,指向流表表项的三个指针Ptr1、Ptr2和Ptr3有效;
所述表项设计单元在流表的数据结构设计过程中,在每个流表的尾端增加一个默认表项,标记为r[d],其优先级为0,默认表项是在流表初始化过程中自动加入的,掩码全部成员都为0,各种类型的数据报文都能匹配上这条默认表项;数据报文在依次匹配流表的表项,如果前面的表项都不能匹配,则匹配到默认表项。
本发明还提供一种支持多核处理器的SDN多级流表并行查找的方法,包括以下步骤:
前期的数据流进入多级流表查找时,自动在多级流表中增设一个基于数据流关键字的快表,记录每一级流表匹配的表项结果,将各类输入数据包头部的关键字哈希到众多快表上,进行数据的转发规则获取和转发,优化多核处理器的并行执行;数据流通过快表直接与SDN设备中的多级流表的表项关联起来;
后期的数据流从快表中直接获取多级流表中的转发规则信息,直接通过快表找到多级流表中待匹配的表项和执行的动作,将SDN多级流表中进行的多次匹配转化为快表中的单次匹配;
在多级流表匹配数据流的过程中,在快表表项中建立数据流的快表信息;在每一个多级流表的尾端增加一条默认表项;
删除流表表项时,让原本关联到默认表项的快表感知多级流表的表项发生变更,自动解除流表与默认表项的关联,让快表表项重新去关联没有被删除的流表表项;
添加流表表项时,让原本关联到默认表项的快表感知多级流表的表项发生变更,自动解除流表与默认表项的关联,重新绑定新增的流表表项。
在上述技术方案的基础上,所述快表的表项成员中包括三个用于记录数据流匹配的多级表项指针,每个输入的数据报文提取报文头部的关键字,进行哈希运算,根据哈希值的不同将数据包划分到不同的快表表项桶Bucket中,每个Bucket中含有8个表项成员,根据表项中的指针地址找到匹配的表项,执行相关的动作;
所述表项设计单元定义以下名词:
关键字的集合Key={k[1],k[2],k[3],…,k[n]},k[n]属于集合Key,k表示关键字的字段,字段有多个,根据SDN的版本不同有所区别,n是变量,k[n]是一条表项中的关键字字段第n个匹配字段,k[n]是数据报文中IP头部、用户数据报协议UDP头部信息或传输控制协议TCP头部信息;
关键字掩码的集合Mask={m[1],m[2],m[3],…,m[n]},m[n]属于集合Mask,m表示掩码,字段对应的掩码有多个,n是变量,m[n]是一条表项中的条件字段第n个匹配字段的掩码;
动作的集合Action={a[1],a[2],a[3],…,a[i]},a[i]属于集合Action,a表示执行的动作,执行的动作有多个,i是变量,a[i]是一条流表表项中第i个需要执行的动作;
流表的集合L[x]={r[1],r[2],r[3],…,r[j]},L是流表的集合,x是变量,L[x]表示第x张流表;r表示流表的表项,j是变量,r[j]属于流表集合L[x],r[j]是流表第x张流表L的第j条表项;
快表的集合F={b[1],b[2],b[3],…,b[n]},F表示快表的集合,b表示快表表项,n是变量,b[n]属于快表集合F,b[n]是快表F的第n条表项,快表表项Bucket的最大值Bucket_Max,表示快表F中容纳的最大表项数;
网络上所有可能的出现的数据包的集合P={p[1],p[2],p[3],…,p[j]},P表示数据报文的集合,j是变量,p[j]表示具有同一特征类型的数据报文。
所述表项设计单元设计快表表项时,为快表表项的每个成员设计以下数据域:
Valid1:第一有效位,用于表示该条表项的有效性;
Pending:状态位,用于表示该条表项的可用性;
Key:关键字,表项的关键字字段,是该表项的特征值;
Flag:标志位,表示后面数据域三个指针的有效性;
Ptr1:第一指针,用于指向第一级流表表项的指针;
Ptr2:第二指针,用于指向第二级流表表项的指针;
Ptr3:第三指针,用于指向第三级流表表项的指针;
流表的表项包括:
Prev:链表前向指针,用于指向前一个表项结构体的指针;
Prio:优先级字段,表示该表项的优先级高低,数值越大优先级越高,反之越小;
Key:关键字;
Mask:掩码,表示访问控制列表的表项中的掩码,用于与数据流信息的条件字段进行与运算;
Ref:引用计数,用于记录当前正在使用该表项的成员个数;
Valid2:第二有效位,用于表示该表项的有效性;
Lock:结构体资源锁,用于多个核间并行执行时,对表项资源的同步和互斥;
Action:执行动作,流表定义的执行动作;
Next1:第一链表后向指针,用于指向后一个表项结构体的指针,整个流表表项通过该指针以双链表的方式进行逻辑存储;
流表的表头包括:
Table_Id,表示流表的表号;
Conut,表示当前流表中含有多少个表项;
Lock:结构体资源锁;
Next2:第二链表后向指针,指向流表的第一个表项结构;
所述流表表项的存储结构为链表方式、树形结构或图形结构。
所述快表中一个成员的第一有效位被置为1,表示满足该成员关键字条件的数据报文,通过该成员直接找到多级流表需要执行的表项,成员中的标志位=7,二进制为111,表示在三级流表中分别找到三个能匹配的表项,指向流表表项的三个指针Ptr1、Ptr2和Ptr3有效。
所述表项设计单元在流表的数据结构设计过程中,在每个流表的尾端增加一个默认表项,标记为r[d],其优先级为0,默认表项是在流表初始化过程中自动加入的,掩码全部成员都为0,各种类型的数据报文都能匹配上这条默认表项;数据报文在依次匹配流表的表项,如果前面的表项都不能匹配,则匹配到默认表项。
在上述技术方案的基础上,所述快表建立单元建立快表时执行以下步骤:
S101、多核处理器的核从数据报文p[j]中提取报文中对应的条件字段k[1],k[2],k[3],…,k[n]进行哈希运算,获得32位的哈希值Hash_Value;
S102、在快表用上面计算的哈希值取余快表表项桶最大值Bucket_Max,得到b[Hash_Value%Bucket_Max]表项,标记为b[j],%表示取余运算,在b[j]的8个成员中寻找第一有效位为1的成员,根据表项条件字段k[1],k[2],k[3],…,k[n]与数据报文提取的条件字段匹配进行匹配,如果没有匹配到,说明该数据流在快表中尚未建立表项信息,则转到步骤S103,否则转到步骤S108;
S103、建立报文的数据流信息:将数据报文提取全部条件字段k[1],k[2],k[3],…,k[n]作为流的重要信息填入到空闲快表表项成员的关键字中,该表项的第一有效位=0,填写完成关键字后,将该表项的第一有效位置为1、状态位置为1,表示该表项正在被使用,但是表项信息尚没有完善,目前不可用;
S104、关联当前快表表项与第一张流表:如果标志位“与”001为“真”,则直接转到步骤S106,表明快表与第一张流表表项已经关联;否则执行如下步骤:将数据报文提取的信息关键字与第一张流表的表项进行逐一匹配,匹配过程是:将数据报文提取的关键字首先同流表表项r[j]中的掩码进行“与”运算,再将其结果与流表表项r[j]中的关键字进行“等于”判断,如果结果为真,则表明当前的表项被匹配上,直接转到步骤S105;否则继续下一条流表表项的匹配,直到匹配最后一条掩码为全0的默认表项为止;
S105、将快表表项成员中的第一指针Ptr1指向流表表项r[j],将表项r[j]结构体的引用计数增加1,并将标志位逻辑运算“或”上001,此时完成了当前快表表项与第一张流表表项的关联,如果表项r[j]上动作需要跳转到指定第二张流表,则转到步骤S106;动作需要跳转到第三张流表,则转到步骤S107;动作需要直接跳出查找,则转到步骤S108;动作无跳转,则默认转到步骤S106,继续进行流表查找;
S106、关联当前快表表项与第二张流表:同步骤S104,如果标志位“与”010为“真”,则直接转到步骤S107,表明快表与第二张流表表项已经关联;否则执行如下步骤:将数据报文提取的信息关键字与第二张流表的表项进行逐一匹配,匹配完成后同步骤S105,将快表表项成员中的第二指针Ptr2指向流表表项r[j],将表项r[j]结构体的引用计数增加1,并将标志位逻辑运算“或”上010,此时完成了当前快表快项与第二张流表表项的关联,如果表项r[j]上动作需要跳转到指定第三张流表,则转到步骤S107;动作需要直接跳出查找,则转到步骤S108;动作无跳转,则默认转到步骤S107,继续进行流表查找;
S107、关联当前快表表项与第三张流表:同步骤S104,如果标志位“与”100为“真”,则直接转到步骤S108,表明快表与第三张流表表项已经关联;否则执行如下步骤:将数据报文提取的信息关键字与第三张流表的表项进行逐一匹配,匹配完成后同步骤S105,将快表表项成员中的第三指针Ptr3指向流表表项r[j],将表项r[j]结构体的引用计数增加1,并将标志位逻辑运算“或”上100,此时完成了当前快表快项与第三张流表表项的关联;
S108、首先检测快表表项成员的第一有效位是否为1,如果不为1,将其设置为1;检测状态位是否为0,如果不为0,将其设置为0,至此表明该数据流快表表项信息全部建立完成;
S109、数据报文在快表中匹配上表项成员,并且表项第一有效位为1,状态位为0,根据成员中的指针,直接找到三张流表表项中匹配的表项,并找到流表表项中需要执行的动作,动作包含:修改数据报文头部信息、指定出端口、丢弃、跳转到指定的流表或容许通过;如果表项第一有效位为1,状态位为1,表明当前快表表项处于在建过程中,快表与流表关联信息需要进一步完善,返回步骤S104。
在上述技术方案的基础上,如果三张流表上的某一张流表L[x]上某一条表项r[j]被删除,流表表项删除单元执行以下步骤:
S201、在流表上找到待删除的流表表项r[j],将表项r[j]从链表中删除,然后将流表表头中的Count值减1;
S202、将该表项中的第二有效位设置成无效,如果r[j]的引用计数不大于0,转到步骤S203;否则转到步骤S204;
S203、如果r[j]的引用计数不大于0,说明当前已经没有快表指向该结构体空间,直接释放表项r[j]结构体内存;
S204、数据报文在使用快表表项成员的过程中,通过指针找流表的表项r[j],首先要对表项r[j]的第二有效位进行判断,如果第二有效位被设置成无效,则表明该访问列表已经被删除,表明需要执行的动作已经失效,转到步骤S205;
S205、将r[j]中的引用计数减1,如果r[j]的引用计数不大于0,则直接释放r[j]结构体内存,并且将当前快表表项成员中的对应的标志位清除,将状态位置为1;如果r[j]的引用计数大于0,后来的数据报文将重复步骤S204的操作,直到r[j]的引用计数不大于0,内存被释放为止。
在上述技术方案的基础上,如果三张流表上的某一张流表L[x]上增加一条表项r[j],流表表项添加单元执行以下步骤:
S301、在双链表上增加新表项r[j],表项添加的位置根据优先级字段比较来确定,要求插入的节点r[j-1]的优先级不低于新表项r[j]的优先级,完成插入操作后将将流表表头中的Count值加1;
S302、重新删除并添加该流表上从r[j+1]到尾部默认表项之间的全部表项;
S303、数据报文在使用快表表项成员的过程中,通过指针索引到流表的表项r[j+1]时,如果发现表项r[j+1]的第二有效位被设置成无效,则表明该访问列表已经被删除,表明需要执行的动作已经失效,将快表表项成员中对应的标志位置为0,状态位置为1;
S304、数据报文重新构建快表表项,新建的快表表项成员匹配默认表项r[d]、优先级较低的r[j+1]表项或新增优先级更高的表项。
与现有技术相比,本发明的优点如下:
(1)传统的算法是:多级流表依次匹配每一级流表表项,从而获取数据转发规则,与传统的算法相比,本发明对多级流表的组织结构重新设计,增加基于数据流关键字的快表,前期的数据流在进入多级流表查找的过程中自动建立快表,数据流通过快表直接与SDN设备中的多级流表的表项关联起来,在多级流表匹配数据流的过程中,记录每一级流表匹配的表项结果,从而在快表表项中建立数据流的快表信息,让后续的数据流从快表中直接获取多级流表中的转发规则信息,将传统SDN多级流表中原本需要多次匹配表项的设计变更为单次匹配,实现高速并行查找、多级表项存储,让数据报文能够在有限的几次匹配中就能够查找到对应的流表表项,并缓解流表级数与查找性能之间的反比关系,突破SDN设备在多核处理器平台中多级流表查找上的瓶颈,提高查找效率,从而提高多核处理器在SDN多级流表中的执行效率。
(2)本发明在每一个多级流表的尾端增加一条默认表项,当添加流表表项时,主动删除并添加一次该流表上的默认表项,让原本关联到默认表项的快表感知流表发生变更,自动解除与默认表项的关联,重新绑定新增的流表表项,在保证算法正确性和及时性的同时,将快表的震荡减低为最小,因为这对已经绑定非默认表项的快表不会带来影响,即使在在流表表项频繁发生更新的过程中,依然能够避免因快表的大面积重构而导致的SDN整体转发性能产生急剧震荡。
(3)本发明中的快表表项设计得比较大,各类输入数据包头部的关键字(Key)哈希到众多快表上,进行数据的转发规则获取和转发,优化多核处理器的并行执行,即使多核处理器集中在原本有限的几张流表和流表表项资源上,能够尽量避免由资源争夺和资源等待等造成的转发性能下降现象。
附图说明
图1是现有的多级流表的示意图。
图2是本发明实施例中多级流表的结构示意图。
图3是本发明实施例中快表表项成员Entry的数据结构示意图。
图4是本发明实施例中流表表项成员Entry的数据结构示意图。
图5是本发明实施例中流表表头Table_Head的数据结构示意图。
图6是本发明实施例中快表与多级流表之间的结构关系示意图。
具体实施方式
下面结合附图及具体实施例对本发明作进一步的详细描述。
本发明实施例提供一种支持多核处理器的SDN多级流表并行查找的系统,该系统包括快表建立单元、表项设计单元、流表表项删除单元、流表表项添加单元,其中:
快表建立单元用于:前期的数据流进入多级流表查找时,自动在多级流表中增设一个基于数据流关键字的快表,记录每一级流表匹配的表项结果,将各类输入数据包头部的关键字哈希到众多快表上,进行数据的转发规则获取和转发,优化多核处理器的并行执行;数据流通过快表直接与SDN设备中的多级流表的表项关联起来;后期的数据流从快表中直接获取多级流表中的转发规则信息,直接通过快表找到多级流表中待匹配的表项和执行的动作,将SDN多级流表中进行的多次匹配转化为快表中的单次匹配;
表项设计单元用于:在多级流表匹配数据流的过程中,在快表表项中建立数据流的快表信息;在每一个多级流表的尾端增加一条默认表项;
流表表项删除单元用于:删除流表表项时,让原本关联到默认表项的快表感知多级流表的表项发生变更,自动解除流表与默认表项的关联,让快表表项重新去关联没有被删除的流表表项;
流表表项添加单元用于:添加流表表项时,让原本关联到默认表项的快表感知多级流表的表项发生变更,自动解除流表与默认表项的关联,重新绑定新增的流表表项。
本发明实施例还提供一种支持多核处理器的SDN多级流表并行查找的方法,包括以下步骤:
前期的数据流进入多级流表查找时,自动在多级流表中增设一个基于数据流关键字的快表,记录每一级流表匹配的表项结果,将各类输入数据包头部的关键字哈希到众多快表上,进行数据的转发规则获取和转发,优化多核处理器的并行执行;数据流通过快表直接与SDN设备中的多级流表的表项关联起来;
后期的数据流从快表中直接获取多级流表中的转发规则信息,直接通过快表找到多级流表中待匹配的表项和执行的动作,将SDN多级流表中进行的多次匹配转化为快表中的单次匹配;
在多级流表匹配数据流的过程中,在快表表项中建立数据流的快表信息;在每一个多级流表的尾端增加一条默认表项;
删除流表表项时,让原本关联到默认表项的快表感知多级流表的表项发生变更,自动解除流表与默认表项的关联;
添加流表表项时,让原本关联到默认表项的快表感知多级流表的表项发生变更,自动解除流表与默认表项的关联,重新绑定新增的流表表项。
流表表项的存储结构可以为链表方式、树形结构或图形结构。
本发明实施例中的多级流表可以是三级流表,也可以是4级、5级或N级流表,下面以三级流表为例进行说明。
参见图2所示,在多级流表中增设一个基于数据流关键字的FastTable(快表),快表表项Entry(成员)中包括三个用于记录数据流匹配的多级表项指针,每个输入的Packet(数据报文),提取报文头部的关键字,进行哈希运算,根据哈希值的不同将数据包划分到不同的快表表项Bucket(桶)中,由于哈希运算存在冲突的可能性,每个Bucket中含有8个表项成员,根据表项中的指针地址找到匹配的表项,执行相关的动作。
为了更好的表达,表项设计单元定义以下名词:
关键字的集合Key={k[1],k[2],k[3],…,k[n]},k[n]属于集合Key,k表示关键字的字段,字段会有很多个,根据SDN的版本不同有所区别,n是变量,k[n]是一条表项中的关键字字段第n个匹配字段,k[n]通常是数据报文中IP头部、UDP(User Datagram Protocol,用户数据报协议)头部信息或TCP(Transmission Control Protocol,传输控制协议)头部信息,例如五元组(入接口号、目的Ip地址、源Ip地址、TCP/UDP目的端口号和源端口号)等,属于MatchFields(流表匹配域)范畴。
关键字掩码的集合Mask={m[1],m[2],m[3],…,m[n]},m[n]属于集合Mask,m表示掩码,字段对应的掩码有很多个,n是变量,m[n]是一条表项中的条件字段第n个匹配字段的掩码。
动作的集合Action={a[1],a[2],a[3],…,a[i]},a[i]属于集合Action,a表示执行的动作,执行的动作可能会有很多个,i是变量,a[i]是一条流表表项中第i个需要执行的动作,例如:Counters(计数)、Instructions(指令)、Timeouts(定时)和Cookie(标识)等。
流表的集合L[x]={r[1],r[2],r[3],…,r[j]},L是流表的集合,x是变量,L[x]表示第x张流表,本发明实施例用三级流表来说明,所以x的值是1、2或3;r表示流表的表项,j是变量,r[j]属于流表集合L[x],r[j]是流表第x张流表L的第j条表项。
快表的集合F={b[1],b[2],b[3],…,b[n]},F表示快表的集合,b表示快表表项,n是变量,b[n]属于快表集合F,b[n]是快表F的第n条表项,快表表项Bucket的最大值Bucket_Max,表示快表F中容纳的最大表项数。
网络上所有可能的出现的数据包的集合P={p[1],p[2],p[3],…,p[j]},P表示数据报文的集合,j是变量,p[j]表示具有同一特征类型的数据报文。
参见图3所示,表项设计单元设计快表表项时,为快表表项的每个成员设计以下数据域:
Valid1:第一有效位,用于表示该条表项的有效性;
Pending:状态位,用于表示该条表项的可用性;
Key:关键字,表项的关键字字段,是该表项的特征值;
Flag:标志位,表示后面数据域三个指针的有效性;
Ptr1:第一指针,用于指向第一级流表表项的指针;
Ptr2:第二指针,用于指向第二级流表表项的指针;
Ptr3:第三指针,用于指向第三级流表表项的指针。
参见图4所示,流表的表项包括:
Prev:链表前向指针,用于指向前一个表项结构体的指针;
Prio:优先级字段,表示该表项的优先级高低,数值越大优先级越高,反之越小;
Key:关键字,上文已经说明,此处不再赘述;
Mask:掩码,表示访问控制列表的表项中的掩码,用于与数据流信息的条件字段进行与运算;
Ref:引用计数,用于记录当前正在使用该表项的成员个数;
Valid2:第二有效位,用于表示该表项的有效性;
Lock:结构体资源锁,用于多个核间并行执行时,对表项资源的同步和互斥;
Action:执行动作,流表定义的执行动作;
Next1:第一链表后向指针,用于指向后一个表项结构体的指针,整个流表表项通过该指针以双链表的方式进行逻辑存储。
参见图5所示,流表的表头(Table_Head)包括:
Table_Id,表示流表的表号;
Conut,表示当前流表中含有多少个表项;
Lock:结构体资源锁,上文已经说明,此处不再赘述;
Next2:第二链表后向指针,指向流表的第一个表项结构。
参见图6所示,快表中一个成员的第一有效位被置为1,表示满足该成员关键字条件的数据报文,可以通过该成员直接找到多级流表需要执行的表项。成员中的标志位=7(二进制为111)表示在三级流表中分别找到三个能够匹配的表项,指向流表表项的三个指针Ptr1、Ptr2和Ptr3有效。
表项设计单元在流表的数据结构设计过程中,在每个流表的尾端增加一个默认表项,标记为r[d],其优先级为0,默认表项是在流表初始化过程中自动加入的,其特殊的地方是:掩码全部成员都为0,无论什么类型的数据报文都能匹配上这条默认表项。数据报文在依次匹配流表的表项,如果前面的表项都不能匹配,则匹配到默认表项,这里增加的这个表项对于下面涉及到的流表的添加与快表的建立有着密切的关系。
快表建立单元建立快表时,执行以下步骤:
S101、多核处理器的核从数据报文p[j]中提取报文中对应的条件字段k[1],k[2],k[3],…,k[n]进行哈希运算,获得32位的Hash_Value(哈希值)。
S102、在快表用上面计算的哈希值取余快表表项桶最大值(Bucket_Max),得到b[Hash_Value%Bucket_Max]表项,标记为b[j],%表示取余运算,在b[j]的8个成员中寻找第一有效位为1的成员,根据表项条件字段k[1],k[2],k[3],…,k[n]与数据报文提取的条件字段匹配进行匹配,如果没有匹配到,说明该数据流在快表中尚未建立表项信息,则转到步骤S103,否则转到步骤S108。
S103、建立报文的数据流信息:将数据报文提取全部条件字段k[1],k[2],k[3],…,k[n]作为流的重要信息填入到空闲快表表项成员的关键字中,该表项的第一有效位=0,填写完成关键字后,将该表项的第一有效位置为1、状态位置为1,表示该表项正在被使用,但是表项信息尚没有完善,目前不可用。
S104、关联当前快表表项与第一张流表:如果标志位“与”001为“真”,则直接转到步骤S106,表明快表与第一张流表表项已经关联;否则执行如下步骤:将数据报文提取的信息关键字与第一张流表的表项进行逐一匹配,匹配过程是:将数据报文提取的关键字首先同流表表项r[j]中的掩码进行“与”运算,再将其结果与流表表项r[j]中的关键字进行“等于”判断,如果结果为真,则表明当前的表项被匹配上,直接转到步骤S105;否则继续下一条流表表项的匹配,直到匹配最后一条掩码为全0的默认表项为止。
S105、将快表表项成员中的第一指针Ptr1指向流表表项r[j],将表项r[j]结构体的引用计数增加1,并将标志位逻辑运算“或”上001,此时完成了当前快表表项与第一张流表表项的关联,如果表项r[j]上动作需要跳转到指定第二张流表,则转到步骤S106;动作需要跳转到第三张流表,则转到步骤S107;动作需要直接跳出查找,则转到步骤S108;动作无跳转,则默认转到步骤S106,继续进行流表查找。
S106、关联当前快表表项与第二张流表:同步骤S104,如果标志位“与”010为“真”,则直接转到步骤S107,表明快表与第二张流表表项已经关联;否则执行如下步骤:将数据报文提取的信息关键字与第二张流表的表项进行逐一匹配,匹配完成后同步骤S105,将快表表项成员中的第二指针Ptr2指向流表表项r[j],将表项r[j]结构体的引用计数增加1,并将标志位逻辑运算“或”上010,此时完成了当前快表快项与第二张流表表项的关联,如果表项r[j]上动作需要跳转到指定第三张流表,则转到步骤S107;动作需要直接跳出查找,则转到步骤S108;动作无跳转,则默认转到步骤S107,继续进行流表查找。
S107、关联当前快表表项与第三张流表:同步骤S104,如果标志位“与”100为“真”,则直接转到步骤S108,表明快表与第三张流表表项已经关联;否则执行如下步骤:将数据报文提取的信息关键字与第三张流表的表项进行逐一匹配,匹配完成后同步骤S105,将快表表项成员中的第三指针Ptr3指向流表表项r[j],将表项r[j]结构体的引用计数增加1,并将标志位逻辑运算“或”上100,此时完成了当前快表快项与第三张流表表项的关联。
S108、首先检测快表表项成员的第一有效位是否为1,如果不为1,将其设置为1;检测状态位是否为0,如果不为0,将其设置为0,至此表明该数据流快表表项信息全部建立完成;
S109、数据报文在快表中匹配上表项成员,并且表项第一有效位为1,状态位为0,根据成员中的指针,直接找到三张流表表项中所能够匹配的表项,并找到流表表项中需要执行的动作,动作包含:修改数据报文头部信息、指定出端口、丢弃、跳转到指定的流表或容许通过等内容。如果表项第一有效位为1,状态位为1,表明当前快表表项处于在建过程中,快表与流表关联信息需要进一步完善,返回步骤S104。
如果三张流表上的某一张流表L[x]上某一条表项r[j]被删除,流表表项删除单元执行以下步骤:
S201、在流表上找到待删除的流表表项r[j],将表项r[j]从链表中删除,然后将流表表头中的Count值减1。
S202、删除的表项r[j]不能直接释放内存,因为有可能多个快表的表项指向了该结构体空间,将该表项中的第二有效位设置成无效,如果r[j]的引用计数不大于0,转到步骤S203,否则转到步骤S204。
S203、如果r[j]的引用计数不大于0,说明当前已经没有快表指向该结构体空间,直接释放表项r[j]结构体内存。
S204、数据报文在使用快表表项成员的过程中,通过指针找流表的表项r[j],首先要对表项r[j]的第二有效位进行判断,如果第二有效位被设置成无效,则表明该访问列表已经被删除,表明需要执行的动作已经失效,转到步骤S205。
S205、将r[j]中的引用计数减1,如果r[j]的引用计数不大于0,则直接释放r[j]结构体内存,并且将当前快表表项成员中的对应的标志位清除,将状态位置为1;如果r[j]的引用计数大于0,后来的数据报文将重复步骤S204的操作,直到r[j]的引用计数不大于0,内存被释放为止。
如果三张流表上的某一张流表L[x]上增加一条表项r[j],流表表项添加单元执行以下步骤:
S301、在双链表上增加新表项r[j],表项添加的位置根据优先级字段比较来确定,要求插入的节点r[j-1]的优先级不低于新表项r[j]的优先级,完成插入操作后将将流表表头中的Count值加1。
S302、重新删除并添加该流表上从r[j+1]到尾部默认表项之间的全部表项。
S303、数据报文在使用快表表项成员的过程中,通过指针索引到流表的表项r[j+1]时,如果发现表项r[j+1]的第二有效位被设置成无效,则表明该访问列表已经被删除,表明需要执行的动作已经失效,将快表表项成员中对应的标志位置为0,状态位置为1。
S304、数据报文重新构建快表表项,该新建的快表表项成员,原先在流表L[x]没有表项可匹配,只能匹配默认表项r[d]或优先级较低的r[j+1]表项,当前存在的可能性是匹配上新增优先级更高的表项。
本发明实施例的原理详细阐述如下:
本发明实施例对多级流表组织结构的重新设计,增加数据流快表结构和多级流表中的默认表项结构,并增加处理流程和逻辑分析,让前期的数据流在进入多级流表查找的过程中自动建立快表,让快表关联到多级流表的表项上,后期的数据流可以直接通过快表找到多级流表中能够匹配的表项和需要执行的动作,将原本需要在SDN中多级流表中进行多次匹配转化为在快表中单次匹配,从而提高原有算法整体的性能。
更为重要的是,通过增加的结构设计和流程设计,能够感知多级流表的表项发生变更,并及时采取相应的变更动作,实时保证数据流匹配多级流表的正确性。如果流表表项被删除,设计能够自动解除相关的快表表项与被删除流表表项直接的关联关系,让快表表项重新去关联其没有被删除的流表表项;当流表表项增加,设计能够将快表中前期没有匹配到的流表表项,而默认匹配默认表项的数据流,迁移到去匹配新增加的流表表项。
本发明实施例中的数据流通过快表与直接与SDN设备中多级流表之间关联起来,并能够在流表表项发生删除或添加等变更时,自动解除流表与被删除表项之间的关系或主动去匹配新增加的表项。在保证算法的正确性和及时性的前提下,绕开了数据报文原本需要依次去多级流表匹配表项的步骤,将原本需要在多级流表中进行多次匹配转化为在快表中单次匹配,消减了传统算法平均匹配次数,提高了传统算法在多级流表上的处理性能。
本领域的技术人员可以对本发明实施例进行各种修改和变型,倘若这些修改和变型在本发明权利要求及其等同技术的范围之内,则这些修改和变型也在本发明的保护范围之内。
说明书中未详细描述的内容为本领域技术人员公知的现有技术。

Claims (10)

1.一种支持多核处理器的SDN多级流表并行查找的系统,其特征在于:该系统包括快表建立单元、表项设计单元、流表表项删除单元、流表表项添加单元,其中:
快表建立单元用于:前期的数据流进入多级流表查找时,自动在多级流表中增设一个基于数据流关键字的快表,记录每一级流表匹配的表项结果,将各类输入数据包头部的关键字哈希到众多快表上,进行数据的转发规则获取和转发,优化多核处理器的并行执行;数据流通过快表直接与SDN设备中的多级流表的表项关联起来;后期的数据流从快表中直接获取多级流表中的转发规则信息,直接通过快表找到多级流表中待匹配的表项和执行的动作,将SDN多级流表中进行的多次匹配转化为快表中的单次匹配;
表项设计单元用于:在多级流表匹配数据流的过程中,在快表表项中建立数据流的快表信息;在每一个多级流表的尾端增加一条默认表项;
流表表项删除单元用于:删除流表表项时,让原本关联到默认表项的快表感知多级流表的表项发生变更,自动解除流表与默认表项的关联,让快表表项重新去关联没有被删除的流表表项;
流表表项添加单元用于:添加流表表项时,让原本关联到默认表项的快表感知多级流表的表项发生变更,自动解除流表与默认表项的关联,重新绑定新增的流表表项。
2.如权利要求1所述的支持多核处理器的SDN多级流表并行查找的系统,其特征在于:所述快表的表项成员中包括三个用于记录数据流匹配的多级表项指针,每个输入的数据报文提取报文头部的关键字,进行哈希运算,根据哈希值的不同将数据包划分到不同的快表表项桶Bucket中,每个Bucket中含有8个表项成员,根据表项中的指针地址找到匹配的表项,执行相关的动作;
所述表项设计单元定义以下名词:
关键字的集合Key={k[1],k[2],k[3],…,k[n]},k[n]属于集合Key,k表示关键字的字段,字段有多个,根据SDN的版本不同有所区别,n是变量,k[n]是一条表项中的关键字字段第n个匹配字段,k[n]是数据报文中IP头部、用户数据报协议UDP头部信息或传输控制协议TCP头部信息;
关键字掩码的集合Mask={m[1],m[2],m[3],…,m[n]},m[n]属于集合Mask,m表示掩码,字段对应的掩码有多个,n是变量,m[n]是一条表项中的条件字段第n个匹配字段的掩码;
动作的集合Action={a[1],a[2],a[3],…,a[i]},a[i]属于集合Action,a表示执行的动作,执行的动作有多个,i是变量,a[i]是一条流表表项中第i个需要执行的动作;
流表的集合L[x]={r[1],r[2],r[3],…,r[j]},L是流表的集合,x是变量,L[x]表示第x张流表;r表示流表的表项,j是变量,r[j]属于流表集合L[x],r[j]是流表第x张流表L的第j条表项;
快表的集合F={b[1],b[2],b[3],…,b[n]},F表示快表的集合,b表示快表表项,n是变量,b[n]属于快表集合F,b[n]是快表F的第n条表项,快表表项桶Bucket的最大值Bucket_Max,表示快表F中容纳的最大表项数;
网络上所有可能的出现的数据包的集合P={p[1],p[2],p[3],…,p[j]},P表示数据报文的集合,j是变量,p[j]表示具有同一特征类型的数据报文;
所述表项设计单元设计快表表项时,为快表表项的每个成员设计以下数据域:
Valid1:第一有效位,用于表示该条表项的有效性;
Pending:状态位,用于表示该条表项的可用性;
Key:关键字,表项的关键字字段,是该表项的特征值;
Flag:标志位,表示后面数据域三个指针的有效性;
Ptr1:第一指针,用于指向第一级流表表项的指针;
Ptr2:第二指针,用于指向第二级流表表项的指针;
Ptr3:第三指针,用于指向第三级流表表项的指针;
流表的表项包括:
Prev:链表前向指针,用于指向前一个表项结构体的指针;
Prio:优先级字段,表示该表项的优先级高低,数值越大优先级越高,反之越小;
Key:关键字;
Mask:掩码,表示访问控制列表的表项中的掩码,用于与数据流信息的条件字段进行与运算;
Ref:引用计数,用于记录当前正在使用该表项的成员个数;
Valid2:第二有效位,用于表示该表项的有效性;
Lock:结构体资源锁,用于多个核间并行执行时,对表项资源的同步和互斥;
Action:执行动作,流表定义的执行动作;
Next1:第一链表后向指针,用于指向后一个表项结构体的指针,整个流表表项通过该指针以双链表的方式进行逻辑存储;
流表的表头包括:
Table_Id,表示流表的表号;
Count ,表示当前流表中含有多少个表项;
Lock:结构体资源锁;
Next2:第二链表后向指针,指向流表的第一个表项结构;
所述流表表项的存储结构为链表方式、树形结构或图形结构;
所述快表中一个成员的第一有效位被置为1,表示满足该成员关键字条件的数据报文,通过该成员直接找到多级流表需要执行的表项,成员中的标志位=7,二进制为111,表示在三级流表中分别找到三个能匹配的表项,指向流表表项的三个指针Ptr1、Ptr2和Ptr3有效;
所述表项设计单元在流表的数据结构设计过程中,在每个流表的尾端增加一个默认表项,标记为r[d],其优先级为0,默认表项是在流表初始化过程中自动加入的,掩码全部成员都为0,各种类型的数据报文都能匹配上这条默认表项;数据报文在依次匹配流表的表项,如果前面的表项都不能匹配,则匹配到默认表项。
3.如权利要求2所述的支持多核处理器的SDN多级流表并行查找的系统,其特征在于:所述快表建立单元建立快表时执行以下步骤:
S101、多核处理器的核从数据报文p[j]中提取报文中对应的条件字段k[1],k[2],k[3],…,k[n]进行哈希运算,获得32位的哈希值Hash_Value;
S102、在快表用上面计算的哈希值取余快表表项桶最大值Bucket_Max,得到b[Hash_Value%Bucket_Max]表项,标记为b[j],%表示取余运算,在b[j]的8个成员中寻找第一有效位为1的成员,根据表项条件字段k[1],k[2],k[3],…,k[n]与数据报文提取的条件字段匹配进行匹配,如果没有匹配到,说明该数据流在快表中尚未建立表项信息,则转到步骤S103,否则转到步骤S108;
S103、建立报文的数据流信息:将数据报文提取全部条件字段k[1],k[2],k[3],…,k[n]作为流的重要信息填入到空闲快表表项成员的关键字中,该表项的第一有效位=0,填写完成关键字后,将该表项的第一有效位置为1、状态位置为1,表示该表项正在被使用,但是表项信息尚没有完善,目前不可用;
S104、关联当前快表表项与第一张流表:如果标志位“与”001为“真”,则直接转到步骤S106,表明快表与第一张流表表项已经关联;否则执行如下步骤:将数据报文提取的信息关键字与第一张流表的表项进行逐一匹配,匹配过程是:将数据报文提取的关键字首先同流表表项r[j]中的掩码进行“与”运算,再将其结果与流表表项r[j]中的关键字进行“等于”判断,如果结果为真,则表明当前的表项被匹配上,直接转到步骤S105;否则继续下一条流表表项的匹配,直到匹配最后一条掩码为全0的默认表项为止;
S105、将快表表项成员中的第一指针Ptr1指向流表表项r[j],将表项r[j]结构体的引用计数增加1,并将标志位逻辑运算“或”上001,此时完成了当前快表表项与第一张流表表项的关联,如果表项r[j]上动作需要跳转到指定第二张流表,则转到步骤S106;动作需要跳转到第三张流表,则转到步骤S107;动作需要直接跳出查找,则转到步骤S108;动作无跳转,则默认转到步骤S106,继续进行流表查找;
S106、关联当前快表表项与第二张流表:同步骤S104,如果标志位“与”010为“真”,则直接转到步骤S107,表明快表与第二张流表表项已经关联;否则执行如下步骤:将数据报文提取的信息关键字与第二张流表的表项进行逐一匹配,匹配完成后同步骤S105,将快表表项成员中的第二指针Ptr2指向流表表项r[j],将表项r[j]结构体的引用计数增加1,并将标志位逻辑运算“或”上010,此时完成了当前快表快项与第二张流表表项的关联,如果表项r[j]上动作需要跳转到指定第三张流表,则转到步骤S107;动作需要直接跳出查找,则转到步骤S108;动作无跳转,则默认转到步骤S107,继续进行流表查找;
S107、关联当前快表表项与第三张流表:同步骤S104,如果标志位“与”100为“真”,则直接转到步骤S108,表明快表与第三张流表表项已经关联;否则执行如下步骤:将数据报文提取的信息关键字与第三张流表的表项进行逐一匹配,匹配完成后同步骤S105,将快表表项成员中的第三指针Ptr3指向流表表项r[j],将表项r[j]结构体的引用计数增加1,并将标志位逻辑运算“或”上100,此时完成了当前快表快项与第三张流表表项的关联;
S108、首先检测快表表项成员的第一有效位是否为1,如果不为1,将其设置为1;检测状态位是否为0,如果不为0,将其设置为0,至此表明该数据流快表表项信息全部建立完成;
S109、数据报文在快表中匹配上表项成员,并且表项第一有效位为1,状态位为0,根据成员中的指针,直接找到三张流表表项中匹配的表项,并找到流表表项中需要执行的动作,动作包含:修改数据报文头部信息、指定出端口、丢弃、跳转到指定的流表或容许通过;如果表项第一有效位为1,状态位为1,表明当前快表表项处于在建过程中,快表与流表关联信息需要进一步完善,返回步骤S104。
4.如权利要求3所述的支持多核处理器的SDN多级流表并行查找的系统,其特征在于:如果三张流表上的某一张流表L[x]上某一条表项r[j]被删除,流表表项删除单元执行以下步骤:
S201、在流表上找到待删除的流表表项r[j],将表项r[j]从链表中删除,然后将流表表头中的Count值减1;
S202、将该表项中的第二有效位设置成无效,如果r[j]的引用计数不大于0,转到步骤S203;否则转到步骤S204;
S203、如果r[j]的引用计数不大于0,说明当前已经没有快表指向该结构体空间,直接释放表项r[j]结构体内存;
S204、数据报文在使用快表表项成员的过程中,通过指针找流表的表项r[j],首先要对表项r[j]的第二有效位进行判断,如果第二有效位被设置成无效,则表明该访问列表已经被删除,表明需要执行的动作已经失效,转到步骤S205;
S205、将r[j]中的引用计数减1,如果r[j]的引用计数不大于0,则直接释放r[j]结构体内存,并且将当前快表表项成员中的对应的标志位清除,将状态位置为1;如果r[j]的引用计数大于0,后来的数据报文将重复步骤S204的操作,直到r[j]的引用计数不大于0,内存被释放为止。
5.如权利要求3所述的支持多核处理器的SDN多级流表并行查找的系统,其特征在于:如果三张流表上的某一张流表L[x]上增加一条表项r[j],流表表项添加单元执行以下步骤:
S301、在双链表上增加新表项r[j],表项添加的位置根据优先级字段比较来确定,要求插入的节点r[j-1]的优先级不低于新表项r[j]的优先级,完成插入操作后将流表的表头中的Count值加1;
S302、重新删除并添加该流表上从r[j+1]到尾部默认表项之间的全部表项;
S303、数据报文在使用快表表项成员的过程中,通过指针索引到流表的表项r[j+1]时,如果发现表项r[j+1]的第二有效位被设置成无效,则表明该访问列表已经被删除,表明需要执行的动作已经失效,将快表表项成员中对应的标志位置为0,状态位置为1;
S304、数据报文重新构建快表表项,新建的快表表项成员匹配默认表项r[d]、优先级较低的r[j+1]表项或新增优先级更高的表项。
6.一种支持多核处理器的SDN多级流表并行查找的方法,其特征在于,包括以下步骤:
前期的数据流进入多级流表查找时,自动在多级流表中增设一个基于数据流关键字的快表,记录每一级流表匹配的表项结果,将各类输入数据包头部的关键字哈希到众多快表上,进行数据的转发规则获取和转发,优化多核处理器的并行执行;数据流通过快表直接与SDN设备中的多级流表的表项关联起来;
后期的数据流从快表中直接获取多级流表中的转发规则信息,直接通过快表找到多级流表中待匹配的表项和执行的动作,将SDN多级流表中进行的多次匹配转化为快表中的单次匹配;
在多级流表匹配数据流的过程中,在快表表项中建立数据流的快表信息;在每一个多级流表的尾端增加一条默认表项;
删除流表表项时,让原本关联到默认表项的快表感知多级流表的表项发生变更,自动解除流表与默认表项的关联,让快表表项重新去关联没有被删除的流表表项;
添加流表表项时,让原本关联到默认表项的快表感知多级流表的表项发生变更,自动解除流表与默认表项的关联,重新绑定新增的流表表项。
7.如权利要求6所述的支持多核处理器的SDN多级流表并行查找的方法,其特征在于:所述快表的表项成员中包括三个用于记录数据流匹配的多级表项指针,每个输入的数据报文提取报文头部的关键字,进行哈希运算,根据哈希值的不同将数据包划分到不同的快表表项桶Bucket中,每个Bucket中含有8个表项成员,根据表项中的指针地址找到匹配的表项,执行相关的动作;
所述表项设计单元定义以下名词:
关键字的集合Key={k[1],k[2],k[3],…,k[n]},k[n]属于集合Key,k表示关键字的字段,字段有多个,根据SDN的版本不同有所区别,n是变量,k[n]是一条表项中的关键字字段第n个匹配字段,k[n]是数据报文中IP头部、用户数据报协议UDP头部信息或传输控制协议TCP头部信息;
关键字掩码的集合Mask={m[1],m[2],m[3],…,m[n]},m[n]属于集合Mask,m表示掩码,字段对应的掩码有多个,n是变量,m[n]是一条表项中的条件字段第n个匹配字段的掩码;
动作的集合Action={a[1],a[2],a[3],…,a[i]},a[i]属于集合Action,a表示执行的动作,执行的动作有多个,i是变量,a[i]是一条流表表项中第i个需要执行的动作;
流表的集合L[x]={r[1],r[2],r[3],…,r[j]},L是流表的集合,x是变量,L[x]表示第x张流表;r表示流表的表项,j是变量,r[j]属于流表集合L[x],r[j]是流表第x张流表L的第j条表项;
快表的集合F={b[1],b[2],b[3],…,b[n]},F表示快表的集合,b表示快表表项,n是变量,b[n]属于快表集合F,b[n]是快表F的第n条表项,快表表项桶Bucket的最大值Bucket_Max,表示快表F中容纳的最大表项数;
网络上所有可能的出现的数据包的集合P={p[1],p[2],p[3],…,p[j]},P表示数据报文的集合,j是变量,p[j]表示具有同一特征类型的数据报文;
所述表项设计单元设计快表表项时,为快表表项的每个成员设计以下数据域:
Valid1:第一有效位,用于表示该条表项的有效性;
Pending:状态位,用于表示该条表项的可用性;
Key:关键字,表项的关键字字段,是该表项的特征值;
Flag:标志位,表示后面数据域三个指针的有效性;
Ptr1:第一指针,用于指向第一级流表表项的指针;
Ptr2:第二指针,用于指向第二级流表表项的指针;
Ptr3:第三指针,用于指向第三级流表表项的指针;
流表的表项包括:
Prev:链表前向指针,用于指向前一个表项结构体的指针;
Prio:优先级字段,表示该表项的优先级高低,数值越大优先级越高,反之越小;
Key:关键字;
Mask:掩码,表示访问控制列表的表项中的掩码,用于与数据流信息的条件字段进行与运算;
Ref:引用计数,用于记录当前正在使用该表项的成员个数;
Valid2:第二有效位,用于表示该表项的有效性;
Lock:结构体资源锁,用于多个核间并行执行时,对表项资源的同步和互斥;
Action:执行动作,流表定义的执行动作;
Next1:第一链表后向指针,用于指向后一个表项结构体的指针,整个流表表项通过该指针以双链表的方式进行逻辑存储;
流表的表头包括:
Table_Id,表示流表的表号;
Count ,表示当前流表中含有多少个表项;
Lock:结构体资源锁;
Next2:第二链表后向指针,指向流表的第一个表项结构;
所述流表表项的存储结构为链表方式、树形结构或图形结构;
所述快表中一个成员的第一有效位被置为1,表示满足该成员关键字条件的数据报文,通过该成员直接找到多级流表需要执行的表项,成员中的标志位=7,二进制为111,表示在三级流表中分别找到三个能匹配的表项,指向流表表项的三个指针Ptr1、Ptr2和Ptr3有效;
所述表项设计单元在流表的数据结构设计过程中,在每个流表的尾端增加一个默认表项,标记为r[d],其优先级为0,默认表项是在流表初始化过程中自动加入的,掩码全部成员都为0,各种类型的数据报文都能匹配上这条默认表项;数据报文在依次匹配流表的表项,如果前面的表项都不能匹配,则匹配到默认表项。
8.如权利要求7所述的支持多核处理器的SDN多级流表并行查找的方法,其特征在于:所述快表建立单元建立快表时执行以下步骤:
S101、多核处理器的核从数据报文p[j]中提取报文中对应的条件字段k[1],k[2],k[3],…,k[n]进行哈希运算,获得32位的哈希值Hash_Value;
S102、在快表用上面计算的哈希值取余快表表项桶最大值Bucket_Max,得到b[Hash_Value%Bucket_Max]表项,标记为b[j],%表示取余运算,在b[j]的8个成员中寻找第一有效位为1的成员,根据表项条件字段k[1],k[2],k[3],…,k[n]与数据报文提取的条件字段匹配进行匹配,如果没有匹配到,说明该数据流在快表中尚未建立表项信息,则转到步骤S103,否则转到步骤S108;
S103、建立报文的数据流信息:将数据报文提取全部条件字段k[1],k[2],k[3],…,k[n]作为流的重要信息填入到空闲快表表项成员的关键字中,该表项的第一有效位=0,填写完成关键字后,将该表项的第一有效位置为1、状态位置为1,表示该表项正在被使用,但是表项信息尚没有完善,目前不可用;
S104、关联当前快表表项与第一张流表:如果标志位“与”001为“真”,则直接转到步骤S106,表明快表与第一张流表表项已经关联;否则执行如下步骤:将数据报文提取的信息关键字与第一张流表的表项进行逐一匹配,匹配过程是:将数据报文提取的关键字首先同流表表项r[j]中的掩码进行“与”运算,再将其结果与流表表项r[j]中的关键字进行“等于”判断,如果结果为真,则表明当前的表项被匹配上,直接转到步骤S105;否则继续下一条流表表项的匹配,直到匹配最后一条掩码为全0的默认表项为止;
S105、将快表表项成员中的第一指针Ptr1指向流表表项r[j],将表项r[j]结构体的引用计数增加1,并将标志位逻辑运算“或”上001,此时完成了当前快表表项与第一张流表表项的关联,如果表项r[j]上动作需要跳转到指定第二张流表,则转到步骤S106;动作需要跳转到第三张流表,则转到步骤S107;动作需要直接跳出查找,则转到步骤S108;动作无跳转,则默认转到步骤S106,继续进行流表查找;
S106、关联当前快表表项与第二张流表:同步骤S104,如果标志位“与”010为“真”,则直接转到步骤S107,表明快表与第二张流表表项已经关联;否则执行如下步骤:将数据报文提取的信息关键字与第二张流表的表项进行逐一匹配,匹配完成后同步骤S105,将快表表项成员中的第二指针Ptr2指向流表表项r[j],将表项r[j]结构体的引用计数增加1,并将标志位逻辑运算“或”上010,此时完成了当前快表快项与第二张流表表项的关联,如果表项r[j]上动作需要跳转到指定第三张流表,则转到步骤S107;动作需要直接跳出查找,则转到步骤S108;动作无跳转,则默认转到步骤S107,继续进行流表查找;
S107、关联当前快表表项与第三张流表:同步骤S104,如果标志位“与”100为“真”,则直接转到步骤S108,表明快表与第三张流表表项已经关联;否则执行如下步骤:将数据报文提取的信息关键字与第三张流表的表项进行逐一匹配,匹配完成后同步骤S105,将快表表项成员中的第三指针Ptr3指向流表表项r[j],将表项r[j]结构体的引用计数增加1,并将标志位逻辑运算“或”上100,此时完成了当前快表快项与第三张流表表项的关联;
S108、首先检测快表表项成员的第一有效位是否为1,如果不为1,将其设置为1;检测状态位是否为0,如果不为0,将其设置为0,至此表明该数据流快表表项信息全部建立完成;
S109、数据报文在快表中匹配上表项成员,并且表项第一有效位为1,状态位为0,根据成员中的指针,直接找到三张流表表项中匹配的表项,并找到流表表项中需要执行的动作,动作包含:修改数据报文头部信息、指定出端口、丢弃、跳转到指定的流表或容许通过;如果表项第一有效位为1,状态位为1,表明当前快表表项处于在建过程中,快表与流表关联信息需要进一步完善,返回步骤S104。
9.如权利要求8所述的支持多核处理器的SDN多级流表并行查找的方法,其特征在于:如果三张流表上的某一张流表L[x]上某一条表项r[j]被删除,流表表项删除单元执行以下步骤:
S201、在流表上找到待删除的流表表项r[j],将表项r[j]从链表中删除,然后将流表表头中的Count值减1;
S202、将该表项中的第二有效位设置成无效,如果r[j]的引用计数不大于0,转到步骤S203;否则转到步骤S204;
S203、如果r[j]的引用计数不大于0,说明当前已经没有快表指向该结构体空间,直接释放表项r[j]结构体内存;
S204、数据报文在使用快表表项成员的过程中,通过指针找流表的表项r[j],首先要对表项r[j]的第二有效位进行判断,如果第二有效位被设置成无效,则表明该访问列表已经被删除,表明需要执行的动作已经失效,转到步骤S205;
S205、将r[j]中的引用计数减1,如果r[j]的引用计数不大于0,则直接释放r[j]结构体内存,并且将当前快表表项成员中的对应的标志位清除,将状态位置为1;如果r[j]的引用计数大于0,后来的数据报文将重复步骤S204的操作,直到r[j]的引用计数不大于0,内存被释放为止。
10.如权利要求8所述的支持多核处理器的SDN多级流表并行查找的方法,其特征在于:如果三张流表上的某一张流表L[x]上增加一条表项r[j],流表表项添加单元执行以下步骤:
S301、在双链表上增加新表项r[j],表项添加的位置根据优先级字段比较来确定,要求插入的节点r[j-1]的优先级不低于新表项r[j]的优先级,完成插入操作后将流表的表头中的Count值加1;
S302、重新删除并添加该流表上从r[j+1]到尾部默认表项之间的全部表项;
S303、数据报文在使用快表表项成员的过程中,通过指针索引到流表的表项r[j+1]时,如果发现表项r[j+1]的第二有效位被设置成无效,则表明该访问列表已经被删除,表明需要执行的动作已经失效,将快表表项成员中对应的标志位置为0,状态位置为1;
S304、数据报文重新构建快表表项,新建的快表表项成员匹配默认表项r[d]、优先级较低的r[j+1]表项或新增优先级更高的表项。
CN201510737067.8A 2015-11-03 2015-11-03 支持多核处理器的sdn多级流表并行查找的系统及方法 Active CN105224692B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510737067.8A CN105224692B (zh) 2015-11-03 2015-11-03 支持多核处理器的sdn多级流表并行查找的系统及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510737067.8A CN105224692B (zh) 2015-11-03 2015-11-03 支持多核处理器的sdn多级流表并行查找的系统及方法

Publications (2)

Publication Number Publication Date
CN105224692A CN105224692A (zh) 2016-01-06
CN105224692B true CN105224692B (zh) 2018-08-31

Family

ID=54993660

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510737067.8A Active CN105224692B (zh) 2015-11-03 2015-11-03 支持多核处理器的sdn多级流表并行查找的系统及方法

Country Status (1)

Country Link
CN (1) CN105224692B (zh)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105656786B (zh) * 2016-01-22 2019-04-12 中国人民解放军国防科学技术大学 一种基于快、慢表的路由器查表方法
CN107295038B (zh) * 2016-03-31 2021-02-09 华为技术有限公司 一种建立接口组的方法及装置
CN107528794B (zh) * 2016-06-19 2021-01-15 华为技术有限公司 一种数据处理方法和装置
CN106789733B (zh) * 2016-12-01 2019-12-20 北京锐安科技有限公司 一种提高大规模网络流表查找效率的装置及方法
CN107682266B (zh) * 2017-09-12 2021-02-26 杭州迪普科技股份有限公司 流表项的匹配方法及装置、计算机可读存储介质
CN108600107B (zh) * 2017-11-07 2021-06-01 北京交通大学 一种可自定义内容字段的流匹配方法
CN109802892A (zh) * 2017-11-17 2019-05-24 英业达科技有限公司 比对流量表的方法及交换器
CN108092800A (zh) * 2017-11-29 2018-05-29 浙江工商大学 基于sdn元模型的工业实时智能网络体系架构模型
CN109921994A (zh) * 2017-12-12 2019-06-21 上海叠念信息科技有限公司 基于OpenFlow两级流表的网络数据包转发方法
CN108337172B (zh) * 2018-01-30 2020-09-29 长沙理工大学 大规模OpenFlow流表加速查找方法
CN110324245B (zh) 2018-03-31 2021-03-23 华为技术有限公司 一种基于集成流表转发报文的方法及装置
CN108710552B (zh) * 2018-05-04 2022-04-12 北京航天控制仪器研究所 一种基于VxWorks的惯性器件图形化测试系统
CN110807003B (zh) * 2018-07-18 2023-03-24 成都华为技术有限公司 修改访问控制列表的引用计数的方法和装置
CN109447276B (zh) * 2018-09-17 2021-11-02 烽火通信科技股份有限公司 一种机器学习系统、设备及应用方法
CN111343110B (zh) * 2018-12-19 2022-03-29 中国电信股份有限公司 报文处理方法、sdn交换机及计算机可读存储介质
CN109660406A (zh) * 2019-01-18 2019-04-19 天津七二通信广播股份有限公司 一种基于蓝图及链表实现的综合射频系统功能重构的方法
CN110474845A (zh) * 2019-08-19 2019-11-19 广州西麦科技股份有限公司 流表项淘汰方法及相关装置
CN111736982B (zh) * 2020-05-12 2023-12-08 深圳震有科技股份有限公司 一种5g数据转发平面的数据转发处理方法和服务器
CN111953609B (zh) * 2020-08-07 2022-10-11 平安科技(深圳)有限公司 基于ovs的数据包处理方法及相关设备
CN114374648B (zh) * 2020-10-14 2024-03-19 芯启源(南京)半导体科技有限公司 一种np芯片结合tcam实现智能网卡的方法
CN112202814B (zh) * 2020-11-04 2022-02-08 中国电子科技集团公司第三十研究所 一种路由交换设备内生安全动态防护功能的处理方法
CN114666287B (zh) * 2020-12-08 2023-10-31 中国科学院声学研究所 一种具有分级状态自动维护的状态编程方法
CN112632079B (zh) * 2020-12-30 2023-07-21 联想未来通信科技(重庆)有限公司 一种数据流标识的查询方法及装置
CN113645188B (zh) * 2021-07-07 2023-05-09 中国电子科技集团公司第三十研究所 一种基于安全关联的数据包快速转发方法
CN113645137B (zh) * 2021-08-02 2022-05-31 清华大学 一种软件定义网络多级流表压缩方法及系统
CN114338747B (zh) * 2021-12-31 2023-07-25 四川启睿克科技有限公司 支持设备自定义上报数据报文的云端场景控制系统及方法
CN114760237B (zh) * 2022-03-11 2024-04-19 深圳市风云实业有限公司 一种基于tcam表的多级流表构建方法
CN114978809B (zh) * 2022-06-23 2024-01-12 惠州华阳通用电子有限公司 一种车载以太网vlan节点配置方法
CN116915703B (zh) * 2023-09-13 2023-12-08 中移(苏州)软件技术有限公司 表项驱逐方法、装置及电子设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011129146A (ja) * 2011-01-27 2011-06-30 Optim Corp ネットワーク上の情報を自動検索する情報検索システム、情報検索装置、情報検索方法、記録媒体及びプログラム
CN102938000A (zh) * 2012-12-06 2013-02-20 武汉烽火网络有限责任公司 一种高速并行的无锁流表路由查找方法
CN103368851A (zh) * 2013-07-22 2013-10-23 武汉烽火网络有限责任公司 基于资源复用的Openflow流表存储优化方法
CN104363159A (zh) * 2014-07-02 2015-02-18 北京邮电大学 一种基于软件定义网络的开放虚拟网络构建系统和方法
CN104539457A (zh) * 2014-12-30 2015-04-22 北京邮电大学 基于软件定义技术的设备统一管控的方法、装置和系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011129146A (ja) * 2011-01-27 2011-06-30 Optim Corp ネットワーク上の情報を自動検索する情報検索システム、情報検索装置、情報検索方法、記録媒体及びプログラム
CN102938000A (zh) * 2012-12-06 2013-02-20 武汉烽火网络有限责任公司 一种高速并行的无锁流表路由查找方法
CN103368851A (zh) * 2013-07-22 2013-10-23 武汉烽火网络有限责任公司 基于资源复用的Openflow流表存储优化方法
CN104363159A (zh) * 2014-07-02 2015-02-18 北京邮电大学 一种基于软件定义网络的开放虚拟网络构建系统和方法
CN104539457A (zh) * 2014-12-30 2015-04-22 北京邮电大学 基于软件定义技术的设备统一管控的方法、装置和系统

Also Published As

Publication number Publication date
CN105224692A (zh) 2016-01-06

Similar Documents

Publication Publication Date Title
CN105224692B (zh) 支持多核处理器的sdn多级流表并行查找的系统及方法
US11102120B2 (en) Storing keys with variable sizes in a multi-bank database
CN104572983B (zh) 基于内存的散列表的构建方法、文本查找方法及相应装置
US9269411B2 (en) Organizing data in a hybrid memory for search operations
CN102779308B (zh) 一种广告投放方法及系统
CN111382327B (zh) 一种字符串匹配装置及方法
US20190280976A1 (en) Algorithmic Longest Prefix Matching in Programmable Switch
US9871727B2 (en) Routing lookup method and device and method for constructing B-tree structure
US20140269307A1 (en) Content Addressable Memory with Reduced Power Consumption
CN104361296B (zh) 一种并行的大容量访问控制列表的查找方法
CN111966284A (zh) 一种OpenFlow大规模流表弹性节能与高效查找架构及方法
AU2016230539B2 (en) Retrieval device, retrieval method, program, and recording medium
CN105591914B (zh) 一种openflow流表的查表方法和装置
WO2011124030A1 (zh) 路由表项的存储方法和装置
WO2021104393A1 (zh) 多规则流分类的实现方法、设备和存储介质
CN109981464A (zh) 一种在fpga中实现的tcam电路结构及其匹配方法
CN106487769B (zh) 一种访问控制列表acl的实现方法及装置
Han et al. A novel routing algorithm for IoT cloud based on hash offset tree
CN110020272A (zh) 缓存方法、装置以及计算机存储介质
CN106453091B (zh) 路由器转发平面的等价路由管理方法和装置
Hsieh et al. Multiprefix trie: A new data structure for designing dynamic router-tables
Kuo et al. A memory-efficient TCAM coprocessor for IPv4/IPv6 routing table update
CN105791132B (zh) 一种基于多路搜索树路由查找的表项更新方法及装置
CN110138661A (zh) 基于神经网络的命名数据网内容存储池
CN105721627B (zh) 一种ip网络流数据在线匿名化方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20190125

Address after: 430074 No. 6, High-tech Fourth Road, Donghu High-tech Development Zone, Wuhan City, Hubei Province

Patentee after: Fenghuo Communication Science &. Technology Co., Ltd.

Address before: 430074 Guandong Optical Communication Industry Building, No. 5 Donghu High-tech Dongxin Road, Wuhan City, Hubei Province

Patentee before: Wuhan Fenghuo Network Co., Ltd.

TR01 Transfer of patent right