CN112286966A - 一种数据流处理、恢复方法以及设备和存储介质 - Google Patents

一种数据流处理、恢复方法以及设备和存储介质 Download PDF

Info

Publication number
CN112286966A
CN112286966A CN202011011802.4A CN202011011802A CN112286966A CN 112286966 A CN112286966 A CN 112286966A CN 202011011802 A CN202011011802 A CN 202011011802A CN 112286966 A CN112286966 A CN 112286966A
Authority
CN
China
Prior art keywords
hash
flow
count value
bucket
stored
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
CN202011011802.4A
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.)
Tsinghua University
Original Assignee
Tsinghua University
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 Tsinghua University filed Critical Tsinghua University
Priority to CN202011011802.4A priority Critical patent/CN112286966A/zh
Publication of CN112286966A publication Critical patent/CN112286966A/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/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24568Data stream processing; Continuous queries
    • 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/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2255Hash tables
    • 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/2458Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
    • G06F16/2462Approximate or statistical queries

Landscapes

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

Abstract

本申请实施例提供一种数据流处理、恢复方法以及设备和存储介质,该数据流处理方法包括:基于主哈希表所存储的计数值、以及辅哈希表所存储的计数值、状态值和辅助计数值,确定主哈希表中是否存储有不活跃数据流的流记录项信息;状态值用于表征辅哈希表存储的哈希值所表示的流标识符对应的数据流的活跃状态;辅助计数值用于记录当一个数据包导致辅哈希表存储的哈希值发生变化时,这个数据包的流标识符在主哈希表中所映射的哈希桶中存储的最大计数值;若主哈希表中存储有不活跃数据流的流记录项信息,则将不活跃数据流的流记录项信息和待处理数据包的流标识符输出至数据服务器。如此,能够提高网络测量的性能。

Description

一种数据流处理、恢复方法以及设备和存储介质
技术领域
本申请实施例涉及但不限于互联网技术领域,尤其涉及一种数据流处理、恢复方法以及设备和存储介质。
背景技术
通过网络测量所产生的网络统计信息,使得网络运营商能够进行各种网络管理任务,例如网络配置错误的检测与纠正、流量工程和网络攻击检测等。
然而,在目前的基于数据流的网络测量方法中,一方面流标识符占用内存较多,另一方面,网络设备中的有限内存还会被不活跃数据流占用,导致活跃数据流被记录的机会减少,从而,降低了网络测量的性能。
发明内容
有鉴于此,本申请实施例提供一种数据流处理、恢复方法以及设备和存储介质,能够提高网络测量的性能。
本申请实施例主要提供如下技术方案:
第一方面,本申请实施例提供了一种数据流处理方法,包括:针对接收到的待处理数据包,获取所述待处理数据包的流标识符;当所述待处理数据包的流标识符在映射至主哈希表时发生哈希冲突,而在映射至辅哈希表时并未发生冲突时,则基于所述主哈希表所存储的计数值、以及所述辅哈希表所存储的计数值、状态值和辅助计数值,确定所述主哈希表中是否存储有不活跃数据流的流记录项信息;其中,所述状态值,用于表征所述辅哈希表存储的哈希值所表示的流标识符对应的数据流的活跃状态;所述辅助计数值,用于记录在数据包导致所述辅哈希表存储的哈希值发生变化时,所述数据包的流标识符在主哈希表中所映射的哈希桶中存储的最大计数值;若所述主哈希表中存储有不活跃数据流的流记录项信息,则将所述不活跃数据流的流记录项信息和所述待处理数据包的流标识符输出至数据服务器;其中,所述不活跃数据流的流记录项信息包括:计数值和流标识符的哈希值。
第二方面,本申请实施例提供了一种数据流恢复方法,包括:在第一时刻,接收到来自网络设备的第一流标识符;建立所述第一流标识符的哈希值到所述第一流标识符的第一映射关系,并将所述第一映射关系存入至字典中,其中,所述第一流标识符的哈希值根据所述第一流标识符进行哈希运算得到;在第二时刻,接收到来自网络设备的第二流标识符和待恢复的流记录项信息,其中,所述待恢复的流记录项信息包括:计数值和所述第一流标识符的哈希值,第二时刻在第一时刻之后;基于所述待恢复的流记录项信息,通过查询所述字典中的所述第一映射关系,获得恢复后的流记录项信息,其中,所述恢复后的流记录项信息包括:所述计数值和所述第一流标识符;建立所述第二流标识符的哈希值到所述第二流标识符的第二映射关系,并将所述第二映射关系存入至字典中,其中,所述第二流标识符的哈希值根据所述第二流标识符进行哈希运算得到。
第三方面,本申请实施例提供了一种电子设备,包括:至少一个处理器;以及与所述处理器连接的至少一个存储器、总线;其中,所述处理器、存储器通过所述总线完成相互间的通信;所述处理器用于调用所述存储器中的程序指令,以执行上述实施例中的数据流处理方法的步骤,或者,以执行上述实施例中的数据流恢复方法的步骤。
第四方面,本申请实施例提供了一种计算机可读存储介质,包括:存储的程序,其中,在所述程序运行时控制所述存储介质所在电子设备执行上述实施例中的数据流处理方法的步骤,或者,以执行上述实施例中的数据流恢复方法的步骤。
本申请实施例提供的数据流处理、恢复方法以及设备和存储介质,针对接收到的待处理数据包,获取待处理数据包的流标识符;接下来,可以将待处理数据包的流标识符映射至主哈希表和辅哈希表,当待处理数据包的流标识符在映射至主哈希表时发生哈希冲突,而待处理数据包的流标识符在映射至辅哈希表时未发生冲突时,就可以基于主哈希表所存储的计数值、以及辅哈希表所存储的计数值、状态值和辅助计数值,确定主哈希表中是否存储有不活跃数据流的流记录项信息;其中,状态值,用于表征辅哈希表存储的哈希值所表示的流标识符对应的数据流的活跃状态;辅助计数值,用于记录在数据包导致辅哈希表存储的哈希值发生变化时,数据包的流标识符在主哈希表中所映射的哈希桶中存储的最大计数值;最后,在确定出主哈希表中存储有不活跃数据流的流记录项信息时,就可以将该不活跃数据流的流记录项信息和待处理数据包的流标识符输出至数据服务器,其中,该不活跃数据流的流记录项信息可以包括:计数值和流标识符的哈希值。这样,一方面,主、辅哈希表中均仅存储流标识符的哈希值,而并不存储流标识符本身,因此内存占用较少;另一方面,在检测到不活跃数据流的流记录项信息时,通过输出不活跃数据流的流记录项信息至数据服务器,网络设备中的有限内存就不会被不活跃数据流占用,因此活跃数据流被记录的机会就会增多,从而减小网络设备的内存空间的消耗。此外,本申请实施例在检测到不活跃数据流的流记录项信息时,还会输出待处理数据包的流标识符,以便于数据服务器端恢复完整的流记录项信息。如此,能够大大提高网络测量的性能。
本申请的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请而了解。本申请的其他优点可通过在说明书以及附图中所描述的方案来实现和获得。
附图说明
附图用来提供对本申请技术方案的理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本申请的技术方案,并不构成对本申请技术方案的限制。
图1为本申请实施例中的数据流处理方法的流程示意图;
图2A为本申请实施例中的主哈希表中哈希桶的结构示意图;
图2B为本申请实施例中的辅哈希表中哈希桶的结构示意图;
图3为本申请实施例中的数据流恢复方法的流程示意图;
图4为本申请实施例中的数据流处理方法的示例性实例的示意图;
图5为本申请实施例中的电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。
本申请实施例提供一种数据流处理方法。在实际应用中,该数据流处理方法可以应用于网络设备中。
在一种示例性实施例中,上述网路设备可以为如交换机、路由器等具有很高转发性能的电子设备。
举例来说,以网路设备为交换机为例,该网络设备可以是实体交换机,也可以是虚拟交换机。
图1为本申请实施例中的数据流处理方法的流程示意图,如图1所示,该数据流处理方法可以包括:
步骤101:针对接收到的待处理数据包,获取待处理数据包的流标识符;
步骤102:确定待处理数据包的流标识符在映射至主哈希表时是否发生哈希冲突;
在一种示例性实施例中,在获取到待处理数据包的流标识符之后,可以执行步骤102先将待处理数据包的流标识符映射至主哈希表。接下来,若待处理数据包的流标识符在映射至主哈希表时发生哈希冲突,则可以执行步骤103再将待处理数据包的流标识符映射至辅哈希表。
在一种示例性实施例中,若待处理数据包的流标识符在映射至主哈希表时未发生哈希冲突,那么,根据待处理数据包的流标识符在映射至主哈希表时未发生哈希冲突的情况的不同,可以执行步骤1027或1028,以对主哈希表中未发生哈希冲突的哈希桶所存储的流记录项信息进行更新。其中,当多个第一哈希桶中存在不为空且所存储的流记录项信息中的流标识符的哈希值与第一哈希值(以与主哈希表对应的第一哈希函数对待处理数据包的流标识符进行哈希运算得到第一哈希值)相同的哈希桶时,则可以执行步骤1027,或者,当多个第一哈希桶中存在为空的哈希桶时,则可以步骤1028。
步骤103:确定待处理数据包的流标识符在映射至辅哈希表时是否发生哈希冲突;
在一种示例性实施例中,若待处理数据包的流标识符在映射至辅哈希表时未发生冲突,则可以执行步骤104,以确定主哈希表中是否存储有不活跃数据流的流记录项信息。
在一种示例性实施例中,若待处理数据包的流标识符在映射至辅哈希表时未发生冲突,在执行步骤104之前,可以先执行步骤1037或步骤1038,以对辅哈希表所存储的流记录项信息进行更新。即,若将待处理数据包的流标识符映射至辅哈希表并未发生冲突,则可以先通过执行步骤1037或步骤1038,将辅哈希表中的第二哈希桶(即待处理的流标识符在映射至辅哈希表时所映射的哈希桶)中所存储的状态值和计数值分别加1,再确定主哈希表中是否存储有不活跃数据流的流记录项信息。
在一种示例性实施例中,若待处理数据包的流标识符在映射至辅哈希表时发生了冲突,则可以执行步骤106,以对辅哈希表所存储的流记录项信息进行更新。
步骤104:基于主哈希表所存储的计数值、以及辅哈希表所存储的计数值、状态值和辅助计数值,确定主哈希表中是否存储有不活跃数据流的流记录项信息;
其中,状态值,用于表征辅哈希表存储的哈希值所表示的流标识符对应的数据流的活跃状态;辅助计数值,用于记录在数据包导致辅哈希表存储的哈希值发生变化时,数据包的流标识符在主哈希表中所映射的哈希桶中存储的最大计数值。
若主哈希表存储有不活跃数据流的流记录项信息,则可以执行步骤105。
步骤105:将不活跃数据流的流记录项信息和待处理数据包的流标识符输出至数据服务器。
其中,不活跃数据流的流记录项信息包括:计数值和流标识符的哈希值。
这里,流标识符的哈希值由流标识符经哈希函数进行运算得到。在实际应用中,不同位数的哈希值可以通过不同的哈希函数得到。
举例来说,流标识符可以包括:数据包的源IP地址、目的IP地址、协议类型、源端口号、目的端口号、下一头部等信息。其中,源IP地址、目的IP地址和协议类型是数据包的IP包头的字段,源端口号和目的端口号是数据包的TCP包头或UDP包头的字段。当然,流标识符也可以由其它能够标识数据包的信息组成。
这样,由于流标识符所占空间可能非常大(例如,在IPv6中由<源地址,目标地址,源端口号,目标端口号,下一头部>组成的流标识符占用内存为37字节),那么,令主哈希表中的哈希桶以及辅哈希表中的哈希桶均不直接存储流标识符,而是存储流标识符的哈希值、用于表示该流标识符所代表的数据流的大小的计数值,能够减少内存消耗。
下面对主哈希表和辅哈希表进行说明。
在一种示例性实施例中,可以预先在网络设备的内存中创建数据结构,该数据结构可以包括:主哈希表和辅哈希表。这里,主哈希表中的哈希桶用于记录流记录项信息,辅哈希表中的哈希桶用于在数据包的流标识符映射至主哈希表发生哈希冲突时,辅助记录流记录项信息。
在一种示例性实施例中,主哈希表的每个哈希桶、辅哈希表的每个哈希桶都可以存储一个流记录项信息。
在一种示例性实施例中,主哈希表的哈希桶所存储的流记录项信息可以包括:数据包的流标识符的哈希值以及用于表示该流标识符所对应的数据流的大小的计数值。
在一种示例性实施例中,辅哈希表的哈希桶所存储的流记录项信息可以包括:数据包的流标识符的哈希值、用于表示该流标识符所对应的数据流的大小的计数值、用于表征该流标识符所对应的数据流的活跃状态的状态值、以及辅助计数值。
在一种示例性实施例中,主哈希表可以为包括指纹域、计数器域的数据结构。举例来说,如图2A所示,主哈希表的指纹域、计数器域均可以设置为32位,那么,主哈希表的哈希桶所存储的流记录项信息可以包括:32位的流标识符的哈希值和32位的计数值。如此,内存占用较低。
在一种示例性实施例中,辅哈希表可以为包括摘要域、状态域、计数器域和截图域的数据结构。其中,摘要域用于存储数据包的流标识符的哈希值;状态域用于存储状态值,状态值用于表征第二哈希桶存储的流标识符的哈希值所对应的数据流的活跃状态的状态值;计数器域用于存储数据包的数量;截图域,用于存储辅助计数值,辅助计数值用于记录在数据包导致辅哈希表存储的哈希值发生变化时,该数据包的流标识符在主哈希表中所映射的哈希桶中存储的最大计数值。举例来说,如图2B所示,辅哈希表的摘要域、状态域、计数器域及截图域均可以设置为8位,那么,辅哈希表的哈希桶所存储的流记录项信息可以包括:8位的流标识符的哈希值、8位的状态值、8位的计数值及8位的辅助计数值。如此,内存占用较低。
在一种示例性实施例中,主哈希表可以对应于多个用于映射流标识符的哈希函数,辅哈希表可以对应于一个用于映射流标识符的哈希函数。
在一种示例性实施例中,与主哈希表对应的多个用于映射流标识符的哈希函数、以及与辅哈希表对应的一个用于映射流标识符的哈希函数不相同。
在实际应用中,可以根据实际情况(如网络设备的内存空间、网络测量的的复杂度等因素)来设置与主哈希表对应的用于映射流标识符的哈希函数的数量。在一种示例性实施例中,主哈希表可以对应于两个用于映射流标识符的哈希函数。
在一种示例性实施例中,主哈希表的数据结构可以包括但不限于以下两种实现方式:第一种方式,将主哈希表组织成一个大的哈希表;第二种方式,将主哈希表组织成多个子哈希表。
举例来说,以主哈希表包括多个子哈希表为例,每个子哈希表可以分别对应于一个用于映射流标识符的哈希函数。在实际应用中,针对每个子哈希表来说,通过该子哈希表所对应的哈希函数,就可以将数据包的流标识符映射到该子哈希表中的哈希桶中。那么,主哈希表中每个子哈希表中的每个哈希桶中可以存储32位计数值以及32位的流标识符的哈希值。
下面以具体示例分别对各个步骤进行说明。
首先,对步骤101进行说明。
在一种示例性实施例中,步骤101可以包括:在接收到待处理数据包后,对该待处理数据包进行解析,获取到该待处理数据包的流标识符。
其次,对步骤102进行说明。
在一种示例性实施例中,步骤102可以包括:
步骤1021:以与主哈希表对应的第一哈希函数对待处理数据包的流标识符进行哈希运算,得到第一哈希值;
步骤1022:若待处理数据包的流标识符所映射的主哈希表的多个第一哈希桶(即,待处理的流标识符在映射至主哈希表时所映射的哈希桶)均不为空,且待处理数据包的流标识符所映射的主哈希表的多个第一哈希桶所存储的流标识符的哈希值与第一哈希值均不相同,则可以确定待处理数据包的流标识符在映射至主哈希表时发生哈希冲突。
步骤1023:若多个第一哈希桶中存在不为空且所存储的流记录项信息中的流标识符的哈希值与第一哈希值相同的哈希桶(记为桶1),则可以确定待处理数据包的流标识符在映射至主哈希表中的该桶1时并未发生哈希冲突,即可以确定待处理数据包的流标识符在映射至主哈希表时未发生哈希冲突。
步骤1024:若多个第一哈希桶中存在为空的哈希桶(记为桶2),则可以确定待处理数据包的流标识符在映射至主哈希表中的该桶2时并未发生哈希冲突,即可以确定待处理数据包的流标识符在映射至主哈希表时未发生哈希冲突。
在一种示例性实施例中,在步骤1021之前,步骤102还可以包括:
步骤1025:通过与主哈希表对应的用于映射流标识符的哈希函数对待处理数据包的流标识符进行哈希运算,得到待处理数据包的流标识符所映射的主哈希表的第一哈希桶的地址;
步骤1026:基于第一哈希桶的地址,在主哈希表中查找第一哈希桶。
举例来说,以主哈希表包括多个子哈希表Mi、每个子哈希表Mi对应一个用于映射流标识符的哈希函数hi为例,在获取到待处理数据包的流标识符后,依次通过与第i个子哈希表对应的第i个哈希函数对数据包的流标识符进行哈希运算,得到第i个第一哈希桶的地址;基于第i个第一哈希桶的地址,在第i个子哈希表中查找第i个第一哈希桶。接下来,若第i个第一哈希桶为空,则确定将待处理数据包的流标识符映射至第i个子哈希表中的第i个第一哈希桶未发生哈希冲突。若第i个第一哈希桶不为空,获取第i个第一哈希桶中存储的流记录项信息中流标识符的哈希值,并通过与主哈希表对应的第一哈希函数k对待处理数据包的流标识符进行哈希运算,得到待处理数据包的流标识符的哈希值;若第i个第一哈希桶中存储的流记录项信息中数据包的流标识符的哈希值与该待处理数据包的流标识符的哈希值是相同的,则可以确定在待处理数据包的流标识符映射至第i个主哈希表中的第一哈希桶时并未发生哈希冲突。若所有子哈希表中的第一哈希桶均不为空,并且所有子哈希表中的第一哈希桶存储的流记录项信息中流标识符的哈希值与该待处理数据包的流标识符的哈希值都是不相同的,则可以确定在待处理数据包的流标识符映射至主哈希表中的第一哈希桶时并发生哈希冲突。
然后,对步骤103进行说明。
在一种示例性实施例中,步骤103可以包括:
步骤1031:以与辅哈希表对应的第二哈希函数对待处理数据包的流标识符进行哈希运算,得到第二哈希值。
步骤1032:若待处理数据包的流标识符所映射的辅哈希表中的第二哈希桶不为空,且待处理数据包的流标识符所映射的辅哈希表中的第二哈希桶所存储的流标识符的哈希值与第二哈希值相同,则可以确定在待处理数据包的流标识符映射至辅哈希表中的第二哈希桶时并未发生哈希冲突,即可以确定在待处理数据包的流标识符映射至辅哈希表时并未发生哈希冲突。
步骤1033:若辅哈希表中的第二哈希桶为空,则可以确定在待处理数据包的流标识符映射至辅哈希表中的第二哈希桶时并未发生哈希冲突,即可以确定在待处理数据包的流标识符映射至辅哈希表时并未发生哈希冲突。
步骤1034:若辅哈希表中的第二哈希桶不为空,且辅哈希表中的第二哈希桶所存储的流标识符的哈希值与第二哈希值不相同,则可以确定在待处理数据包的流标识符映射至辅哈希表中的第二哈希桶时发生了哈希冲突,即可以确定在待处理数据包的流标识符映射至辅哈希表时发生了哈希冲突。
在一种示例性实施例中,在步骤1031之前,步骤103还可以包括:
步骤1035:通过与辅哈希表对应的用于映射流标识符的哈希函数对待处理数据包的流标识符进行哈希运算,得到待处理数据包的流标识符所映射的辅哈希表的第二哈希桶的地址;
步骤1036:基于第二哈希桶的地址,在辅哈希表中查找第二哈希桶。
这里,辅哈希表对应的用于映射流标识符的哈希函数与主哈希表对应的用于映射流标识符的哈希函数不相同。
最后,以主哈希表中的第一哈希桶为多个为例,对步骤104进行说明。
在一种示例性实施例中,步骤104可以包括:
步骤1041:从待处理数据包的流标识符所映射的主哈希表中的多个第一哈希桶所存储的计数值中,确定出最小计数值和最大计数值;
步骤1042:确定待处理数据包的流标识符所映射的辅哈希表中的第二哈希桶所存储的计数值是否大于最小计数值;
若第二哈希桶所存储的计数值不大于最小计数值,则可以执行步骤1043至步骤1044,以确定主哈希表中是否存储有不活跃数据流的流记录项信息。若第二哈希桶所存储的计数值大于最小计数值,则可以执行步骤1045,以对主哈希表所存储的流记录项信息进行更新。
步骤1043:基于最大计数值、以及第二哈希桶所存储的状态值和辅助计数值,确定多个第一哈希桶中与最大计数值对应的哈希桶所存储的流记录项信息是否为不活跃数据流的流记录项信息;
步骤1044:基于多个第一哈希桶中与最大计数值对应的哈希桶所存储的流记录项信息是否为不活跃数据流的流记录项信息,确定主哈希表中是否存储有不活跃数据流的流记录项信息。
若多个第一哈希桶中与最大计数值对应的哈希桶所存储的流记录项信息为不活跃数据流的流记录项信息,则表明主哈希表中存储有不活跃数据流的流记录项信息。若多个第一哈希桶中与最大计数值对应的哈希桶所存储的流记录项信息不为不活跃数据流的流记录项信息,则表明主哈希表中并未存储有不活跃数据流的流记录项信息。
在一种示例性实施例中,步骤1043可以包括:计算最大计数值与第二哈希桶所存储的辅助计数值之间的差值;基于第二哈希桶所存储的状态值是否大于差值,确定多个第一哈希桶中与最大计数值对应的哈希桶所存储的流记录项信息是否为不活跃数据流的流记录项信息。
如此,由于在数据包经过主哈希表的时候,已经记录了该数据包在匹配路径上具有最大计数值的流记录,而辅哈希表的第二哈希桶的截图域记录了导致第二哈希桶的摘要域更新的数据包在主哈希表中的匹配路径上记录的最大计数值,所以,可以认为当前数据包收集的最大计数值和导致第二哈希桶的摘要域更新的数据包收集的最大计数值对应的是同一个流记录,则这个流记录从第二哈希桶的摘要域被更新到现在所收到的数据包的个数为最大计数值与第二哈希桶的辅助计数值之间的差值。另一方面,第二哈希桶的状态域的值(即第二哈希桶所存储的状态值)可以作为这个第二哈希桶的摘要域所对应的数据流在相同的时间之内所收到的数据包个数的一个保守估计(即这个数据流所收到的数据包数可能要比第二哈希桶的状态域的值大)。所以,如果第二哈希桶所存储的状态值大于最大计数值与第二哈希桶的辅助计数值之间的差值,那么,就可以认为辅哈希表中第二哈希桶的摘要域所对应的数据流比主哈希表中多个第一哈希桶中所存储的最大计数值所对应的数据流更活跃。
在一种示例性实施例中,步骤1043可以包括:计算最大计数值与第二哈希桶所存储的辅助计数值之间的差值;基于第二哈希桶所存储的状态值是否大于差值与1之和,确定多个第一哈希桶中与最大计数值对应的哈希桶所存储的流记录项信息是否为不活跃数据流的流记录项信息。如此,通过设置当第二哈希桶所存储的状态值大于最大计数值与第二哈希桶所存储的辅助计数值之间的差值与1之和的时候,认为辅哈希表中第二哈希桶的摘要域所对应的数据流比主哈希表中多个第一哈希桶中所存储的最大计数值对应的数据流更活跃,从而提高网络测量的性能。(这里,我们采用最大计数值与第二哈希桶所存储的辅助计数值之间的差值与1之和,而不是采用最大计数值与第二哈希桶所存储的辅助计数值之间的差值,如此,能够避免出现特殊边界值而影响不活跃数据流的流记录项信息的导出效果)。
举例来说,当第二哈希桶所存储的状态值大于最大计数值与第二哈希桶所存储的辅助计数值之间的差值与1之和时,可以表明多个第一哈希桶中与最大计数值对应的哈希桶所存储的流记录项信息是一个不活跃数据流的流记录项信息。
在一种示例性实施例中,在步骤1042之后,若第二哈希桶所存储的计数值大于最小计数值,上述方法还可以包括:步骤1045:将多个第一哈希桶中与最小计数值对应的哈希桶所存储的流记录项信息和待处理数据包的流标识符输出至数据服务器,并将多个第一哈希桶中与最小计数值对应的哈希桶中所存储的流记录项信息更新为第二哈希桶所存储的计数值和待处理数据包的流标识符的哈希值。如此,就可以在确保减小网络设备的内存空间的消耗的情况下,还能够便于恢复完整的流记录项信息。
这里,当第二哈希桶所存储的计数值大于最小计数值时,表明辅哈希表中第二哈希桶所存储的流记录项信息所对应的数据流的大小要大于主哈希表中该最小计数值对应的哈希桶所存储的流记录项信息所对应的数据流的大小,因此,将该最小计数值对应的哈希桶所存储的流记录项信息输出至数据服务器,并用第二哈希桶所存储的计数值和待处理数据包的流标识符的哈希值覆盖该最小计数值对应的哈希桶所存储的流记录项信息。
需要说明的是,执行步骤105所输出的待处理数据包的流标识符与所输出的不活跃数据流的流记录项信息无关、执行步骤1045所输出的待处理数据包的流标识符与所输出的最小计数值对应的哈希桶所存储的流记录项信息无关,但它是必不可少的,因为单靠数据包的流标识符的哈希值不足以在数据服务器恢复完整的流记录项信息的标识符。
由上述内容可知,本申请实施例提供的数据流处理方法,针对接收到的待处理数据包,获取待处理数据包的流标识符;接下来,可以将待处理数据包的流标识符映射至主哈希表和辅哈希表,当待处理数据包的流标识符在映射至主哈希表时发生哈希冲突,而待处理数据包的流标识符在映射至辅哈希表时未发生冲突时,就可以基于主哈希表所存储的计数值、以及辅哈希表所存储的计数值、状态值和辅助计数值,确定主哈希表中是否存储有不活跃数据流的流记录项信息;其中,状态值,用于表征辅哈希表存储的哈希值所表示的流标识符对应的数据流的活跃状态;辅助计数值,用于记录在数据包导致辅哈希表存储的哈希值发生变化时,数据包的流标识符在主哈希表中所映射的哈希桶中存储的最大计数值;最后,在确定出主哈希表中存储有不活跃数据流的流记录项信息时,就可以将该不活跃数据流的流记录项信息和待处理数据包的流标识符输出至数据服务器,其中,该不活跃数据流的流记录项信息可以包括:计数值和流标识符的哈希值。这样,一方面,主、辅哈希表中均仅存储流标识符的哈希值,而并不存储流标识符本身,因此内存占用较少;另一方面,在检测到不活跃数据流的流记录项信息时,通过输出不活跃数据流的流记录项信息至数据服务器,网络设备中的有限内存就不会被不活跃数据流占用,因此活跃数据流被记录的机会就会增多,从而减小网络设备的内存空间的消耗。此外,本申请实施例在检测到不活跃数据流的流记录项信息时,还会输出待处理数据包的流标识符,以便于数据服务器端恢复完整的流记录项信息。如此,能够大大提高网络测量的性能。
基于前述实施例,下面对当待处理数据包的流标识符在映射至主哈希表中时未发生哈希冲突时,如何对主哈希表中未发生哈希冲突的哈希桶所存储的流记录项信息进行更新进行说明。
在一种示例性实施例中,若多个第一哈希桶中存在不为空且所存储的流记录项信息中的流标识符的哈希值与第一哈希值相同的哈希桶(记为桶1),则在步骤1023之后,上述方法还可以包括:
步骤1027:给该桶1所存储的流记录项信息中的计数值加1,并保持该桶1所存储流流记录项信息中的流标识符的哈希值不变。
在一种示例性实施例中,若多个第一哈希桶中存在为空的哈希桶(记为桶2),则在步骤1024之后,上述方法还可以包括:
步骤1028:则将待处理数据包的流标识符的哈希值(即第一哈希值)和计数值1作为流记录项信息存入该桶2中,并将待处理数据包的流标识符输出至数据服务器。
基于前述实施例,下面对当待处理数据包的流标识符在映射至主哈希表中发生哈希冲突,而在映射至辅哈希表时并未发生冲突时,如何对辅哈希表所存储的流记录项信息进行更新进行说明。
在一种示例性实施例中,若第二哈希桶(即待处理的流标识符在映射至辅哈希表时所映射的哈希桶)所存储的流记录项信息中的流标识符的哈希值与第二哈希值相同,则在步骤1032之后,在步骤104之前,上述方法还可以包括:
步骤1037:给第二哈希桶所存储的流记录项信息中的计数值加1、给第二哈希桶所存储的流记录项信息中的状态值加1,并保持第二哈希桶所存储的流记录项信息中的辅助计数值以及流标识符的哈希值不变。
在一种示例性实施例中,若第二哈希桶为空,则在步骤1033之后,在步骤104之前,上述方法还可以包括:
步骤1038:则将待处理数据包的流标识符的哈希值(即第二哈希值)、计数值1、状态值1、辅助计数值(根据由待处理数据包的流标识符所映射的主哈希表中第一哈希桶所存储的最大计数值得到)作为流记录项信息存入第二哈希桶中。
基于前述实施例,下面对当待处理数据包的流标识符在映射至主哈希表时发生哈希冲突,且在映射至辅哈希表时发生哈希冲突时,如何对辅哈希表所存储的流记录项信息进行更新进行说明。
在一种示例性实施例中,若待处理数据包的流标识符在映射至主哈希表时发生哈希冲突,且在映射至辅哈希表时发生哈希冲突,那么,在上述步骤103之后,上述方法还可以包括:
步骤106:根据辅哈希表所存储的状态值,对辅哈希表所存储的流记录项信息进行更新。
在一种示例性实施例中,步骤106还可以包括:
步骤1061:将辅哈希表中的第二哈希桶(即待处理的流标识符在映射至辅哈希表时所映射的哈希桶)所存储的状态值与0进行比较;
步骤1062:根据比较结果,对第二哈希桶所存储的流记录项信息进行更新。
在一种示例性实施例中,步骤1062可以包括:若第二哈希桶所存储的状态值大于0,则给第二哈希桶所存储的状态值减1,并保持第二哈希桶所存储的计数值、辅助计数值、及流标识符的哈希值不变。
在一种示例性实施例中,步骤1062可以包括:若第二哈希桶所存储的状态值等于0,则对第二哈希桶所存储的流记录项信息进行如下更新:将第二哈希桶所存储的流标识符的哈希值更新为待处理数据包的流标识符的哈希值、将第二哈希桶所存储的状态值更新为1、给第二哈希桶所存储的计数值加1、以及将第二哈希桶的辅助计数值更新为第一哈希桶所存储的最大计数值。
基于同一发明构思,本申请实施例提供了一种数据流恢复方法,应用于以下场景:从主哈希表中导出的流记录项信息中只包含了流标识符的哈希值和用于表示数据流的大小的计数值,但是没有包含流标识符本身(这里,流标识符本身是先于该流标识符的哈希值导出的);虽然也会导出流标识符本身,但是流标识符并不是和与该流标识符同时导出的流记录项信息中的流标识符的哈希值对应。如此,可以降低网络设备的内存消耗,提高网络测量的准确度。
图3为本申请实施例中的数据流恢复方法的流程示意图,如图3所示,该方法可以包括:
步骤301:在第一时刻,接收到来自网络设备的第一流标识符。
步骤302:建立第一流标识符的哈希值到第一流标识符的第一映射关系,并将第一映射关系存入至字典中。
其中,第一流标识符的哈希值根据第一流标识符进行哈希运算得到。
步骤303:在第二时刻,接收到来自网络设备的第二流标识符和待恢复的流记录项信息。
其中,待恢复的流记录项信息包括:计数值和第一流标识符的哈希值;第二时刻在第一时刻之后。
步骤304:基于待恢复的流记录项信息,通过查询字典中的第一映射关系,获得恢复后的流记录项信息。
其中,恢复后的流记录项信息包括:计数值和第一流标识符。
步骤305:建立第二流标识符的哈希值到第二流标识符的第二映射关系,并将第二映射关系存入至字典中。
其中,第二流标识符的哈希值根据第二流标识符进行哈希运算得到。
在一种示例性实施例中,步骤302可以包括:通过哈希函数对第一流标识符进行运算,得到第一流标识符的哈希值;建立第一流标识符的哈希值到第一流标识符的第一映射关系;将第一流标识符的哈希值到第一流标识符的第一映射关系存储至预先建立的字典中。如此,在第二时刻接收到包括计数值和第一流标识符的哈希值的待恢复的流记录项信息时,通过搜索字典就可以找到和该第一流标识符的哈希值对应的流标识符(即第一流标识符)。从而,无需额外的数据包,就可以无歧义地恢复完整的流记录项信息,得到恢复后的流记录项信息(包括:用于标识数据流的流标识符和用于表示数据流的大小的计数值)。
在一种示例性实施例中,在步骤304之后,该方法还可以包括:从字典中,删除第一流标识符的哈希值到第一流标识符的第一映射关系。如此,使得字典的规模不大于主哈希表的哈希桶的数目,这样,既能减少主哈希表中发生哈希冲突的概率,并且还能更为节省内存空间。
由上述内容可知,本申请实施例提供的数据流恢复方法,在第一时刻接收到流标识符本身(先于该流标识符的哈希值导出)后,可以建立第一流标识符的哈希值到第一流标识符的第一映射关系,并将第一映射关系存入至字典中,接下来,在第二时刻(在第一时刻之后的时刻),接收到网络设备发送的第二流标识符和待恢复的流记录项信息(只包含了第一流标识符的哈希值和用于表示数据流的大小的计数值流记录项信息)后,一方面,可以通过搜索字典所存储的第一映射关系,来恢复出完整的流记录项信息,得到恢复后的流记录项信息,其中,恢复后的流记录项信息包括:计数值和第一流标识符;另一方面,可以建立第二流标识符的哈希值到第二流标识符的第二映射关系,并将第二映射关系存入至字典中,以便在第三时刻(在第二时刻之后的时刻)接收到第二流标识符的哈希值时可以恢复出完整的流记录项信息。如此,可以降低网络设备的内存消耗,提高网络测量的准确度。
基于同一发明构思,本申请实施例提供了一种网络测量系统。该网络测量系统可以包括:网络设备和数据服务器。其中,网络设备可以用于如处理数据包、存储流记录项信息(如流标识符的哈希值和计数值)、向数据服务器输出流记录项信息和流标识符等;数据服务器可以用于如根据网路设备输出的流记录项信息和流标识符来恢复完整的流记录项信息(如流标识符和计数值)以记录数据流等。
在一种示例性实施例中,网络设备可以如交换机、路由器等。
下面以具体应用场景对本申请实施例所提供的数据流处理方法进行说明。
假设本申请实施例所提供的数据流处理方法应用于如下场景中:在网络设备中创建的哈希表包括:一个主哈希表M和一个辅辅哈希表A,其中,主哈希表M包含了d个子哈希表M1,M2,...,Md,d为正整数,子哈希表Mi分别对应于用于进行哈希映射的哈希函数hi(.),其中,i=1,2,...,d,辅辅哈希表A对应于用于进行哈希映射的哈希函数g(.)。其中,在表Mi的每个哈希桶中可以存储一个32位的流标识符的哈希值(记为流标识符的指纹信息)和一个32位的计数值,而不是直接存储流标识符本身;在辅哈希表中,每个哈希桶中可以存放一个8位的流标识符的哈希值(记为流标识符的摘要信息)、一个8位的状态值、一个8位的计数值、一个8位的辅助计数值。
步骤1:当数据包p到达网络设备时,网络设备可以先使用哈希函数h1将该数据包p的流标识符映射到子哈希表M1中的第一哈希桶M1[idx],这里,idx=h1(p.流标识符)。
在实施过程中,如果数据包p的流标识符在子哈希表M1中的所映射的第一哈希桶M1[idx]为空,则可以执行步骤2;如果子哈希表M1中的第一哈希桶M1[idx]中已经保存了与数据包p的流标识符的指纹信息相同的指纹信息的流记录项信息,则可以执行步骤3;如果子哈希表M1中的第一哈希桶M1[idx]中发生了哈希冲突(即,第一哈希桶M1[idx]中已经保存了与数据包p的流标识符的指纹信息不相同的指纹信息的流记录项信息),则可以执行步骤4。
这里,通过与主哈希表对应的用于生成指纹信息的哈希函数,对数据包p的流标识符进行运算,就可以得到32位的数据包p的流标识符的哈希值,即数据包p的流标识符的指纹信息。
步骤2:如果数据包p的流标识符在子哈希表M1中的所映射的第一哈希桶M1[idx]为空,则将该数据包p的流标识符的指纹信息和计数值1存储到第一哈希桶M1[idx]中,同时,将数据包p的流标识符输出到数据服务器。
步骤3:如果子哈希表M1中的第一哈希桶M1[idx]中已经保存了具有相同指纹信息的流记录项信息,则我们只需将其计数值增加1。在这两种情况下,我们都在主哈希表中找到了一个合适的哈希桶,因此对这个数据包的处理过程结束。
步骤4:如果子哈希表M1中的第一哈希桶M1[idx]中发生了哈希冲突,那么,依次在子哈希表M2,M3,...,Md中分别使用哈希函数h2(.),h3(.),...,hd(.)重复与步骤1到步骤3相同的过程,直到找到合适的第一哈希桶Mi[idx],就可以结束。这样,在将数据包p的流标识符向映射到表Mi进行映射的过程中,就可以得到一个数据包p的流标识符在主哈希表M中的匹配路径,即由数据包p的流标识符映射到的M1,M2,...,Md中的第一哈希桶组成的序列。当数据包p的流标识符经过它的匹配路径的时候,可以记录匹配路径上的一个最大计数值max和一个最小计数值min。
接下来,如果在将数据包p的流标识符映射到主哈希表M的过程中,并未在主哈希表M中找到合适的哈希桶(即数据包p的流标识符在主哈希表M中所映射的第一哈希桶都发生哈希冲突),就可以执行步骤5。
步骤5:使用哈希函数g(.)将数据包p的流标识符映射到辅哈希表A中的第二哈希桶A[idx]中,这里,idx=g(p.流标识符)。
在实施过程中,如果数据包p的流标识符在辅哈希表A中的所映射的第二哈希桶A[idx]为空,则可以执行步骤6;如果辅哈希表A中的第二哈希桶A[idx]中发生了哈希冲突(即,第二哈希桶A[idx]中已经保存了与数据包p的流标识符的摘要信息不相同的摘要信息的流记录项信息),则可以执行如步骤7或者步骤8所示的弹性冲突解决策略来更新辅哈希表A。如果辅哈希表A中的哈希桶A[idx]中已经保存了与数据包p的流标识符的摘要信息相同的摘要信息的流记录项信息,则可以执行步骤9。
这里,通过另一个用于生成指纹信息的哈希函数,对数据包p的流标识符进行运算,就可以得到8位的数据包p的流标识符的哈希值,即数据包p的流标识符的摘要信息。
步骤6:如果辅哈希表A中的第二哈希桶A[idx]是一个空的哈希桶,则可以使用数据包p的流标识符的8位摘要信息、状态值1、计数值1以及辅助计数值max%28对第二哈希桶A[idx]进行初始化,其中%是取模操作。
这里,在实际应用中,若第二哈希桶A[idx]中的计数器的位数与主哈希表中计数器的位数设置相同时,可以不用做取模操作,直接将max作为计数值对第二哈希桶A[idx]进行初始化。
步骤7:若第二哈希桶A[idx]中的状态值等于0,将数据包p的流标识符的摘要信息覆盖第二哈希桶A[idx]中原有的流记录项信息中的摘要信息、将第二哈希桶A[idx]中原有的流记录项信息中的状态值更新为1、给第二哈希桶A[idx]中原有的流记录项信息中的计数值加1、将第二哈希桶A[idx]中原有的流记录项信息中的辅助计数值更新为max%28
步骤8:若第二哈希桶A[idx]中的状态值大于0,将第二哈希桶A[idx]中的状态值的减1。
步骤9:如果辅哈希表A中的第二哈希桶A[idx]中已经保存的摘要信息与数据包p的流标识符的摘要信息相同,则可以将第二哈希桶所存储的流记录项信息中的状态值增加1、计数值增加1。
如此,当辅哈希表A中的第二哈希桶A[idx]中的状态值和计数值足够大的时候,就可以把这个哈希桶中的流记录项信息从辅哈希表A提回主哈希表M中。
在执行步骤9之后,可以执行步骤10或步骤11。
步骤10:如果辅哈希表A中的第二哈希桶A[idx]中的更新后的计数值不大于min,并且第二哈希桶A[idx]中的更新后的状态值大于max-第二哈希桶A[idx]中的辅助计数值+1,则第二哈希桶A[idx]的摘要域所对应的数据流比主哈希表M中max对应的数据流更活跃,因此,max对应的数据流可以视为不活跃的数据流,进而,将数据包p的流标识符和主哈希表M中max对应的哈希桶中的流记录项信息输出至数据服务器,然后,用数据包p的流标识符的指纹信息和A[idx]中的计数值覆盖主哈希表M中max对应的哈希桶中的流记录项信息。
步骤11:如果辅哈希表A中的第二哈希桶A[idx]中的更新后的计数值大于min,表明A[idx]对应的数据流大于min对应的数据流,因此,将数据包p的流标识符和主哈希表M中min对应的哈希桶中的流记录项信息输出至数据服务器,然后,用数据包p的流标识符的指纹信息和A[idx]中的计数值覆盖主哈希表M中min对应的哈希桶中的流记录项信息。
应理解的是,由于单靠流标识符的指纹信息不足以在数据服务器中恢复流记录项信息的流标识符,因此,虽然数据包p的流标识符与min对应的哈希桶中的流记录项信息无关,但它是必不可少的。
在步骤4中,数据包p的流标识符经过主哈希表M的时候,记录了它的匹配路径上具有最大计数值max和最小计数值min。
步骤12:当数据服务器在时刻1接收到流标识符时,数据服务器通过用于生成指纹信息的哈希函数计算该流标识符的指纹信息,然后,建立该流标识符的指纹信息与该流标识符之间的映射关系,并将该映射关系添加到字典中;接下来,当数据服务器在时刻2接收到该流标识符对应的流记录项信息(包括:该流标识符的指纹信息和计数值)时,数据服务器可以通过搜索字典找到和该流记录项信息中的指纹信息对应的流标识符,并恢复完整的流记录(即流标识符和计数值)。之后,可以将指纹信息到流标识符的反向映射关系从字典中删除,从而,使得数据服务器中的字典的规模不大于网络设备中的主哈希表M的哈希桶的数目,这样,既能减少主哈希表M中发生哈希冲突的概率,还能节省数据服务器的存储空间。
基于前述实施例,以主哈希表包括:M1表和M2表、辅哈希表包括:A表为例,下面以具体实例对本申请实施例所提供的数据流处理方法进行说明。
实例1:如图4所示,当数据包p3到达的时候,将数据包p3的流标识符通过哈希函数h1(.)映射到了M1表中的哈希桶M1[idx11],其中,idx11=h1(p3.流标识符),假设数据包p3在M1表中的哈希桶M1[idx11]发生了哈希冲突(数据包p3的流标识符的指纹信息F3与M1表中所映射的哈希桶M1[idx11]中的指纹信息F36是不相同的),那么,将数据包p3的流标识符通过哈希函数h2(.)映射到了M2表中的哈希桶M2[idx12],其中,idx12=h2(p3.流标识符),并假设哈希桶M2[idx12]为空,那么,将数据包p3的流标识符的指纹信息F3和计数值1写入哈希桶M2[idx12],则哈希桶M2[idx12]中的流记录项信息由(0,0)变为(F3,1)。
实例2:如图4所示,当数据包p5到达的时候,将数据包p5的流标识符通过哈希函数h1(.)映射到了M1表中的哈希桶M1[idx21],其中,idx21=h1(p5.流标识符),假设数据包p5在M1表中的哈希桶M1[idx21]发生了哈希冲突(数据包p5的流标识符的指纹信息F5与M1表中所映射的哈希桶M1[idx21]中的指纹信息F49是不相同的),那么,将数据包p5的流标识符通过哈希函数h2(.)映射到了M2表中的哈希桶M2[idx22],其中,idx22=h2(p5.流标识符),并假设数据包p5的流标识符的指纹信息与M2表中对应的哈希桶M2[idx22]中的指纹信息是相同的,那么,将M2表中的哈希桶M2[idx22]的计数值加1,则哈希桶M2[idx22]中的流记录项信息由(F5,4)变成(F5,5)。
实例3:如图4所示,当数据包p1到达的时候,假设数据包p1在M1表和M2表中均遇到了哈希冲突,那么,我们使用哈希函数g(.)将数据包p1映射到A表。假设数据包p1的流标识符在A表中所映射的哈希桶为空,所以,数据包p1摘要信息D1、状态值1、计数值1、以及辅助计数值max(即7)写入表A中,其中max是匹配路径上的最大计数值。
实例4:如图4所示,当数据包p4到达的时候,假设数据包p4在M1表和M2表中都发生了哈希冲突,那么,我们使用哈希函数g(.)将数据包p4映射到A表中的哈希桶A[idx4],其中,idx4=g(p4.流标识符)。假设在A表中,数据包p4的流标识符被映射到了一个具有相同的摘要D4的哈希桶,所以我们将这个哈希桶的状态域和计数器域分别增加1,则哈希桶A[idx4]中的流记录项信息由(D4,2,3,6)变成(D4,3,4,6)。
实例5:如图4所示,当数据包p6到达的时候,假设数据包p6在M1表和M2表中都发生了哈希冲突,那么,我们使用哈希函数g(.)将数据包p6映射到A表中的哈希桶A[idx5],其中,idx5=g(p6.流标识符)。假设数据包p6的流标识符在A表中所映射的哈希桶A[idx5]也发生了冲突(数据包p6的流标识符的摘要信息为D6,而哈希桶A[idx5]中存储的摘要信息为D10),但是,哈希桶A[idx5]中存储的状态值大于0,所以我们只是将这个哈希桶的状态域的值减1,而其它域的值保持不变,则哈希桶A[idx5]中的流记录项信息由(D10,1,5,9)变成(D10,0,5,9)。
实例6:如图4所示,当数据包p2到达的时候,假设数据包p2在M1表和M2表中都发生了哈希冲突,那么,我们使用哈希函数g(.)将数据包p2映射到A表中的哈希桶A[idx6],其中,idx6=g(p2.流标识符)。假设数据包p2的流标识符在A表中所映射的哈希桶A[idx6]也发生了冲突(数据包p2的流标识符的摘要信息为D2,而哈希桶A[idx6]中存储的摘要信息为D11),但是,哈希桶A[idx6]中存储的状态值等于0,所以我们将这个哈希桶的摘要域的值更新成为p2的摘要D2,将它的状态域的值设为1,将它的截图域的值设为max(即7),并将它的计数器值增加1,则哈希桶A[idx6]中的流记录项信息由(D11,0,2,8)变成(D2,1,3,7)。
实例7:如图4所示,当数据包p9到达的时候,假设数据包p9在M1表和M2表中都发生了哈希冲突,那么,我们使用哈希函数g(.)将数据包p9映射到A表中的哈希桶A[idx7],其中,idx7=g(p9.流标识符)。并假设数据包p9的流标识符的摘要信息与A表中的哈希桶A[idx7]中的摘要信息是相同的,所以,我们将A表中的哈希桶A[idx7]中的状态值和计数值分别增加1,即哈希桶A[idx7]中的流记录项信息由(D9,1,3,6)变成(D9,2,4,6)。而这个哈希桶的计数值增加1以后变成了4,比匹配路径上的min值(即3)要大,由此触发了“大流的识别与维护”策略,所以,我们将指纹信息F9和计数值4提回主哈希表,并替换min对应的流记录,其中,min对应的流记录由(F48,3)变成(F9,4),4是A表哈希桶A[idx7]的更新后的计数值,F9是根据数据包p9的流标识符生成的指纹信息。最后,我们将A表中哈希桶A[idx7]清空,即最终哈希桶A[idx7]中的流记录项信息由(D9,1,3,6)变成(0,0,0,0)。
实例8:如图4所示,当数据包p7到达的时候,假设数据包p7在M1表和M2表中都发生了哈希冲突,那么,我们使用哈希函数g(.)将数据包p7映射到A表中的哈希桶A[idx8],其中,idx8=g(p7.流标识符)。并假设数据包p7的流标识符的摘要信息与A表中的哈希桶A[idx8]中的摘要信息是相同的,所以,我们将A表中的哈希桶A[idx8]中的状态值和计数值分别增加1,即哈希桶A[idx8]中的流记录项信息由(D7,3,5,6)变成(D7,4,6,6)。因为它的计数值不大于min(即7),所以“大流的识别和维护”无法被触发。但是,我们发现它的状态值(即4)大于max-截图域+1(即3),所以“不活跃数据流导出”策略被触发,我们将指纹信息F7和计数值6提回主哈希表,并替换max对应的流记录,其中,max对应的流记录由(F55,8)变成(F7,6),6是A表哈希桶A[idx8]的更新后的计数值,F7是根据数据包p7的流标识符生成的指纹信息。最后,我们将A表中哈希桶A[idx8]清空,即最终哈希桶A[idx8]中的流记录项信息由(D7,3,5,6)变成(0,0,0,0)。
基于同一发明构思,本申请实施例提供一种电子设备。图5为本申请实施例中的电子设备的结构示意图,参见图5所示,该电子设备50包括:至少一个处理器501;以及与处理器501连接的至少一个存储器502、总线503;其中,处理器501、存储器502通过总线503完成相互间的通信;处理器501用于调用存储器502中的程序指令,以执行上述一个或多个实施例中的数据流处理方法或数据流恢复方法的步骤。
上述处理器可由中央处理器(Central Processing Unit,CPU)、微处理器(MicroProcessor Unit,MPU)、数字信号处理器(Digital Signal Processor,DSP)、或现场可编程门阵列(Field Programmable Gate Array,FPGA)等实现。存储器可能包括计算机可读介质中的非永久性存储器,随机存储器(Random Access Memory,RAM)和/或非易失性内存等形式,如只读存储器(Read Only Memory,ROM)或闪存(Flash RAM),存储器包括至少一个存储芯片。
需要说明的是,在本申请实施例中,如果以软件功能模块的形式实现上述一个或多个实施例中的数据流处理方法或数据流恢复方法,并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台电子设备(可以是个人计算机、服务器、或者网络设备等)执行本申请各个实施例方法的全部或部分。
相应地,基于同一发明构思,本申请实施例再提供一种计算机可读存储介质,上述计算机可读存储介质包括存储的程序,其中,在程序运行时控制存储介质所在电子设备执行上述一个或多个实施例中的数据流处理方法或数据流恢复方法的步骤。
在实际应用中,上述计算机可读存储介质可以如:ROM/RAM、磁碟、光盘等。
这里需要指出的是:以上电子设备或计算机可读存储介质实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请电子设备或计算机可读存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
本申请描述了多个实施例,但是该描述是示例性的,而不是限制性的,并且对于本领域的普通技术人员来说显而易见的是,在本申请所描述的实施例包含的范围内可以有更多的实施例和实现方案。尽管在附图中示出了许多可能的特征组合,并在具体实施方式中进行了讨论,但是所公开的特征的许多其它组合方式也是可能的。除非特意加以限制的情况以外,任何实施例的任何特征或元件可以与任何其它实施例中的任何其他特征或元件结合使用,或可以替代任何其它实施例中的任何其他特征或元件。
本申请包括并设想了与本领域普通技术人员已知的特征和元件的组合。本申请已经公开的实施例、特征和元件也可以与任何常规特征或元件组合,以形成由权利要求限定的独特的发明方案。任何实施例的任何特征或元件也可以与来自其它发明方案的特征或元件组合,以形成另一个由权利要求限定的独特的发明方案。因此,应当理解,在本申请中示出和/或讨论的任何特征可以单独地或以任何适当的组合来实现。因此,除了根据所附权利要求及其等同替换所做的限制以外,实施例不受其它限制。此外,可以在所附权利要求的保护范围内进行各种修改和改变。
此外,在描述具有代表性的实施例时,说明书可能已经将方法和/或过程呈现为特定的步骤序列。然而,在该方法或过程不依赖于本文所述步骤的特定顺序的程度上,该方法或过程不应限于所述的特定顺序的步骤。如本领域普通技术人员将理解的,其它的步骤顺序也是可能的。因此,说明书中阐述的步骤的特定顺序不应被解释为对权利要求的限制。此外,针对该方法和/或过程的权利要求不应限于按照所写顺序执行它们的步骤,本领域技术人员可以容易地理解,这些顺序可以变化,并且仍然保持在本申请实施例的精神和范围内。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。

Claims (13)

1.一种数据流处理方法,包括:
针对接收到的待处理数据包,获取所述待处理数据包的流标识符;
当所述待处理数据包的流标识符在映射至主哈希表时发生哈希冲突,而在映射至辅哈希表时并未发生冲突时,则基于所述主哈希表所存储的计数值、以及所述辅哈希表所存储的计数值、状态值和辅助计数值,确定所述主哈希表中是否存储有不活跃数据流的流记录项信息;其中,所述状态值,用于表征所述辅哈希表存储的哈希值所表示的流标识符对应的数据流的活跃状态;所述辅助计数值,用于记录在数据包导致所述辅哈希表存储的哈希值发生变化时,所述数据包的流标识符在主哈希表中所映射的哈希桶中存储的最大计数值;
若所述主哈希表中存储有不活跃数据流的流记录项信息,则将所述不活跃数据流的流记录项信息和所述待处理数据包的流标识符输出至数据服务器;其中,所述不活跃数据流的流记录项信息包括:计数值和流标识符的哈希值。
2.根据权利要求1所述的方法,其特征在于,所述基于所述主哈希表所存储的计数值、以及所述辅哈希表所存储的计数值、状态值和辅助计数值,确定所述主哈希表中是否存储有不活跃数据流的流记录项信息,包括:
从所述主哈希表中的多个第一哈希桶所存储的计数值中,确定出最小计数值和最大计数值;其中,所述第一哈希桶为所述待处理的流标识符在映射至主哈希表时所映射的哈希桶;
确定所述辅哈希表中的第二哈希桶所存储的计数值是否大于所述最小计数值;其中,所述第二哈希桶为所述待处理的流标识符在映射至辅哈希表时所映射的哈希桶;
若所述第二哈希桶所存储的计数值不大于所述最小计数值,则基于所述最大计数值、以及所述第二哈希桶所存储的状态值和辅助计数值,确定多个第一哈希桶中与所述最大计数值对应的哈希桶所存储的流记录项信息是否为不活跃数据流的流记录项信息;
基于多个第一哈希桶中与所述最大计数值对应的哈希桶所存储的流记录项信息是否为不活跃数据流的流记录项信息,确定所述主哈希表中是否存储有不活跃数据流的流记录项信息。
3.根据权利要求2所述的方法,其特征在于,所述基于所述最大计数值、以及所述第二哈希桶所存储的状态值和辅助计数值,确定多个第一哈希桶中与所述最大计数值对应的哈希桶所存储的流记录项信息是否为不活跃数据流的流记录项信息,包括:
计算所述最大计数值与所述第二哈希桶所存储的辅助计数值之间的差值;
基于所述第二哈希桶所存储的状态值是否大于所述差值与1之和,确定多个第一哈希桶中与所述最大计数值对应的哈希桶所存储的流记录项信息是否为不活跃数据流的流记录项信息。
4.根据权利要求2所述的方法,其特征在于,在所述确定所述辅哈希表中的第二哈希桶所存储的计数值是否大于所述最小计数值之后,所述方法还包括:
若所述第二哈希桶所存储的计数值大于所述最小计数值,则将多个第一哈希桶中与所述最小计数值对应的哈希桶所存储的流记录项信息和所述待处理数据包的流标识符输出至数据服务器,并将多个第一哈希桶中与所述最小计数值对应的哈希桶中所存储的流记录项信息更新为所述第二哈希桶所存储的计数值和所述待处理数据包的流标识符的哈希值。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当所述待处理数据包的流标识符在映射至主哈希表时发生哈希冲突,且在映射至辅哈希表时发生哈希冲突时,则根据所述辅哈希表所存储的状态值,对所述辅哈希表所存储的流记录项信息进行更新。
6.根据权利要求5所述的方法,其特征在于,所述根据所述辅哈希表所存储的状态值,对所述辅哈希表所存储的流记录项信息进行更新,包括:
将所述辅哈希表中的第二哈希桶所存储的状态值与0进行比较;其中,所述第二哈希桶为所述待处理的流标识符在映射至辅哈希表时所映射的哈希桶;
根据比较结果,对所述第二哈希桶所存储的流记录项信息进行更新。
7.根据权利要求6所述的方法,其特征在于,所述根据比较结果,对所述第二哈希桶所存储的流记录项信息进行更新,包括:
若所述第二哈希桶所存储的状态值大于0,给所述第二哈希桶所存储的状态值减1,并保持所述第二哈希桶所存储的计数值、辅助计数值、以及流标识符的哈希值不变;
或者,
若所述第二哈希桶所存储的状态值等于0,对所述第二哈希桶所存储的流记录项信息进行如下更新:将所述第二哈希桶所存储的流标识符的哈希值更新为所述待处理数据包的流标识符的哈希值、将所述第二哈希桶所存储的状态值更新为1、给所述第二哈希桶所存储的计数值加1、以及将所述第二哈希桶的辅助计数值更新为第一哈希桶所存储的最大计数值;其中,所述第一哈希桶为所述待处理的流标识符在映射至主哈希表时所映射的哈希桶。
8.根据权利要求1所述的方法,其特征在于,所述待处理数据包的流标识符在映射至主哈希表时发生哈希冲突,而在映射至辅哈希表时并未发生冲突,包括:
使用与所述主哈希表对应的第一哈希函数对所述待处理数据包的流标识符进行哈希运算,得到第一哈希值;
若所述主哈希表中的多个第一哈希桶所存储的流标识符的哈希值与所述第一哈希值均不相同,表明所述待处理数据包的流标识符在映射至所述主哈希表中时发生哈希冲突,则使用与所述辅哈希表对应的第二哈希函数对所述待处理数据包的流标识符进行哈希运算,得到第二哈希值;其中,所述第一哈希桶为所述待处理的流标识符在映射至主哈希表时所映射的哈希桶;
若所述辅哈希表中的第二哈希桶所存储的流标识符的哈希值与所述第二哈希值相同,或者,所述第二哈希桶为空,则所述待处理数据包的流标识符在映射至所述辅哈希表中时未发生哈希冲突;其中,所述第二哈希桶为所述待处理的流标识符在映射至辅哈希表时所映射的哈希桶。
9.根据权利要求8所述的方法,其特征在于,所述方法还包括:
若所述辅哈希表中的第二哈希桶所存储的流标识符的哈希值与所述第二哈希值相同,则给所述第二哈希桶所存储的计数值和状态值分别加1。
10.一种数据流恢复方法,包括:
在第一时刻,接收到来自网络设备的第一流标识符;
建立所述第一流标识符的哈希值到所述第一流标识符的第一映射关系,并将所述第一映射关系存入至字典中,其中,所述第一流标识符的哈希值根据所述第一流标识符进行哈希运算得到;
在第二时刻,接收到来自网络设备的第二流标识符和待恢复的流记录项信息,其中,所述待恢复的流记录项信息包括:计数值和所述第一流标识符的哈希值,第二时刻在第一时刻之后;
基于所述待恢复的流记录项信息,通过查询所述字典中的所述第一映射关系,获得恢复后的流记录项信息,其中,所述恢复后的流记录项信息包括:所述计数值和所述第一流标识符;
建立所述第二流标识符的哈希值到所述第二流标识符的第二映射关系,并将所述第二映射关系存入至字典中,其中,所述第二流标识符的哈希值根据所述第二流标识符进行哈希运算得到。
11.根据权利要求10所述的方法,其特征在于,在所述获得恢复后的流记录项信息之后,所述方法还包括:
从所述字典中,删除所述第一映射关系。
12.一种电子设备,包括:
至少一个处理器;
以及与所述处理器连接的至少一个存储器、总线;
其中,所述处理器、存储器通过所述总线完成相互间的通信;所述处理器用于调用所述存储器中的程序指令,以执行如权利要求1至9任一项所述的数据流处理方法的步骤,或者,以执行如权利要求10至11任一项所述的数据流恢复方法的步骤。
13.一种计算机可读存储介质,包括存储的程序,其中,在所述程序运行时控制所述存储介质所在电子设备执行如权利要求1至9任一项所述的数据流处理方法的步骤,或者,执行如权利要求10至11任一项所述的数据流恢复方法的步骤。
CN202011011802.4A 2020-09-23 2020-09-23 一种数据流处理、恢复方法以及设备和存储介质 Pending CN112286966A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011011802.4A CN112286966A (zh) 2020-09-23 2020-09-23 一种数据流处理、恢复方法以及设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011011802.4A CN112286966A (zh) 2020-09-23 2020-09-23 一种数据流处理、恢复方法以及设备和存储介质

Publications (1)

Publication Number Publication Date
CN112286966A true CN112286966A (zh) 2021-01-29

Family

ID=74422135

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011011802.4A Pending CN112286966A (zh) 2020-09-23 2020-09-23 一种数据流处理、恢复方法以及设备和存储介质

Country Status (1)

Country Link
CN (1) CN112286966A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113595816A (zh) * 2021-07-16 2021-11-02 清华大学 一种数据流测算方法、设备和存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102025563A (zh) * 2010-11-30 2011-04-20 东南大学 基于哈希冲突补偿的网络大流识别方法
CN105515919A (zh) * 2016-01-20 2016-04-20 中国电子科技集团公司第五十四研究所 一种基于哈希压缩算法的网络流量监控方法
WO2018036457A1 (zh) * 2016-08-23 2018-03-01 中兴通讯股份有限公司 一种哈希冲突的处理方法、装置及交换设备和存储介质
JP2018120594A (ja) * 2017-01-25 2018-08-02 三星電子株式会社Samsung Electronics Co.,Ltd. 最大化された重複除去メモリのためのシステム及び方法
CN110019250A (zh) * 2019-03-06 2019-07-16 清华大学 基于哈希函数的网络测量方法和计算机可读存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102025563A (zh) * 2010-11-30 2011-04-20 东南大学 基于哈希冲突补偿的网络大流识别方法
CN105515919A (zh) * 2016-01-20 2016-04-20 中国电子科技集团公司第五十四研究所 一种基于哈希压缩算法的网络流量监控方法
WO2018036457A1 (zh) * 2016-08-23 2018-03-01 中兴通讯股份有限公司 一种哈希冲突的处理方法、装置及交换设备和存储介质
JP2018120594A (ja) * 2017-01-25 2018-08-02 三星電子株式会社Samsung Electronics Co.,Ltd. 最大化された重複除去メモリのためのシステム及び方法
CN110019250A (zh) * 2019-03-06 2019-07-16 清华大学 基于哈希函数的网络测量方法和计算机可读存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
熊兵 等: "面向高速网络连接记录管理的高效哈希表", 《华中科技大学学报(自然科学版)》, vol. 39, no. 2, 28 February 2011 (2011-02-28) *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113595816A (zh) * 2021-07-16 2021-11-02 清华大学 一种数据流测算方法、设备和存储介质

Similar Documents

Publication Publication Date Title
US7650429B2 (en) Preventing aliasing of compressed keys across multiple hash tables
JP6716727B2 (ja) ストリーミングデータ分散処理方法及び装置
CN112671611B (zh) 基于sketch的大流检测方法和装置
US20130265883A1 (en) Method and system for storing packet flows
US9276853B2 (en) Hashing of network packet flows for efficient searching
US20090094699A1 (en) Apparatus and method of detecting network attack situation
CN110989922B (zh) 一种分布式数据存储方法及系统
CN105991660B (zh) 一种多云存储系统间资源共享的系统
CN112486914B (zh) 一种数据包存储与快查方法与系统
CN114244752A (zh) 流量统计方法、装置和设备
US10289384B2 (en) Methods, systems, and computer readable media for processing data containing type-length-value (TLV) elements
CN112286966A (zh) 一种数据流处理、恢复方法以及设备和存储介质
CN107590160B (zh) 一种监控基数树内部结构以实现测试的方法及装置
US9137158B2 (en) Communication apparatus and communication method
CN112084500A (zh) 病毒样本的聚类方法、装置、电子设备和存储介质
CN113676379B (zh) 一种dns隧道检测方法、装置、系统及计算机存储介质
CN114095265B (zh) Icmp隐蔽隧道检测方法、装置及计算机设备
CN114697160B (zh) 一种隧道报文的处理方法和装置
CN111683036B (zh) 数据存储方法、装置以及报文识别方法和装置
US11604877B1 (en) Nested courses of action to support incident response in an information technology environment
CN109547389B (zh) 一种码流文件重组的方法及装置
CN113965492A (zh) 一种数据流统计方法及装置
CN113595816A (zh) 一种数据流测算方法、设备和存储介质
CN114629824B (zh) 丢包定位方法、装置、计算设备及介质
CN117540071B (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