CN112671611B - 基于sketch的大流检测方法和装置 - Google Patents
基于sketch的大流检测方法和装置 Download PDFInfo
- Publication number
- CN112671611B CN112671611B CN202011545099.5A CN202011545099A CN112671611B CN 112671611 B CN112671611 B CN 112671611B CN 202011545099 A CN202011545099 A CN 202011545099A CN 112671611 B CN112671611 B CN 112671611B
- Authority
- CN
- China
- Prior art keywords
- flow
- hash
- stream
- counter
- hash 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
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请提出一种基于sketch的大流检测方法和装置,涉及数据处理技术领域,其中,方法包括:使用一个哈希表来保存流的大小,并配合采样机制和基于位图的哈希桶快速重置算法,来实现对大流的动态实时测量,该算法具有线速包处理的能力,同时还可以适应流大小的动态变化,节省存储空间而且也有准确性的保证,以及通过对算法参数的设置,该算法能够在不同的时间尺度上对大流进行检测,包括缓慢变化的大流和突发流。
Description
技术领域
本申请涉及数据处理技术领域,尤其涉及一种基于sketch的大流检测方法和装置。
背景技术
流量测量在数据中心网络中很重要,经常用于负载均衡,流量规划,大流卸载和异常检测等场景。对于大多数流量测量系统,需要流量测量算法可以进行线速的测量,而且尽可能少的占用计算资源和存储资源来避免对设备上的其他网络功能造成不良影响。
相关技术主要聚焦于流的计数和大流的识别上,然而由于大流会随时间变化,流还具有一定的突发性,检测当前的大流比检测从流开始到结束这段时间的大流重要。比如,在大流卸载的场景中,应该卸载当前的大流,因为卸载当前的大流才能卸载掉当前的大部分流量,从而降低软件的处理负载。而一条大流如果当前速率较小,并没有必要卸载这条流,可以卸载一条更大的流来增加卸载总流量的大小。
发明内容
本申请旨在至少在一定程度上解决相关技术中的技术问题之一。
为此,本申请的第一个目的在于提出一种基于sketch的大流检测方法,使用一个二维哈希表来保存流的大小,并配合采样机制和基于位图(bitmap)的哈希桶快速重置算法,来实现对大流的动态实时测量,该算法具有线速包处理的能力,同时还可以适应流大小的动态变化,节省存储空间而且也有准确性的保证。通过对算法参数的设置,该算法能够在不同的时间尺度上对大流进行检测,包括缓慢变化的大流和突发流。
本申请的第二个目的在于提出一种基于sketch的大流检测装置。
为达上述目的,本申请第一方面实施例提出了一种基于sketch的大流检测方法,包括:
哈希表由多个一维数组组成,每个所述一维数组由哈希桶组成,所述哈希桶中存有K个计数器、流标识、流冲突计数器和位图;
使用所述K个计数器记录所述流标识对应流收到的数据包;
每个计数器记录收到b个数据包中每条流的大小,其中,所述每条流的大小是每b个数据包中所有计数器的总和;其中,所述K和b为正整数;
滑动窗口每所述b个数据包滑动一次,将所述滑动窗口获取的数据包记录到哈希表中;
当映射到任一所述哈希桶的新流与所述哈希桶中原流不同,更新所述流冲突计数器,每当窗口滑动时,更新所述位图,当所述位图中记录的数据确定所述新流大于所述原流,重置存在冲突的所述哈希桶,所述新流替换所述哈希桶中原流。
在本申请的一个实施例中,所述基于sketch的大流检测方法,其特征在于,
使用Aj[t]表示第j个数组中的第t个哈希桶存储,并使用Aj[t].FID,Aj[t].C,Aj[t].CC,Aj[t].LUP和Aj[t].Bi(1≤j≤d,1≤t≤w),分别存储流标识,计数器,流冲突计数器、位图序列指针和一个位图数组的第i位;一维数组A1...Ad与d个哈希函数h1(.)...hd(.)相关联,其中d个哈希函数h1(.)...hd(.)两两相互独立。
在本申请的一个实施例中,对于每个属于流fi的数据包Pl,计算d个哈希函数h1(Fi)...hd(Fi),以使所述d个哈希函数将所述流fi映射到d个哈希桶Aj[hj(Fi)](1≤j≤d)中;
对于每个被映射到的哈希桶Aj[hj(Fi)](1≤j≤d),根据Aj[hj(Fi)].FID和流fi的流标识Fi的相互关系更新每个哈希桶;
在更新所述哈希桶的同时查询插入流的大小,最后根据流的流标识和流大小更新最小堆,所述最小堆中保存的前k个的大流和流的流标识,并且在所述流标识上设置哈希索引。
在本申请的一个实施例中,在计数器更新阶段,所述流标识初始化为空NULL,所述计数器和所述流冲突计数器初始化为0;
当流映射的所述哈希桶未存储任何其他流时(Aj[hj(Fi)].FID=NULL),将所述新流直接插入所述哈希桶,设置所述哈希桶中的流标识Aj[hj(Fi)].FID=Fi,设置所述计数器Aj[hj(Fi)].C←1和所述流冲突计数器Aj[hj(Fi)].CC←1。
在本申请的一个实施例中,所述基于sketch的大流检测方法,其特征在于,还包括:
当被映射的哈希桶Aj[hj(Fi)]中存储的流标识Aj[hj(Fi)].FID和被映射的流fi的流标识Fi相同时(Aj[hj(Fi)].FID=Fi),更新所述哈希桶中的计数器Aj[hj(Fi)].C←Aj[hj(Fi)].C+1和所述流冲突计数器Aj[hj(Fi)].CC←Aj[hj(Fi)].CC+1。
在本申请的一个实施例中,所述基于sketch的大流检测方法,还包括:
当被映射的哈希桶Aj[hj(Fi)]中存储的流标识Aj[hj(Fi)].FID和被映射的流fi的流标识Fi不相同时(Aj[hj(Fi)].FID≠Fi),更新所述流冲突计数器Aj[hj(Fi)].CC←Aj[hj(Fi)].CC-1。
在本申请的一个实施例中,所述基于sketch的大流检测方法,还包括:
在滑动窗口更新阶段,在滑动窗口时,重置所述流冲突计数器,更新块指针和所述位图,设置一个全局计数器C来为收到的数据包计数,以及一个块指针p表示当前记录的b个数据包是滑动窗口中的第几个数据包块,滑动窗口大小为W,每个窗口中的数据包块的个数为K,则W=b×K;
当有新的数据包时,增加所述全局计数器C=(C+1)modW,根据增加后的结果来判断是否要更新所述块指针p,即如果Cmodb=0,增加块计数器p←(p+1)modK。
在本申请的一个实施例中,更新所述位图,包括:
当窗口没有发生滑动时候(Aj[hj(Fi)].LUP=p),进行所述计数器更新阶段。
在本申请的一个实施例中,所述基于sketch的大流检测方法,还包括:
当窗口发生了滑动(Aj[hj(Fi)].LUP≠p),并且冲突次数多于所述哈希桶中所存储流的在b个数据包中的大小(Aj[hj(Fi)].CC≤0),在所述位图中记录冲突情况Aj[hj(Fi)].Bp←0;
当窗口发生了滑动(Aj[hj(Fi)].LUP≠p),并且冲突次数少于所述哈希桶中所存储流的在b个数据包中的大小(Aj[hj(Fi)].CC>0),在所述位图中记录冲突情况Aj[hj(Fi)].Bp←1。
为达上述目的,本申请第二方面实施例提出了一种基于sketch的大流检测装置,包括:
哈希表由哈希桶组成,所述哈希桶中存有K个计数器、流标识、流冲突计数器和位图;
第一记录模块,用于使用所述K个计数器记录所述流标识对应流收到的数据包;
第二记录模块,用于每个计数器记录收到b个数据包中每条流的大小,其中,所述每条流的大小是每b个数据包中所有计数器的总和;其中,所述K和b为正整数;
第三记录模块,用于滑动窗口每所述b个数据包滑动一次,将所述滑动窗口获取的数据包记录到哈希表中;
更新模块,用于当映射到任一所述哈希桶的新流与所述哈希桶中原流不同,更新所述流冲突计数器,每当窗口滑动时,更新所述位图,当所述位图中记录的数据确定所述新流大于所述原流,重置存在冲突的所述哈希桶,所述新流替换所述哈希桶中原流。
由此,本申请使用滑动窗口来适应流速率的变化,使用sketch数据结构来实现线速转发、以及使用基于位图的方法来实现高吞吐量和低资源使用率。
本申请附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本申请的实践了解到。
附图说明
本申请上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为本申请实施例流量的偏斜性的示例图;
图2为本申请实施例大流的变化率的示例图;
图3为本申请实施例突发强度分布的示例图;
图4为本申请实施例突发持续时间分布的示例图;
图5为本申请实施例所提供的一种基于sketch的大流检测方法的流程示意图;
图6为本申请实施例滑动窗口的示例图;
图7为本申请实施例Sketch哈希表数据结构的示例图;
图8为本申请实施例大流识别算法执行步骤的示例图;
图9为本申请实施例基于位图的重置策略的示例图;
图10为本申请实施例大流识别算法具体实施方式的示例图;
图11为本申请实施例不同方案在不同内存占用下的准确率的示例图;
图12为本申请实施例不同方案识别不同数量大流的准确率的示例图;
图13为本申请实施例不同方案的吞吐的示例图;
图14为本申请实施例所提供的一种基于sketch的大流检测装置的结构示意图。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本申请,而不能理解为对本申请的限制。
下面参考附图描述本申请实施例的基于sketch的大流检测方法和装置。
在本申请实施例中,Sketch算法非常适合数据中心网络测量的场景,它可以提供理论的准确率保证和线速的包处理速度,Sketch算法可以支持许多数据中心网络测量任务,比如流数量的测量,大流的检测,流大小的测量以及流量变化检测。本申请主要聚焦在数据中心中实时识别大流方面。大流的实时识别是寻找目前速率最大的k条流,流通常被定义为包头中某些特殊字段的组合,例如源地址,目地地址或5元组。流的大小可以定义为属于这条流的包的数目或属于这条流的包的字节大小。属于这条流的包的数目的定义更有意义,因为网络功能通过逐包处理的方式来处理流。
本申请分析了云服务提供商的云网关入口的流量数据。比如将工作日的不同的三个时间(即8:00am、12:00pm和10:00pm)收集三个不同的区域的实时数据包级流量。如图1所示,流量具有高度偏斜性,前10%的大流流量占总流量的91%。所以只需要少量的空间就可以存储大流,并不需要存储并对所有的流进行测量。
具体地,大流在不停的发生变化,因此分析了前10%的大流,它们在相邻的不同时间窗口(即1s,30s,1min,2min,3min,4min和5min)中的大流的变化率如图2所示,对于不同的窗口大小,发现在连续相邻的时间窗口中,前10%的大流中约有13%的流量在下一个窗口中不是前10%的大流。一些流大小的波动很大,在较小的时间窗口内变小到10%的大流之外,但是在较大的时间窗口内,它们仍处于前10%。
此外,流量还有一定的突发性,计算出每条流的峰值速率与平均速率之比(突发强度),并将结果显示在图3中。根据图3可以看出,80%左右的流的突发强度大于20倍,最高的突发强度可达80倍。而且突发流的持续时间较短,根据图4所示,超过80%的突发流的持续时间少于1秒。
图5为本申请实施例一所提供的一种基于sketch的大流检测方法的流程示意图。
如图5所示,哈希表由哈希桶组成,所述哈希桶中存有K个计数器、流标识、流冲突计数器和位图,该基于sketch的大流检测方法包括以下步骤:
步骤101,使用K个计数器记录流标识对应流收到的数据包。
步骤102,每个计数器记录收到b个数据包中每条流的大小,其中,每条流的大小是每b个数据包中所有计数器的总和;其中,K和b为正整数。
步骤103,滑动窗口每b个数据包滑动一次,将滑动窗口获取的数据包记录到哈希表中。
步骤104,当映射到任一哈希桶的新流与哈希桶中原流不同,更新流冲突计数器,每当窗口滑动时,更新位图,当位图中记录的数据确定新流大于原流,重置存在冲突的哈希桶,新流替换哈希桶中原流。
在本申请实施例中,使用一个小的二维哈希表来存储所有大流。哈希表由哈希桶组成,桶哈希中存有流计数器和流标识(一般为五元祖)。因为流的大小在动态变化,本申请的方案会忘记历史记录的流量大小并记录最近的流量,本申请通过滑动窗口算法解决此问题。如图6所示,本申请使用K个计数器记录一个流收到的数据包。每个计数器记录在接下来收到的b个数据包中每条流的大小,每条流实时的大小是每b个包中所有计数器的总和。滑动窗口每b个包滑动一次,并且忘记了最早记录的b个包。用这种方法,只有在滑动窗口中接收到的数据包才被记录到二维哈希表中。
为了节省存储空间,本申请使用有限的内存尽量的只记录大流的流量,因此,本申请存在流冲突的问题(如图7所不)。哈希表中的每个计数器将被多条流映射,这样就会造成流大小估计的不准确。为了解决这个问题。本申请提出了快速重置算法来快速重置二维哈希表中的哈希桶。本申请为每一哈希桶预留维护一个流冲突计数器和位图,当映射到某一哈希桶的新流与哈希桶中原本的流不同,将先更新流冲突计数器,每当窗口滑动时,将更新位图,当位图中记录的数据表明冲突流是一个更大的流时,会重置这个有冲突的桶,让新的大流替换桶中变小的流。
在本申请的一个实施例中,使用Aj[t]表示第j个数组中的第t个哈希桶存储,并使用Aj[t].FID,Aj[t].C,Aj[t].CC,Aj[t].LUP和Aj[t].Bi(1≤j≤d,1≤t≤w),分别代表流标识,计数器,冲突计数器和一个位图数组的第i位;一维数组A1...Ad与哈希函数h1(.)...hd(.)相关联,其中d个哈希函数h1(.)...hd(.)两两相互独立。
在本申请的一个实施例中,对于每个属于流fi的数据包Pl,计算d个哈希函数h1(Fi)...hd(Fi),以使所述d个哈希函数将所述流fi映射到d个哈希桶Aj[hj(Fi)](1≤j≤d)中;对于每个被映射到的哈希桶Aj[hj(Fi)](1≤j≤d),根据Aj[hj(Fi)].FID和流fi的流标识Fi的相互关系更新每个哈希桶;在更新所述哈希桶的同时查询插入流的大小,最后根据流的流标识和流大小更新最小堆,所述最小堆中保存的前k个的大流和流的流标识,并且在所述流标识上设置哈希索引。
在本申请的一个实施例中,在计数器更新阶段,所述流标识初始化为空NULL,所述计数器和所述流冲突计数器初始化为0;当流给映射到所述哈希桶未存储任何其他流时(Aj[hj(Fi)].FID=NULL),将所述新流直接插入所述哈希桶,设置所述哈希桶中的流标识Aj[hj(Fi)].FID=Fi,设置所述计数器Aj[hj(Fi)].C←1和所述流冲突计数器Aj[hj(Fi)].CC←1。
在本申请的一个实施例中,当被映射的哈希桶Aj[hj(Fi)]中存储的流标识Aj[hj(Fi)].FID和被映射的流fi的流标识Fi相同时(Aj[hj(Fi)].FID=Fi),更新所述哈希桶中的计数器Aj[hj(Fi)].C←Aj[hj(Fi)].C+1和所述流冲突计数器Aj[hj(Fi)].CC←Aj[hj(Fi)].CC+1。
在本申请的一个实施例中,当被映射的哈希桶Aj[hj(Fi)]中存储的流标识Aj[hj(Fi)].FID和被映射的流fi的流标识Fi不相同时(Aj[hj(Fi)].FID≠Fi),更新所述流冲突计数器Aj[hj(Fi)].CC←Aj[hj(Fi)].CC-1。
在本申请的一个实施例中,在滑动窗口更新阶段,在滑动窗口时,重置所述流冲突计数器,更新块指针和所述位图,设置一个全局计数器C来为收到的数据包计数,以及一个块指针p表示当前记录的b个数据包是滑动窗口中的第几个数据包块,滑动窗口大小为W,每个窗口中的数据包块的个数为K,则W=b×K;
当有新的数据包时,增加所述全局计数器C=(C+1)modW,根据增加后的结果来判断是否要更新所述块指针p,即如果Cmodb=0,增加块计数器p←(p+1)modK。
在本申请的一个实施例中,更新所述位图,包括:当窗口没有发生滑动时候(Aj[hj(Fi)].LUP=p),进行所述计数器更新阶段。
在本申请的一个实施例中,当窗口发生了滑动(Aj[hj(Fi)].LUP≠p),并且冲突次数多于所述哈希桶中所存储流的在b个数据包中的大小(Aj[hj(Fi)].CC≤0),在所述位图中记录冲突情况Aj[hj(Fi)].Bp←0;当窗口发生了滑动(Aj[hj(Fi)].LUP≠p),并且冲突次数少于所述哈希桶中所存储流的在b个数据包中的大小(Aj[hj(Fi)].CC>0),在所述位图中记录冲突情况Aj[hj(Fi)].Bp←1。
具体地,sketch哈希表数据结构,如7的sketch哈希表数据结构是一个二维数组,由d个一维数组组成,每个一维数组由w个哈希桶组成。每个哈希桶主要由五个部分组成:流标识,计数器,冲突计数器和一个位图数组。位图数组由K个位(bit)组成,为方便起见,使用Aj[t]表示第j个数组中的第t个哈希桶存储,并使用Aj[t].FID,Aj[t].C,Aj[t].CC,Aj[t].LUP和Aj[t].Bi(1≤j≤d,1≤t≤w),分别代表其流标识,计数器,冲突计数器和一个位图数组的第i位。一维数组A1...Ad与哈希函数h1(.)...hd(.)相关联。这些d哈希函数h1(.)...hd(.)需要两两相互独立。
接下来介绍当有数据包来的时候,如何更新sketch哈希表数据结构以及如何在算法运行过程中。实时的获得当前的大象流。sketch哈希表数据结构的目的是对流的大小进行估计,在算法运行过程中,还需要使用最小堆数据结构来实时的存储识别出的大流,并可以进行实时的更新。
大流识别算法的执行步骤如图8所示,对于每个属于流fi的数据包Pl,本申请首先计算d个哈希函数h1(Fi)...hd(Fi),这d个哈希函数会把流fi映射到d个哈希桶Aj[hj(Fi)](1≤j≤d)中(每个一维度数组对应一个哈希桶),对于每个被映射到的桶哈希Aj[hj(Fi)](1≤j≤d),根据Aj[hj(Fi)].FID和Fi(Fi为流fi的流标识,一般为五元组)的相互关系来更新每个哈希桶。在更新哈希桶的同时,会同时查询所插入流的大小的估计。最后根据流的ID和流大小的估计来更新最小堆,最小堆中保存的就是前k大的大流和流的ID,并且在流标识上有哈希索引。接下来详细介绍sketch哈希表数据结构中每个哈希桶的更新策略以及最小堆的更新方法。
Sketch哈希表数据结构中每个哈希桶的更新策略包括两个步骤计数器更新阶段和滑动窗口更新阶段。在计数器更新阶段,要更新哈希桶中的计数器和冲突计数器;在滑动窗口更新阶段,将忘记最早记录的b个数据包,保证sketch哈希表数据结构中存储的信息是最新的。
在算法运行过程中,每隔b个数据包窗口将会滑动,在滑动窗口时,重置冲突计数器,更新最近更新块指针,位图和一些维护窗口的变量。为了维护滑动窗口,维护了一个全局计数器C来为收到的包计数,以及一个块指针p表示当前记录的b个数据包是滑动窗口中的第几个数据包块。滑动窗口大小为W,每个窗口中的数据包块的个数为K,则W=b×K。当有新的数据包来时,首先会增加全局计数器C=(C+1)modW,然后根据增加后的结果来判断是否要更新块指针p,即如果C modb=0,增加块计数器p←(p+1)mod K
为了及时的重置哈希桶中已经变小的流,本发明使用了基于位图的投票方法,基于位图的重置算法仅使用一位来记录相对流量的大小关系(以数据包块为单位)。并在位图数组中记录历史信息。重置策略基于位图数组进行投票,如图9所示,在一个时间窗口中,哈希桶中存储着流f2。在窗口滑动后,哈希桶中的位图表明冲突数较多,桶中的大流已经变小或者有另一条更大的流和这条流冲突,这时候就需要重置这个哈希桶,并用新的较大的流来替换桶中已经变小的流,即用流f2来替换流f1。
为了实时识别前k的大流,将最小堆与二维哈希表一起使用。最小堆用于在滑动窗口中存储前k大流的流标识和流大小。本发明对每个包处理的算法流程如算法1所示。对于每个传入的数据包Pl,大流识别算法将这个数据包所属的流fi的流标识Fi插入到二维哈希表中,并更新最小堆。算法首先记录当前包所属的流是不是已经在最小堆中(算法1的1-4行),然后会对流映射到的哈希桶进行更新,并且查询哈希桶中的计数器,得到二维哈希表中所存储的流大小。(算法1的5-13行)。然后根据二维哈希表的查询结果和这条流在不在最小堆中来更新最小堆。如果流fi的不在最小堆中,并最小堆为空,则直接将流fi及其流大小插入最小堆中。(算法1的14-15行)如果流fi不在最小堆中,并且二维哈希表的流大小大于最小堆的根节点中的流的大小(即第k大的流),则删除根节点,然后将流fi及其流大小插入最小堆中(算法1的16-18行)。当要实时查询前k个大流时,只需要直接返回最小堆中的流。
算法1大流识别算法
本发明实现过程基于C语言,并将其与DPDK集成。本发明是作为业务逻辑部署在NFV(网络功能虚拟化)网关上的,如图10所示。网关由控制平面和数据平面组成。通常,网关的控制平面主要运行BGP协议,路由策略检查和流量控制等网络功能。尽管控制平面相当复杂,但是云网关的数据平面功能要简单得多。网关的数据平面通常负责数据包的路由查表(最长前缀匹配)和转发,将数据包封装到专用或公用隧道中,例如GRE(GenericRoutingEncapsulation)或VxLAN(Virtual Extensible Local Area Network),或者从隧道中解封装数据包。有时,也会部署ACL(Access Control Lists)和NAT(NetworkAddress Translation)功能。NFV网关将这些功能都实现在用户控件(软件),本发明作为一种新的网络功能被集成在网关中,可以进行流的实时监控或者帮助其他的网络功能实现相关功能,比如大流卸载场景中可以识别出要卸载大流。
如图10所示,大流识别算法作为一个网络功能,被实现在一个独占的CPU核,与其他的网关逻辑相隔离,并通过环形队列来传递数据包和查询结果,当有数据包被网关逻辑接收,网关逻辑把需要进行大流识别的包放入环形队列中,在其他CPU核上的大流识别算法可以通过环形队列拿到需要处理的数据包。而大流识别的结果也可以通过环形队列从大流识别算法核上传递到需要使用结果网关逻辑所运行的CPU核上。
为了验证本发明的性能,将大流识别算法部署到实际的实验床上,然后用实际生产环境中的流量对大流识别算法进行测试。测试平台包含2个直接连接的服务器。每台服务器都Dell PowerEdge R740,有两个8核8-core Intel(R)Xeon(R)Silver 4110CPU@2.10GHz和64GB RAM。一台服务器作为发送端,而另一台服务器作为接收端。本发明部署在接收服务器上。每个服务器都配有一个Mellanox ConnectX-5网卡,没个网卡有100GbE的端口。在接收端使用DPDK 17.11和在发送端使用Pktgen3.2.4。测试流量由来自数据中心网络的数据包组成。定义五元组(即源IP地址,目地IP地址,源端口,目标端口和协议类型)相同的数据包属于同一条流。测试的流量数据包含33M条流和77M个数据包。而且流量具有一定的偏斜性,10%的大流占91%的流量。
评估的方案时和五个现有的方案进行对比,即CM Sketch(CM),UnivMon(UM),HeavyKeeper(HK),SpaceSaving(SS)和LossyCounting(LC)。然后选取前k大的流作为大流,主要考察两种性能指标:
因为要测量前k大的流,所以真正的大流就是最近的流量中前k大的大流。本发明使用了滑动窗口的技术,所以本发明测试时要用滑动窗口中准确率或者召回率的平均值作为整体正确率的指标。
分析了不同的内存大小和k(识别出的大流数目)对准确性的影响。在此实验中,将窗口大小W设置为780k数据包(5秒),将块大小b设置为258k数据包(1秒),将一维数组的数量d设置为3。在对比不同内存大小的实验中,将k设置为100,而对于对比不同k的实验,将内存大小设置为100KB。
不同方案在不同内存占用下的准确率对比如图11所示,与其他方法相比,本发明在实时大流识别方面具有较高的准确率。当使用30KB内存时,本发明的准确率达到了98%,但是UnivMon(UM),HeavyKeeper(HK),CM Sketch(CM),LossyCounting(LC)和SpaceSaving(SS)的准确率分别为52%,51%,49%,21%和14%。
不同方案识别不同数量大流(k)的准确率对比如图12所示,随着k变大,大流识别方法的准确率降低。但是本发明仍然具有很高的准确率。即使k增加到1000,本发明的准确率仍高于92%。当k增加时,其他方法的准确率会降低很多。例如,当k为200时,UnivMon(UM),HeavyKeeper(HK),CM Sketch(CM),LossyCounting(LC)和SpaceSaving(SS)的准确率分别为为51%,49%,42%,26%和21%。但是,当k增加到1000时,UnivMon(UM),HeavyKeeper(HK),CM Sketch(CM),LossyCounting(LC)和SpaceSaving(SS)的准确率为41%,40%,33%,16%和13%。
评估吞吐量的实验和以上实验基于相同的实验环境。在发送方中,使用5个CPU核来生成数据包,吞吐为25Mpps。在接收器中,使用两个CPU核来接收数据包,每个CPU核的最大吞吐量为13Mpps。大流识别算法部署在其他CPU核中。
在具体实现中,接收数据包的CPU核接收数据包后将数据包放到到无锁队列中,而大流识别算法从无锁队列中获取数据包。将k设置为100,将内存大小设置为100MB,将滑动窗口大小设置为780k数据包(5秒),将滑动大小设置为258k数据包(1秒)。
不同方案的吞吐的对比如图13所示,本发明,HeavyKeeper(HK),CM Sketch(CM),UnivMon(UM),SpaceSaving(SS)和LossyCounting(LC)的吞吐量分别为25.33Mpps,19.06Mpps,14.51Mpps,13.57Mpps,12.93Mpps,12.34Mpps。可以看出本发明也有很高的吞吐性能。
本申请实施例的基于sketch的大流检测方法,使用一个哈希表来保存流的大小,并配合采样机制和基于位图的哈希桶快速重置算法,来实现对大流的动态实时测量,该算法具有线速包处理的能力,同时还可以适应流大小的动态变化,节省存储空间而且也有准确性的保证,以及通过对算法参数的设置,该算法能够在不同的时间尺度上对大流进行检测,包括缓慢变化的大流和突发流。
为了实现上述实施例,本申请还提出一种基于sketch的大流检测装置。
图14为本申请实施例提供的一种基于sketch的大流检测装置的结构示意图。
如图14所示,哈希表由哈希桶组成,所述哈希桶中存有K个计数器、流标识、流冲突计数器和位图;该基于sketch的大流检测装置包括:第一记录模块10、第二记录模块20第三记录模块30和更新模块40。
第一记录模块10,用于使用所述K个计数器记录所述流标识对应流收到的数据包。
第二记录模块20,用于每个计数器记录收到b个数据包中每条流的大小,其中,所述每条流的大小是每b个数据包中所有计数器的总和;其中,所述K和b为正整数。
第三记录模块30,用于滑动窗口每所述b个数据包滑动一次,将所述滑动窗口获取的数据包记录到哈希表中。
更新模块40,用于当映射到任一所述哈希桶的新流与所述哈希桶中原流不同,更新所述流冲突计数器,每当窗口滑动时,更新所述位图,当所述位图中记录的数据确定所述新流大于所述原流,重置存在冲突的所述哈希桶,所述新流替换所述哈希桶中原流。
本申请实施例的基于sketch的大流检测装置,通过使用一个哈希表来保存流的大小,并配合采样机制和基于位图的哈希桶快速重置算法,来实现对大流的动态实时测量,该算法具有线速包处理的能力,同时还可以适应流大小的动态变化,节省存储空间而且也有准确性的保证,以及通过对算法参数的设置,该算法能够在不同的时间尺度上对大流进行检测,包括缓慢变化的大流和突发流。
需要说明的是,前述对基于sketch的大流检测方法实施例的解释说明也适用于该实施例的基于sketch的大流检测装置,此处不再赘述。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本申请的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现定制逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本申请的实施例所属技术领域的技术人员所理解。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本申请的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。如,如果用硬件来实现和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本申请各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。尽管上面已经示出和描述了本申请的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对上述实施例进行变化、修改、替换和变型。
Claims (10)
1.一种基于sketch的大流检测方法,其特征在于,包括:哈希表由多个一维数组组成,每个所述一维数组由多个哈希桶组成,所述哈希桶中存有K个计数器、流标识、流冲突计数器和位图;
使用所述K个计数器记录所述流标识对应流收到的数据包;
每个计数器记录收到b个数据包中每条流的大小,其中,所述每条流的大小是每b个数据包中所有计数器的总和;其中,所述K和b为正整数;
滑动窗口每所述b个数据包滑动一次,将所述滑动窗口获取的数据包记录到哈希表中;
当映射到任一所述哈希桶的新流与所述哈希桶中原流不同,更新所述流冲突计数器,每当窗口滑动时,更新所述位图,当所述位图中记录的数据确定所述新流大于所述原流,重置存在冲突的所述哈希桶,所述新流替换所述哈希桶中原流。
2.如权利要求1所述基于sketch的大流检测方法,其特征在于,
使用Aj[t]表示第j个一维数组中的第t个哈希桶存储,并使用Aj[t].FID,Aj[t].C,Aj[t].CC,Aj[t].LUP和Aj[t].Bi,1≤j≤d,1≤t≤w,分别存储流标识,计数器,流冲突计数器、位图序列指针和一个位图数组的第i位;一维数组A1...Ad与d个哈希函数h1(.)...hd(.)相关联,其中d个哈希函数h1(.)...hd(.)两两相互独立。
3.如权利要求2所述基于sketch的大流检测方法,其特征在于,
对于每个属于流fi的数据包Pl,计算d个哈希函数h1(Fi)...hd(Fi),以使所述d个哈希函数将所述流fi映射到d个哈希桶Aj[hj(Fi)]中;
对于每个被映射到的哈希桶Aj[hj(Fi)],根据Aj[hj(Fi)].FID和流fi的流标识Fi的相互关系更新每个哈希桶;
在更新所述哈希桶的同时查询插入流的大小,最后根据流的流标识和流大小更新最小堆,所述最小堆中保存前k个的大流和流的流标识,并且在所述流标识上设置哈希索引。
4.如权利要求3所述基于sketch的大流检测方法,其特征在于,
在计数器更新阶段,所述流标识初始化为空NULL,所述计数器和所述流冲突计数器初始化为0;
当流映射的所述哈希桶未存储任何其他流时Aj[hj(Fi)].FID=NULL,将所述新流直接插入所述哈希桶,设置所述哈希桶中的流标识Aj[hj(Fi)].FID=Fi,设置所述计数器Aj[hj(Fi)].C←1和所述流冲突计数器Aj[hj(Fi)].CC←1。
5.如权利要求4所述基于sketch的大流检测方法,其特征在于,还包括:
当被映射的哈希桶Aj[hj(Fi)]中存储的流标识Aj[hj(Fi)].FID和被映射的流fi的流标识Fi相同时,更新所述哈希桶中的计数器Aj[hj(Fi)].C←Aj[hj(Fi)].C+1和所述流冲突计数器Aj[hj(Fi)].CC←Aj[hj(Fi)].CC+1。
6.如权利要求5所述基于sketch的大流检测方法,其特征在于,还包括:
当被映射的哈希桶Aj[hj(Fi)]中存储的流标识Aj[hj(Fi)].FID和被映射的流fi的流标识Fi不相同时Aj[hj(Fi)].FID≠Fi,更新所述流冲突计数器Aj[hj(Fi)].CC←Aj[hj(Fi)].CC-1。
7.如权利要求6所述基于sketch的大流检测方法,其特征在于,还包括:
在滑动窗口更新阶段,在滑动窗口时,重置所述流冲突计数器,更新块指针和所述位图,设置一个全局计数器C来为收到的数据包计数,以及一个块指针p表示当前记录的b个数据包是滑动窗口中的第几个数据包块,滑动窗口大小为W,每个窗口中的数据包块的个数为K,则W=b×K;
当有新的数据包时,增加所述全局计数器C=(C+1)modW,根据增加后的结果来判断是否要更新所述块指针p,如果Cmodb=0,增加块指针p←(p+1)modK。
8.如权利要求7所述基于sketch的大流检测方法,其特征在于,更新所述位图,包括:
当窗口没有发生滑动时候,进行所述计数器更新阶段。
9.如权利要求8所述基于sketch的大流检测方法,其特征在于,还包括:
当窗口发生了滑动Aj[hj(Fi)].LUP≠p,并且冲突次数多于所述哈希桶中所存储流的在b个数据包中的大小Aj[hj(Fi)].CC≤0,在所述位图中记录冲突情况Aj[hj(Fi)].Bp←0;
当窗口发生了滑动Aj[hj(Fi)].LUP≠p,并且冲突次数少于所述哈希桶中所存储流的在b个数据包中的大小Aj[hj(Fi)].CC>0,在所述位图中记录冲突情况Aj[hj(Fi)].Bp←1。
10.一种基于sketch的大流检测装置,其特征在于,所述装置包括:哈希表由哈希桶组成,所述哈希桶中存有K个计数器、流标识、流冲突计数器和位图;
第一记录模块,用于使用所述K个计数器记录所述流标识对应流收到的数据包;
第二记录模块,用于每个计数器记录收到b个数据包中每条流的大小,其中,所述每条流的大小是每b个数据包中所有计数器的总和;其中,所述K和b为正整数;
第三记录模块,用于滑动窗口每所述b个数据包滑动一次,将所述滑动窗口获取的数据包记录到哈希表中;
更新模块,用于当映射到任一所述哈希桶的新流与所述哈希桶中原流不同,更新所述流冲突计数器,每当窗口滑动时,更新所述位图,当所述位图中记录的数据确定所述新流大于所述原流,重置存在冲突的所述哈希桶,所述新流替换所述哈希桶中原流。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011545099.5A CN112671611B (zh) | 2020-12-23 | 2020-12-23 | 基于sketch的大流检测方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011545099.5A CN112671611B (zh) | 2020-12-23 | 2020-12-23 | 基于sketch的大流检测方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112671611A CN112671611A (zh) | 2021-04-16 |
CN112671611B true CN112671611B (zh) | 2023-01-31 |
Family
ID=75408146
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011545099.5A Active CN112671611B (zh) | 2020-12-23 | 2020-12-23 | 基于sketch的大流检测方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112671611B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113259263B (zh) * | 2021-04-29 | 2022-11-22 | 积至(海南)信息技术有限公司 | 一种深度报文检测集群中的数据包调度方法 |
CN113438168B (zh) * | 2021-05-21 | 2022-08-02 | 清华大学 | 软硬件混合流表管理方法及装置 |
CN113595816A (zh) * | 2021-07-16 | 2021-11-02 | 清华大学 | 一种数据流测算方法、设备和存储介质 |
CN113839835B (zh) * | 2021-09-27 | 2023-09-26 | 长沙理工大学 | 一种基于小流过滤的Top-k流精确监控系统 |
CN116132335A (zh) * | 2021-11-15 | 2023-05-16 | 华为技术有限公司 | 一种识别流的方法和装置 |
CN114866322B (zh) * | 2022-05-06 | 2023-06-13 | 清华大学 | 一种网络异常流量检测方法和装置 |
CN115580543B (zh) * | 2022-10-10 | 2023-07-14 | 国网江苏省电力有限公司南通供电分公司 | 一种基于哈希计数的网络系统活跃度评估方法 |
CN115766528B (zh) * | 2022-11-14 | 2024-03-26 | 西南科技大学 | 一种Top-K大象流的检测方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103647670A (zh) * | 2013-12-20 | 2014-03-19 | 北京理工大学 | 一种基于sketch的数据中心网络流量分析方法 |
CN111262756A (zh) * | 2020-01-20 | 2020-06-09 | 长沙理工大学 | 一种高速网络大象流精确测量方法及架构 |
CN111835599A (zh) * | 2020-08-05 | 2020-10-27 | 中国人民解放军国防科技大学 | 一种基于SketchLearn的混合网络测量方法、装置及介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101478608A (zh) * | 2009-01-09 | 2009-07-08 | 南京联创科技股份有限公司 | 基于二维散列的海量数据的快速操作方法 |
-
2020
- 2020-12-23 CN CN202011545099.5A patent/CN112671611B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103647670A (zh) * | 2013-12-20 | 2014-03-19 | 北京理工大学 | 一种基于sketch的数据中心网络流量分析方法 |
CN111262756A (zh) * | 2020-01-20 | 2020-06-09 | 长沙理工大学 | 一种高速网络大象流精确测量方法及架构 |
CN111835599A (zh) * | 2020-08-05 | 2020-10-27 | 中国人民解放军国防科技大学 | 一种基于SketchLearn的混合网络测量方法、装置及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112671611A (zh) | 2021-04-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112671611B (zh) | 基于sketch的大流检测方法和装置 | |
CN107566206B (zh) | 一种流量测量方法、设备及系统 | |
US9197564B2 (en) | Methods and apparatus for load balancing across member ports for traffic egressing out of a port channel | |
US7873054B2 (en) | Pattern matching in a network flow across multiple packets | |
US20130265883A1 (en) | Method and system for storing packet flows | |
Rottenstreich et al. | Optimal rule caching and lossy compression for longest prefix matching | |
CN107113282A (zh) | 一种抽取数据报文的方法及装置 | |
US10659327B2 (en) | Network traffic analysis | |
EP3282643B1 (en) | Method and apparatus of estimating conversation in a distributed netflow environment | |
WO2011066867A1 (en) | Random data stream sampling | |
EP3698255B1 (en) | Network recorders with entropy and value based packet truncation | |
US10887240B2 (en) | Automatic flow learning in network devices | |
US8064359B2 (en) | System and method for spatially consistent sampling of flow records at constrained, content-dependent rates | |
CN116095029B (zh) | 网络数据流测量方法、系统、终端及存储介质 | |
CN108206788B (zh) | 一种流量的业务识别方法及相关设备 | |
CN112486914B (zh) | 一种数据包存储与快查方法与系统 | |
CN116366554A (zh) | 一种流量限速方法、装置及设备 | |
CN112822077A (zh) | 数据中心网络中全网流量测量方法、系统及丢包检测方法 | |
CN113297430B (zh) | 基于Sketch的高性能任意部分键测量方法和系统 | |
Kong et al. | Time-out bloom filter: A new sampling method for recording more flows | |
CN114095265B (zh) | Icmp隐蔽隧道检测方法、装置及计算机设备 | |
CN113708985B (zh) | 一种流量的检测方法、装置及系统 | |
CN114710444A (zh) | 基于塔型摘要和可驱逐流表的数据中心流量统计方法和系统 | |
CN112286966A (zh) | 一种数据流处理、恢复方法以及设备和存储介质 | |
US11032206B2 (en) | Packet-content based WRED protection |
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 |