CN112632079B - 一种数据流标识的查询方法及装置 - Google Patents
一种数据流标识的查询方法及装置 Download PDFInfo
- Publication number
- CN112632079B CN112632079B CN202011602099.4A CN202011602099A CN112632079B CN 112632079 B CN112632079 B CN 112632079B CN 202011602099 A CN202011602099 A CN 202011602099A CN 112632079 B CN112632079 B CN 112632079B
- Authority
- CN
- China
- Prior art keywords
- tuple
- hash
- hash value
- data flow
- bucket
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2457—Query processing with adaptation to user needs
- G06F16/24578—Query processing with adaptation to user needs using ranking
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D30/00—Reducing energy consumption in communication networks
- Y02D30/50—Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开一种数据流标识的查询方法及装置,接收数据报文,从数据报文中提取出第一N元组;使用第一哈希函数对第一N元组进行变换,得到第一哈希值,使用第二哈希函数对第一N元组进行变换,得到第二哈希值;根据第一哈希值查找哈希表,获取相应的桶链表,桶链表中包含特定数量的哈希桶;根据第二哈希值查找桶链表,获取相应的哈希桶中存储的地址信息;根据地址信息获得相应地址空间中存储的第二N元组;第一N元组与第二N元组一致时,根据第二N元组,到流表中查询对应的数据流标识作为数据报文的数据流标识。
Description
技术领域
本发明涉及数据查询领域,尤其涉及一种数据流标识的查询方法及装置。
背景技术
流表是DPI系统的底层关键技术,通过提取数据中的N元组信息作为键值,用于支撑流量识别和分类的上层处理,它的设计实现对系统的性能有着重要的影响。在移动4G/5G网络中,对高密度DPI设备的新建业务突发和并发连接等指标提出了更高的要求,现有软件方案的流表设计很难满足使用,而且对多线程的占用消耗了大量的处理器资源,传统的基于硬件设计的流表HASH算法和流表项结构也不适合DPI系统的场景。
发明内容
本发明提供一种数据流标识的查询方法和装置,以至少解决现有技术中存在的以上技术问题。
本发明一方面提供一种数据流标识的查询方法,该方法包括:
接收数据报文,从所述数据报文中提取出第一N元组;
使用第一哈希函数对所述第一N元组进行变换,得到第一哈希值,使用第二哈希函数对所述第一N元组进行变换,得到第二哈希值;
根据所述第一哈希值查找哈希表,获取相应的桶链表,所述桶链表中包含特定数量的哈希桶;根据所述第二哈希值查找所述桶链表,获取相应的哈希桶中存储的地址信息;
根据所述地址信息获得相应地址空间中存储的第二N元组;
所述第一N元组与所述第二N元组一致时,根据所述第二N元组,到流表中查询对应的数据流标识作为所述数据报文的数据流标识。
其中,所述根据所述第一哈希值查找哈希表失败时,该方法还包括:
以所述第一哈希值作为键名,桶链表作为键值,生成一条新的哈希表项;
在所述桶链表中的第一个哈希桶中存储所述第一N元组的地址信息,并将所述第二哈希值作为该哈希桶的索引;
将所述第一N元组作为键名,从数据流标识表中申请数据流标识作为键值,生成一条新的流表表项。
其中,所述根据所述第二哈希值查找所述桶链表失败时,该方法还包括:
在所述桶链表中第一个空闲哈希桶中存储所述第一N元组的地址信息,并将所述第二哈希值作为该哈希桶的索引;
将所述第一N元组作为键名,从数据流标识表中申请数据流标识作为键值,生成一条新的流表表项。
其中,所述从数据流标识表中申请数据流标识后,该方法还包括:在时间戳表中添加所述数据流标识对应的表项,对该表项中的记录的时间戳进行更新。
其中,所述到流表中查询对应的数据流标识后,该方法还包括:对时间戳表中该数据流标识对应的表项中记录的时间戳进行更新。
其中,所述对时间戳表中该数据流标识对应的表项中记录的时间戳进行更新后,该方法还包括:
根据所述时间戳判断时间戳表中对应的表项是否老化;
判断结果为老化时,将该表项删除,并将对应的数据流标识添加到数据流标识表中。
其中,所述提取出第一N元组之后,将第一N元组存入信息缓存中。
其中,所述得到第一哈希值之后,将所述第一哈希值存入第一哈希值缓存中,并根据所述第一哈希值查找哈希表,包括:根据所述第一哈希值构建读请求,根据读请求查找哈希表,获取相应的桶链表,将所述桶链表存入哈希表缓存中。
其中,所述得到第二哈希值之后,将所述第二哈希值存入第二哈希值缓存中。
其中,所述根据所述第二哈希值查找所述桶链表,包括:从第二哈希值缓存中获取第二哈希值,从哈希表缓存中获取桶链表,根据所述第二哈希值查找所述桶链表,获取相应的哈希桶中存储的地址信息;
所述根据所述地址信息获得相应地址空间存储的第二N元组,包括:根据所述地址信息构建读请求,根据读请求到相应的地址空间中获取包含第二N元组的流表表项,将该流表表项存入流表缓存中。
其中,所述第一N元组与所述第二N元组一致时,根据所述第二N元组,到流表中查询对应的数据流标识作为所述数据报文的数据流标识,包括:从所述信息缓存中获取第一N元组,从所述流表缓存中获取流表表项中的第二N元组,比对所述第一N元组和所述第二N元组,比对结果一致时,获取所述流表表项中的数据流标识作为所述数据报文的数据流标识。
其中,所述根据读请求查找哈希表,获取相应的桶链表,或者所述根据读请求到相应的地址空间中获取包含第二N元组的流表表项,包括:
构建多个第一FIFO队列和一个第二FIFO队列,所述第一FIFO队列包括请求FIFO队列和结果FIFO队列;
将所述读请求写入相应的第一FIFO队列中的请求FIFO队列,将所述读请求依次写入第二FIFO队列;
轮询所述多个第一FIFO队列中的请求FIFO队列,对于当前轮询到的请求FIFO队列,读取特定数量的读请求;
根据读请求获取查询结果,所述查询结果为所述桶链表或所述流表表项;
将所述查询结果写入相应的第一FIFO队列中的结果FIFO队列;
从所述第二FIFO队列中读取读请求,根据该读请求对应的第一FIFO队列的标识从相应的第一FIFO队列中的结果FIFO队列读取查询结果。
本发明另一方面提供一种数据流标识的查询装置,该装置包括:
接收模块,用于接收数据报文,从数据报文中提取出第一N元组;
查表模块,用于计算第一哈希值与第二哈希值,根据第一哈希值查找哈希表,获取相应的桶链表,根据第二哈希值查找桶链表,获取相应的哈希桶中存储的地址信息,根据所述地址信息获得所述地址信息中所指的地址空间存储的第二N元组,判断第一N元组与第二N元组是否一致,根据所述第二N元组,到流表中查询对应的数据流标识作为所述数据报文的数据流标识。
在本发明上述的方案中,针对DPI应用,构造了一组流表项内容(包括时间戳表、数据流标识表、哈希表和流表)和格式,及其在内存中的地址段划分方法(即使用第一哈希值和第二哈希值作为索引),实现了高效的写回和索引,使用将数据流的查询方法分为三级,每级中的各个流程都能同时进行,提高了查询效率,降低了各级逻辑复杂度的同时减少了流表操作的关键路径,优化了流表访存控制,提高了读取与写入的效率,大幅度地提升了存储访问IOPPS。
附图说明
图1示出了一实施例所示的数据流标识的查询方法流程图
图2示出了一实施例所示的三级流水线流程示意图
图3示出了一实施例所示的流表访存优化流程示意图
图4示出了一实施例所示的数据流标识的查询装置结构示意图
具体实施方式
为使本发明的目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了减少查询过程中的逻辑复杂度,优化访存效率,提升存储访问IOPPS,如图1所示,本发明实施例提供了一种数据流标识的查询方法,该方法包括:
步骤101,接收数据报文,从所述数据报文中提取出第一N元组。
接收数据报文,从数据报文中提取出第一N元组,其中,所述第一N元组可为七元组,其中可包含外层VLAN ID、GTPU的TEID、内层源IP和目的IP、IP协议类型、内层TCP或/UDP的源端口号和目的端口号等信息。
步骤102,使用第一哈希函数对所述第一N元组进行变换,得到第一哈希值,使用第二哈希函数对所述第一N元组进行变换,得到第二哈希值。
使用第一哈希函数对第一N元组进行变换,得到第一哈希值,使用第二哈希函数对第一N元组进行变换,得到第二哈希值。
其中,经过哈希函数变换后得到的第一哈希值和第二哈希值的大小要比第一N元组小,易于储存和读取。
例如,第一N元组为“8237”,第一哈希函数为对其平方后取中间三位数,“8237”平方后得到的数为“67848169”,则取“848”为第一哈希值,第二哈希函数为第一N元组除以12后得到的余数,则取“5”为第二哈希值。需要指出的是,本发明示例对于两个哈希函数不做限制。
步骤103,根据所述第一哈希值查找哈希表,获取相应的桶链表,所述桶链表中包含特定数量的哈希桶。
将第一哈希值与哈希表表项的表名进行匹配,匹配成功则获得对应的表值,表值就是一个桶链表,桶链表包含特定数量的哈希桶,例如可为8个哈希桶。
步骤104,根据所述第二哈希值查找所述桶链表,获取相应的哈希桶中存储的地址信息。
桶链表上的多个哈希桶依次排序,在存储数据时,从第一个哈希桶开始,当第一个哈希桶已存入数据,则从第二个哈希桶、即第一个空闲的哈希桶开始。哈希桶在存入数据后,可为该哈希桶分配一个索引。在该示例中,哈希桶的索引即为第二哈希值。
这里,可将第二哈希值与桶链表中的每个哈希桶的索引进行匹配,匹配成功则获得对应的值、即存储第二N元组的地址空间的地址信息。
步骤105,根据所述地址信息获得相应地址空间存储的第二N元组。
根据地址信息去对应的地址空间中获取第二N元组。在本发明示例中,数据存储可采用DDR。
步骤106,所述第一N元组与所述第二N元组一致时,根据所述第二N元组,到流表中查询对应的数据流标识作为所述数据报文的数据流标识。
将第一N元组与第二N元组进行比对,比对结果一致时,根据第二N元组去流表中查询对应的数据流标识,该数据流标识就是该条数据报文的数据流标识。
在步骤103中,根据所述第一哈希值查找哈希表失败时,该方法还包括:
步骤201,以所述第一哈希值作为键名,桶链表作为键值,生成一条新的哈希表项。
新建一条新的哈希表表项,以第一哈希值作为该表项的表名,生成一个包含特定数量的哈希桶的桶链表作为该表项的表值,插入哈希表中,这里新建的桶链表中各哈希桶为空。
步骤202,在所述桶链表中的第一个哈希桶中存储所述第一N元组的地址信息,并将所述第二哈希值作为该哈希桶的索引。
在新建的这条哈希表表项的表值,也就是桶链表中的第一个哈希桶中存储第一N元组的地址信息,将第二哈希值作为该哈希桶的索引,可根据该索引找到该哈希桶。
步骤203,将所述第一N元组作为键名,从数据流标识表中申请数据流标识作为键值,生成一条新的流表表项。
新建一条新的流表表项,以第一N元组作为该表项的键名,从数据流标识表中申请一个数据流标识作为该表项的键值,插入流表中。
在步骤104中,根据所述第二哈希值查找所述桶链表失败时,该方法还包括:
步骤301,在所述桶链表中第一个空闲哈希桶中存储所述第一N元组的地址信息,并将所述第二哈希值作为该哈希桶的索引。
根据第一哈希值查找成功、且第二哈希值查找失败时,在该桶链表中第一个空闲的哈希桶(例如,桶链表的第一个哈希桶已存入数据,若第二个哈希桶是空的,则第二个哈希桶为该桶链表当前的第一个空闲哈希桶)中存储第一N元组的地址信息,将第二哈希值作为该哈希桶的索引,可根据该索引找到该哈希桶。
步骤302,将所述第一N元组作为键名,从数据流标识表中申请数据流标识作为键值,生成一条新的流表表项。
新建一条新的流表表项,以第一N元组作为该表项的键名,从数据流标识表中申请一个数据流标识作为该表项的键值,插入流表中。
在步骤106中,所述到流表中查询对应的数据流标识后,该方法还包括:
步骤401,对时间戳表中该数据流标识对应的表项中记录的时间戳进行更新。
对于当前接收到的数据报文,在流表中查询到对应的数据流标识后,意味着该数据流标识代表的会话连接接到了新的数据报文,即该会话连接更新了,所以在时间戳表中对该数据流标识对应的表项中记录的时间戳进行更新。
在步骤203或步骤302中,所述从数据流标识表中申请数据流标识后,该方法还包括:
步骤501,在时间戳表中添加所述数据流标识对应的表项,对该表项中的记录的时间戳进行更新。
对于当前接收到的数据报文,从数据流标识表中申请数据流标识,意味着有新的会话连接,那么根据该数据流标识在时间戳表中新建一条表项,表项内容包括一个记录的时间戳,对该数据流标识对应的表项中记录的时间戳进行更新。
在步骤401或501中,对该数据流标识对应的表项中记录的时间戳进行更新后,该方法还包括:
步骤601,根据所述时间戳判断时间戳表中对应的表项是否老化。
判断表项是否老化的方式有多种:
一是,实时的对时间戳表中的表项进行老化:将该数据流标识对应的表项中记录的时间戳与实时的时间戳进行对比,若对比时间超过预设的时间值时,则判定该数据流标识已老化,该数据流标识所对应的会话连接结束,不会再有更新数据。
一是,定期的对时间戳表中的表项进行老化:每隔一段时间对时间戳表中的任意表项进行检测,将当前时间的时间戳减去该表项中记录的时间戳,得到差值时间戳,若差值时间戳超过预设的数值时,则判定该数据流标识已老化,该数据流标识所对应的会话连接结束,不会再有更新数据。
步骤602,判断结果为老化时,将该表项删除,并将对应的数据流标识添加到数据流标识表中。
判断结果为老化时,从时间戳表中将该条表项删除,并将该条表项中的数据流标识添加到数据流标识表中。由于数据流标识表中的资源、即数据流标识是有限的,因此,可以通过老化机制来实现数据流标识的重复利用,保证系统的正常运行。
如图2所示,为了提高查询效率,本发明实施例提供的数据流标识的查询过程分为三级,下面按照三级流水线的流程示意图对本发明提供的实施例进行说明。
三级流水线的第一级:
所述提取出第一N元组之后,将第一N元组存入信息缓存中。
从数据报文中提取出第一N元组后,将第一N元组存入信息缓存(Info buffer)中。
所述得到第一哈希值之后,将所述第一哈希值存入第一哈希值缓存中,并根据所述第一哈希值查找哈希表,包括:根据所述第一哈希值构建读请求,根据读请求查找哈希表,获取相应的桶链表,将所述桶链表存入哈希表缓存中。在计算得到第一哈希值后,将第一哈希值存入Hash1buffer中,并根据第一哈希值构建读请求,将读请求发送给查询接口,查询接口接收到读请求后,将第一哈希值与哈希表中表项的表名进行匹配,匹配成功后,获得对应的表值,也就是对应的桶链表,查询接口再将得到的桶链表返回,将返回的桶链表存入Hash表buffer中。
所述得到第二哈希值之后,将所述第二哈希值存入第二哈希值缓存中。在计算得到第二哈希值后,将第二哈希值存入Hash2 buffer中。
三级流水线的第二级:
从第二哈希值缓存中获取第二哈希值,从哈希表缓存中获取桶链表,根据所述第二哈希值查找所述桶链表,获取相应的哈希桶中存储的地址信息。从Hash2 buffer中获取第二哈希值,从Hash表buffer中获取桶链表,将第二哈希值与桶链表的哈希桶的索引进行匹配,匹配成功后获取相应的哈希桶中所存储的地址信息,该地址信息指向了存储第二N元组的地址空间。
根据所述地址信息构建读请求,根据读请求到相应的地址空间中获取包含第二N元组的流表表项,将该流表表项存入流表缓存中。根据获取的地址信息构建读请求,将该读请求发送给查询接口,查询接口在接收到该读请求后,根据该地址信息到相应的地址空间中获取包含第二N元组的流表表项,并将该流表表项作为结果返回,将该流表表项存入流表buffer中。
三级流水线的第三级:
从信息缓存中获取第一N元组,从流表缓存中获取流表表项中的第二N元组,比对所述第一N元组和所述第二N元组,比对结果一致时,获取所述流表表项中的数据流标识作为所述数据报文的数据流标识。从Info buffer中获取第一N元组,从流表buffer中获取流表表项,从该流表表项中获取第二N元组,将第一N元组与第二N元组进行比对,对比结果一致时,获取该流表表项中的数据流标识作为该数据报文的数据流标识。
上述方法中,将数据流的查询方法分为三级,每级中的各个流程都能同时进行,提高了查询效率,降低了各级逻辑复杂度的同时减少了流表操作的关键路径。
如图3所示,为了提高读取与写入效率,本发明实施例提供的数据流标识的查询方法对流表访存控制进行了优化,该实例中,基于DDR实现访存控制,下面按照流表访存优化流程示意图对流表访存优化的流程进行描述,包括:
步骤801,构建多个第一FIFO队列和一个第二FIFO队列,所述第一FIFO队列包括请求FIFO队列和结果FIFO队列。
构建多个第一FIFO队列和一个第二FIFO队列,在该实例中,第一FIFO队列包括BG0FIFO、BG1 FIFO、BG2 FIFO和BG3 FIFO四个请求FIFO队列,BGO0 FIFO、BGO1 FIFO、BGO2FIFO和BGO3 FIFO四个结果FIFO队列,BGID FIFO队列为第二FIFO队列。
步骤802,将所述读请求写入相应的第一FIFO队列中的请求FIFO队列,将所述读请求依次写入第二FIFO队列。
该实例中,读请求可为上述查找哈希表的读取请求,用于获取相应的桶链表;也可以是上述查找流表表项的读请求,用于到相应的地址空间中获取包含第二N元组的流表表项。该实例并不限于这两种读请求,对于任何接收到的读请求均适用。
将读请求写入相应的第一FIFO队列中的请求FIFO队列中,在一个示例中,可为每个请求FIFO队列配置对应的条件,当读请求满足该条件时,即可将该读请求写入该请求FIFO队列,该示例对于每个请求FIFO队列配置对应的条件不做限制,相应的,查询结果要写入与该请求FIFO队列对应的结果FIFO队列(即请求FIFO队列和结果FIFO队列具有相同的第一FIFO队列标识)。
同时,将所有的读请求依次(读请求达到的顺序,先到先写入)写入第二FIFO队列中。
步骤803,轮询所述多个第一FIFO队列中的请求FIFO队列,对于当前轮询到的请求FIFO队列,读取特定数量的读请求。
对多个第一FIFO队列中的请求FIFO队列进行轮询,对于当前轮询到的请求FIFO队列,读取特定数量的读请求。
例如,请求FIFO队列的轮询顺序为:BG0 FIFO→BG1 FIFO→BG2FIFO→BG3 FIFO,当前轮询到的请求FIFO队列为BG0 FIFO,BG0 FIFO中有读请求1、读请求2和读请求3,读取前两个读请求,则从BG0 FIFO中读取读请求1和读请求2。
步骤804,根据读请求获取查询结果,所述查询结果为所述桶链表或所述流表表项;
根据读请求获取查询结果,若读请求是根据第一哈希值构建的,那么查询结果为桶链表,若读请求是根据地址信息构建的,那么查询结果为流表表项。
步骤805,将所述查询结果写入相应的第一FIFO队列中的结果FIFO队列。
将获取的查询结果写入相应的第一FIFO队列中的结果FIFO队列中。
例如,根据读请求1获取到查询结果1,根据读请求2获取到查询结果2,根据读请求3获取到查询结果3,读请求1是从BG0 FIFO中读取到的,读请求2和读请求3是从BG1 FIFO中读取到的,那么查询结果1应写入BGO0 FIFO中,查询结果2和查询结果3应依次写入BGO1FIFO中(因为在BG1 FIFO中读请求2在先、读请求3在后,则从BG1FIFO中读取时先读取读请求2,再读取读请求3,那么查询时,先根据读请求2查询获取查询结果2,再根据读请求3再获取查询结果3,则查询结果2先写入BGO1 FIFO、查询结果3后写入BGO1 FIFO)。
步骤806,从所述第二FIFO队列中读取读请求,根据该读请求对应的第一FIFO队列的标识从相应的第一FIFO队列中的结果FIFO队列读取查询结果。
根据第二FIFO队列中记录的读请求,获取该读请求对应的第一FIFO队列的标识,根据该读请求对应的第一FIFO队列的标识从相应的第一FIFO队列中的结果FIFO队列读取查询结果。
第二FIFO队列可以保证读请求的正确顺序,如此,可以保证按照正确的顺序返回查询结果。
在本发明实施例提供的数据流的查询方法中,针对DPI应用,构造了一组流表项内容(包括时间戳表、数据流标识表、哈希表和流表)和格式,及其在内存中的地址段划分方法(即使用第一哈希值和第二哈希值作为索引),实现了高效的写回和索引,将数据流的查询方法分为三级,每级中的各个流程都能同时进行,提高了查询效率,降低了各级逻辑复杂度的同时减少了流表操作的关键路径,优化了流表访存控制,提高了读取与写入的效率,大幅度地提升了存储访问IOPPS。
本发明一实施例还提供了一种数据流的查询装置,如图4所示,该装置包括:
接收模块10,用于接收数据报文,从数据报文中提取出第一N元组;
查表模块20,用于计算第一哈希值与第二哈希值,根据第一哈希值查找哈希表,获取相应的桶链表,根据第二哈希值查找桶链表,获取相应的哈希桶中存储的地址信息,根据所述地址信息获得所述地址信息中所指的地址空间存储的第二N元组,判断第一N元组与第二N元组是否一致,根据所述第二N元组,到流表中查询对应的数据流标识作为所述数据报文的数据流标识。
其中,该装置还包括:建表模块30,用于以所述第一哈希值作为键名,桶链表作为键值,生成一条新的哈希表项,在所述桶链表中的第一个哈希桶中存储所述第一N元组的地址信息,并将所述第二哈希值作为该哈希桶的索引,将所述第一N元组作为键名,从数据流标识表中申请数据流标识作为键值,生成一条新的流表表项;
流号管理模块40,用于从数据流标识表中申请数据流标识,提供给所述建表模块30。
其中,所述建表模块30,还用于在所述桶链表中第一个空闲哈希桶中存储所述第一N元组的地址信息,并将所述第二哈希值作为该哈希桶的索引,将所述第一N元组作为键名,从数据流标识表中申请数据流标识作为键值,生成一条新的流表表项;
所述流号管理模块40,还用于从数据流标识表中申请数据流标识,提供给所述建表模块30。
其中,所述从数据流标识表中申请数据流标识后,所述建表模块30,还用于在时间戳表中添加所述数据流标识对应的表项,对该表项中的记录的时间戳进行更新;
所述到流表中查询对应的数据流标识后,所述建表模块30,还用于对时间戳表中该数据流标识对应的表项中记录的时间戳进行更新。
其中,所述建表模块30,还用于根据所述时间戳判断时间戳表中对应的表项是否老化,判断结果为老化时,将该表项删除,并将对应的数据流标识添加到所述数据流标识表中。
其中,所述建表模块30,还用于所述提取出第一N元组之后,将第一N元组存入信息缓存中,所述得到第一哈希值之后,将所述第一哈希值存入第一哈希值缓存中,并根据所述第一哈希值查找哈希表,包括:根据所述第一哈希值构建读请求,根据读请求查找哈希表,获取相应的桶链表,将所述桶链表存入哈希表缓存中,所述得到第二哈希值之后,将所述第二哈希值存入第二哈希值缓存中;
所述查表模块20,还用于根据读请求查找哈希表,获取相应的桶链表,提供给所述建表模块30。
其中,所述查表模块20,还用于所述根据所述第二哈希值查找所述桶链表,包括:从第二哈希值缓存中获取第二哈希值,从哈希表缓存中获取桶链表,根据所述第二哈希值查找所述桶链表,获取相应的哈希桶中存储的地址信息,所述根据所述地址信息获得相应地址空间存储的第二N元组,包括:根据所述地址信息构建读请求,根据读请求到相应的地址空间中获取包含第二N元组的流表表项,将该流表表项存入流表缓存中。
其中,所述查表模块20,还用于所述第一N元组与所述第二N元组一致时,根据所述第二N元组,到流表中查询对应的数据流标识作为所述数据报文的数据流标识,包括:从所述信息缓存中获取第一N元组,从所述流表缓存中获取流表表项中的第二N元组,比对所述第一N元组和所述第二N元组,比对结果一致时,获取所述流表表项中的数据流标识作为所述数据报文的数据流标识。
其中,所述查表模块20,还用于所述根据读请求查找哈希表,获取相应的桶链表,或者所述根据读请求到相应的地址空间中获取包含第二N元组的流表表项,包括:构建多个第一FIFO队列和一个第二FIFO队列,所述第一FIFO队列包括请求FIFO队列和结果FIFO队列,将所述读请求写入相应的第一FIFO队列中的请求FIFO队列,并将所述读请求依次写入第二FIFO队列,轮询所述多个第一FIFO队列中的请求FIFO队列,对于当前轮询到的请求FIFO队列,读取特定数量的读请求,根据读请求获取查询结果,所述查询结果为所述桶链表或所述流表表项,将所述查询结果写入相应的第一FIFO队列中的结果FIFO队列,从所述第二FIFO队列中读取读请求,根据该读请求对应的第一FIFO队列的标识从相应的第一FIFO队列中的结果FIFO队列读取查询结果。
除了上述方法和设备以外,本申请的实施例还可以是计算机程序产品,其包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本申请各种实施例的方法中的步骤。
所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本申请实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
此外,本申请的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本申请各种实施例的方法中的步骤。
所述计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
以上结合具体实施例描述了本申请的基本原理,但是,需要指出的是,在本申请中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本申请的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本申请为必须采用上述具体的细节来实现。
本申请中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“如但不限于”,且可与其互换使用。
还需要指出的是,在本申请的装置、设备和方法中,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本申请的等效方案。
提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本申请。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本申请的范围。因此,本申请不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。
为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本申请的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。
Claims (10)
1.一种数据流标识的查询方法,包括:
接收数据报文,从所述数据报文中提取出第一N元组;
使用第一哈希函数对所述第一N元组进行变换,得到第一哈希值,使用第二哈希函数对所述第一N元组进行变换,得到第二哈希值;
根据所述第一哈希值查找哈希表,获取相应的桶链表,所述桶链表中包含特定数量的哈希桶;根据所述第二哈希值查找所述桶链表,获取相应的哈希桶中存储的地址信息;
根据所述地址信息获得相应地址空间中存储的第二N元组;
所述第一N元组与所述第二N元组一致时,根据所述第二N元组,到流表中查询对应的数据流标识作为所述数据报文的数据流标识。
2.根据权利要求1所述的数据流标识的查询方法,所述根据所述第一哈希值查找哈希表失败时,该方法还包括:
以所述第一哈希值作为键名,桶链表作为键值,生成一条新的哈希表项;
在所述桶链表中的第一个哈希桶中存储所述第一N元组的地址信息,并将所述第二哈希值作为该哈希桶的索引;
将所述第一N元组作为键名,从数据流标识表中申请数据流标识作为键值,生成一条新的流表表项。
3.根据权利要求1所述的数据流标识的查询方法,所述根据所述第二哈希值查找所述桶链表失败时,该方法还包括:
在所述桶链表中第一个空闲哈希桶中存储所述第一N元组的地址信息,并将所述第二哈希值作为该哈希桶的索引;
将所述第一N元组作为键名,从数据流标识表中申请数据流标识作为键值,生成一条新的流表表项。
4.根据权利要求2或3所述的数据流标识的查询方法,
所述从数据流标识表中申请数据流标识后,该方法还包括:在时间戳表中添加所述数据流标识对应的表项,对该表项中的记录的时间戳进行更新;
所述到流表中查询对应的数据流标识后,该方法还包括:对时间戳表中该数据流标识对应的表项中记录的时间戳进行更新。
5.根据权利要求4所述的数据流标识的查询方法,该方法还包括:
根据所述时间戳判断时间戳表中对应的表项是否老化;
判断结果为老化时,将该表项删除,并将对应的数据流标识添加到所述数据流标识表中。
6.根据权利要求1所述的数据流标识的查询方法,
所述提取出第一N元组之后,将第一N元组存入信息缓存中;
所述得到第一哈希值之后,将所述第一哈希值存入第一哈希值缓存中,并根据所述第一哈希值查找哈希表,包括:根据所述第一哈希值构建读请求,根据读请求查找哈希表,获取相应的桶链表,将所述桶链表存入哈希表缓存中;
所述得到第二哈希值之后,将所述第二哈希值存入第二哈希值缓存中。
7.根据权利要求6所述的数据流标识的查询方法,
所述根据所述第二哈希值查找所述桶链表,包括:从第二哈希值缓存中获取第二哈希值,从哈希表缓存中获取桶链表,根据所述第二哈希值查找所述桶链表,获取相应的哈希桶中存储的地址信息;
所述根据所述地址信息获得相应地址空间存储的第二N元组,包括:根据所述地址信息构建读请求,根据读请求到相应的地址空间中获取包含第二N元组的流表表项,将该流表表项存入流表缓存中。
8.根据权利要求7所述的数据流标识的查询方法,所述第一N元组与所述第二N元组一致时,根据所述第二N元组,到流表中查询对应的数据流标识作为所述数据报文的数据流标识,包括:
从所述信息缓存中获取第一N元组,从所述流表缓存中获取流表表项中的第二N元组,比对所述第一N元组和所述第二N元组,比对结果一致时,获取所述流表表项中的数据流标识作为所述数据报文的数据流标识。
9.根据权利要求8所述的数据流标识的查询方法,所述根据读请求查找哈希表,获取相应的桶链表,或者所述根据读请求到相应的地址空间中获取包含第二N元组的流表表项,包括:
构建多个第一FIFO队列和一个第二FIFO队列,所述第一FIFO队列包括请求FIFO队列和结果FIFO队列;
将所述读请求写入相应的第一FIFO队列中的请求FIFO队列,并将所述读请求依次写入第二FIFO队列;
轮询所述多个第一FIFO队列中的请求FIFO队列,对于当前轮询到的请求FIFO队列,读取特定数量的读请求;
根据读请求获取查询结果,所述查询结果为所述桶链表或所述流表表项;
将所述查询结果写入相应的第一FIFO队列中的结果FIFO队列;
从所述第二FIFO队列中读取读请求,根据该读请求对应的第一FIFO队列的标识从相应的第一FIFO队列中的结果FIFO队列读取查询结果。
10.一种数据流标识的查询装置,包括:
接收模块,用于接收数据报文,从数据报文中提取出第一N元组;
查表模块,用于使用第一哈希函数对所述第一N元组进行变换,得到第一哈希值,使用第二哈希函数对所述第一N元组进行变换,得到第二哈希值,根据第一哈希值查找哈希表,获取相应的桶链表,根据第二哈希值查找桶链表,获取相应的哈希桶中存储的地址信息,根据所述地址信息获得所述地址信息中所指的地址空间存储的第二N元组,所述第一N元组与所述第二N元组一致时,根据所述第二N元组,到流表中查询对应的数据流标识作为所述数据报文的数据流标识。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011602099.4A CN112632079B (zh) | 2020-12-30 | 2020-12-30 | 一种数据流标识的查询方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011602099.4A CN112632079B (zh) | 2020-12-30 | 2020-12-30 | 一种数据流标识的查询方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112632079A CN112632079A (zh) | 2021-04-09 |
CN112632079B true CN112632079B (zh) | 2023-07-21 |
Family
ID=75286894
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011602099.4A Active CN112632079B (zh) | 2020-12-30 | 2020-12-30 | 一种数据流标识的查询方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112632079B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113595816A (zh) * | 2021-07-16 | 2021-11-02 | 清华大学 | 一种数据流测算方法、设备和存储介质 |
CN114253979B (zh) * | 2021-12-23 | 2023-10-03 | 北京百度网讯科技有限公司 | 一种报文处理方法、装置及电子设备 |
CN115438095A (zh) * | 2022-08-31 | 2022-12-06 | 中华人民共和国广东海事局 | 位置信息处理方法、装置、计算机设备和存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102682116A (zh) * | 2012-05-14 | 2012-09-19 | 中兴通讯股份有限公司 | 基于哈希表的表项处理方法及其装置 |
CN103354522A (zh) * | 2013-06-28 | 2013-10-16 | 华为技术有限公司 | 一种多级流表查找方法和装置 |
CN104917760A (zh) * | 2015-05-26 | 2015-09-16 | 北京邮电大学 | 一种基于sdn的全局流表生成方法及装置 |
WO2015176212A1 (zh) * | 2014-05-19 | 2015-11-26 | 北京东土科技股份有限公司 | 一种基于tcam和fpga的报文处理方法及装置 |
CN109921996A (zh) * | 2018-12-29 | 2019-06-21 | 长沙理工大学 | 一种高性能的OpenFlow虚拟流表查找方法 |
CN111131084A (zh) * | 2019-12-06 | 2020-05-08 | 湖南工程学院 | 一种QoS感知的OpenFlow流表分级存储架构及应用 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104639470B (zh) * | 2013-11-14 | 2019-05-31 | 中兴通讯股份有限公司 | 流标识封装方法及系统 |
US20160380884A1 (en) * | 2015-06-26 | 2016-12-29 | Futurewei Technologies, Inc. | Flow-Based Distribution in Hybrid Access Networks |
CN105224692B (zh) * | 2015-11-03 | 2018-08-31 | 武汉烽火网络有限责任公司 | 支持多核处理器的sdn多级流表并行查找的系统及方法 |
CN105515919A (zh) * | 2016-01-20 | 2016-04-20 | 中国电子科技集团公司第五十四研究所 | 一种基于哈希压缩算法的网络流量监控方法 |
CN106209506B (zh) * | 2016-06-30 | 2019-10-25 | 瑞斯康达科技发展股份有限公司 | 一种虚拟化深度包检测流量分析方法及系统 |
CN107800626B (zh) * | 2016-08-31 | 2020-10-09 | 阿里巴巴集团控股有限公司 | 数据报文的处理方法、装置及设备 |
CN109450814A (zh) * | 2018-11-26 | 2019-03-08 | 锐捷网络股份有限公司 | 分片报文的转发方法及装置 |
CN111431806B (zh) * | 2020-03-18 | 2022-07-08 | 北京京安佳新技术有限公司 | 一种流表处理方法和设备 |
-
2020
- 2020-12-30 CN CN202011602099.4A patent/CN112632079B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102682116A (zh) * | 2012-05-14 | 2012-09-19 | 中兴通讯股份有限公司 | 基于哈希表的表项处理方法及其装置 |
CN103354522A (zh) * | 2013-06-28 | 2013-10-16 | 华为技术有限公司 | 一种多级流表查找方法和装置 |
WO2015176212A1 (zh) * | 2014-05-19 | 2015-11-26 | 北京东土科技股份有限公司 | 一种基于tcam和fpga的报文处理方法及装置 |
CN104917760A (zh) * | 2015-05-26 | 2015-09-16 | 北京邮电大学 | 一种基于sdn的全局流表生成方法及装置 |
CN109921996A (zh) * | 2018-12-29 | 2019-06-21 | 长沙理工大学 | 一种高性能的OpenFlow虚拟流表查找方法 |
CN111131084A (zh) * | 2019-12-06 | 2020-05-08 | 湖南工程学院 | 一种QoS感知的OpenFlow流表分级存储架构及应用 |
Non-Patent Citations (1)
Title |
---|
蒋培成 等.OpenFlow软交换机的性能测量.重庆邮电大学学报(自然科学版).2013,第25卷(第01期),24-29. * |
Also Published As
Publication number | Publication date |
---|---|
CN112632079A (zh) | 2021-04-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112632079B (zh) | 一种数据流标识的查询方法及装置 | |
EP3035613B1 (en) | Ccn routing using hardware-assisted hash tables | |
CN107784044B (zh) | 表数据查询方法及装置 | |
CN111382327B (zh) | 一种字符串匹配装置及方法 | |
CN107368527B (zh) | 基于数据流的多属性索引方法 | |
CN107357843B (zh) | 基于数据流结构的海量网络数据查找方法 | |
CN102436513A (zh) | 分布式检索方法和系统 | |
CN106970958B (zh) | 一种流文件的查询与存储方法和装置 | |
CN112131218B (zh) | 一种基因对比的哈希查表方法、装置、设备及存储介质 | |
CN109766318B (zh) | 文件读取方法及装置 | |
CN106599091B (zh) | 基于键值存储的rdf图结构存储和索引方法 | |
WO2023131218A1 (zh) | 图数据的存储 | |
CN109460404A (zh) | 一种基于redis的高效Hbase分页查询方法 | |
CN114244752A (zh) | 流量统计方法、装置和设备 | |
CN116166690A (zh) | 一种面向高并发场景的混合向量检索方法及装置 | |
CN109739854A (zh) | 一种数据存储方法及装置 | |
CN111414527A (zh) | 相似项目的查询方法、装置及存储介质 | |
CN114006868B (zh) | 流量筛选方法及装置 | |
CN113779025B (zh) | 一种区块链中分类数据检索效率的优化方法、系统及应用 | |
CN113535803B (zh) | 一种基于关键字索引的区块链高效检索及可靠性验证方法 | |
CN108614879A (zh) | 小文件处理方法与装置 | |
CN112948410A (zh) | 数据处理方法、装置、设备及介质 | |
WO2015021848A1 (en) | Method and apparatus for data distribution and concurrence | |
CN116600031B (zh) | 报文处理方法、装置、设备及存储介质 | |
CN101872356B (zh) | 一种内存数据库处理性能的方法与系统 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |