滑动窗口下基于GPU的网络访问超点连接数估算方法与流程

文档序号:15930126发布日期:2018-11-14 01:32阅读:249来源:国知局

本发明属于高速网络管理和并行计算技术领域,涉及一种滑动窗口下基于gpu的高速网络实时超点连接数估算技术。

背景技术

超点是一类特殊的主机。假设有两个网络:anet和bnet。这两个网络通过边界路由器er进行通信。anet可以是城域网或者是某个国家的网络。bnet是另一个城域网或者是internet。anet和bnet之间的所有流量都可以从er观察到。对于anet里的一个主机“aip”,在一段时间里通过er与aip进行通信的bnet里的主机称为aip的连接数。当aip的连接数大于某个指定的阈值θ时,aip就称为一个超点。

超点与网络里的许多事件有关,如ddos,扫描攻击等等。主机连接数也是网络管理和测量里的一个重要属性。由于超点仅占全部主机的一小部分,对超点进行重点监测是一种高效的高速网络实时管理方法。

在超点定义里的时间窗口可以是离散时间窗口也可以是滑动时间窗口。现有超点连接数计算方法都是在离散窗口下进行的。离散时间窗口下,相邻两个窗口之间没有重叠的时间。图1描述了离散窗口和滑动窗口下的流量划分情况。

网络anet和bnet之间的流量可以按照大小相同的连续时间片进行划分。时间片的长度可以是1秒,1分钟或根据具体应用设置为其它值。每个时间片用一个数字标识。如图1上半部分所示,一个滑动时间窗口包含从第t个时间片开始的连续k个时间片,记为w(t,k)。滑动时间窗口每次向前移动一个时间片。因此相邻两个滑动时间窗口之间含有k-1个相同的时间片。当k为1时,相邻两个时间窗口之间没有相互重叠的时间段。此时的时间窗口就是离散时间窗口,如图1的下半部分所示。

网络数据包在网络anet和bnet之间连续传输。如果将它们离散的划分,则连接数的估算结果会受到时间窗口起始点的影响。例如,令aip是anet里的一个主机。如图2所示,假设它只在从p0到p1的时间段之内和bnet里的主机通信。本文的“通信”是指aip向bnet里的主机发送数据包或者从bnet里的主机接受数据包。令pkt(aip,p0,p1)表示在时间段p0到p1里与aip通信的数据包流。

p0是离散时间窗口w(t,1)里的一个时间点,p1是离散时间窗口w(t+1,1)里的一个时间点。令p2表示w(t,1)和w(t+1,1)的时间边界。aip的数据包可以分为两部分:从p0到p2时间段里的数据包和从p2到p1时间段里的数据包。分别记为pkt(aip,p0,p2)和pkt(aip,p2,p1)。在离散时间窗口下,aip的连接数计算会由于以下两个原因而产生错误:

半丢失(halfloss,hl)根据pkt(aip,p0,p2)计算得到的连接数大于θ;但是从pkt(aip,p2,p1)计算得到的连接数小于θ。此时aip只在w(t,1)里被检测为超点。并且aip的连接数会丢失在时间段p2到p1之间的部分。

全丢失(fullloss,fl)从pkt(aip,p0,p2)和pkt(aip,p2,p1)里分别计算的连接数都小于θ,但是从pkt(aip;p0;p1)里计算得到的连接数大于θ。此时,超点aip在w(t,1)和w(t+1,1)里都不会被检测到。

用|hl|和|fl|表示这两种主机的数量。|hl|和|fl|与时间片的大小有关。用cs表示一个时间片的长度。cs越小,则pkt(aip,p0,p2)和pkt(aip,p2,p1)里包含的数据包个数越小,|hl|和|fl|也会相应的降低。但是在离散时间窗口下,cs就是测量的时间长度,不能随意改动。对于一些需要计算较长时间段里超点连接数的应用,离散时间窗口会引起很大的丢失。

cs也会影响超点连接数计算的延迟。如果从pkt(aip,p2,p1)计算得到的aip连接数大于θ,aip的连接数应该在p1立即计算。但是在离散时间窗口下,超点连接数只在每个时间窗口结束时计算一次。因此延迟为cs-p1。

离散时间窗口的上述缺点是由于它的移动长度等于窗口的长度。和离散时间窗口不同,对于滑动窗口,每个时间片的长度可以远小于窗口的长度。下文使用csd表示离散时间窗口下一个时间片的长度,即一个离散时间窗口的长度;使用css表示滑动窗口下一个时间片的长度。

滑动时间窗口比离散时间窗口具有更好的测量结果。它每次向前移动css的距离,并且增量式的存储和更新主机的连接数。由于受时间窗口起始点的影响更小,滑动窗口具有比离散窗口更高的准确率。由于在相同时间窗口长度的情况下,css远小于csd,所以滑动时间窗口可以更及时的计算超点连接数。

当和离散时间窗口具有相同窗口长度时,css可以被设置为很小的值来降低|hl|、|fl|和计算延迟。如果k被设置为足够大,滑动窗口下的|hl|和|fl|可以被忽略。例如我们从40gb/s的高速网络上收集了一小时的真实数据来测试|hl|和|fl|的值。这段数据流量从2017年10月21号的13:00开始持续一小时,并且也是后面实验数据集之一。当θ=1024,csd=300秒,css=1秒和k=300时,每个滑动窗口平均检测到574个超点。与滑动时间窗口相比,离散时间窗口下的|hl|下的平均多50个,|fl|平均多14个。

这个例子很好地说明了滑动时间窗口比离散时间窗口具有更高的准确率。假设我们要计算anet里的超点连接数(bnet里的超点连接数可以用相同的算法计算,只需要将ip地址进行交换)。

对于网络anet里的一个主机aip,在时间窗口w(t,k)里所有以aip作为源或宿地址的,通过边界路由器er的数据包组成了aip的数据包流,记为pkt(aip,t,k)。

通过提取pkt(aip,t,k)里每个数据包中除aip外的另一个地址,可以得到aip的对端主机流,记为hs(aip,t,k)。对于bnet里的某个主机bip,如果bip在时间窗口w(t,k)里与aip通信,则bip可能在hs(aip,t,k)里出现多次。因为aip从bip接收多个数据包,或者向bip发送多个数据包。

hs(aip,t,k)里的主机构成了aip的对端主机集合,记为op(aip,t,k)。op(aip,t,k)里元素的个数小于等于hs(aip,t,k)里元素的个数。记op(aip,t,k)里元素的个数为|op(aip,t,k)|。则|op(aip,t,k)|就是aip在时间窗口w(t,k)下的连接数。对于anet里的某个主机aip,如果|op(aip,t,k)|≥θ,则aip称为滑动窗口w(t,k)里的一个超点。

阈值θ是用户根据不同应用定义的一个正整数。例如,θ可以设置为过去一段时间内所有主机连接数的平均数,或者正常情况下服务器的连接数。

离散窗口下超点连接数估计相对简单,因为它不要求保存主机在前一段时间里的状态。但是估算结果存在以下两个问题:

1)计算值受时间窗口起始点的影响,不能检测出跨越时间窗口边界的超点。

2)计算结果有很大的延迟。

离散时间窗口的这两个缺点来自于它的移动方式。离散时间窗口每次移动的时间长度等于它自身的长度。当离散时间窗口长度越大时,计算延迟和错误率就会越高。滑动时间窗口很好的解决了上述问题,因为滑动窗口每次移动的时间长度可以远小于其自身的长度。例如,当时间窗口的长度设置为300秒时,滑动时间窗口每次可以只向前滑动1秒。而离散时间窗口必须移动300秒。对于40gb/s的高速网络,离散时间窗口会比滑动时间窗口漏检14个跨越时间边界的超点。但是滑动时间窗口下超点连接数计算会比离散窗口下更复杂。在滑动时间窗口下需要保存主机之前一段时间的状态并且比离散时间窗口更频繁的计算超点连接数。现有方法都不能在滑动窗口下运行,因为它们需要在每个时间段的开始将所有的数据结构进行初始化。这样会丢失之前时间段里记录的连接数信息。并且这些方法在每个时间窗口结束时占用大量时间计算超点连接数。计算时间超过了滑动窗口下一个时间片的长度。

在现有的超点连接数估计方法里,比特矩阵是最常用的保存主机连接数信息的数据结构。在扫描数据包时,通过将比特矩阵的某些位设置为1来表示不同主机的出现。为了在每个时间段结束时能恢复出超点,数据包会根据特殊的方法映射到比特矩阵里的某个或某些比特位。中国剩余定理(crt)是最早用来确定哪些比特位会被设置的方法。通过使用crt,比特矩阵里的每个位可以被不同的主机共享。但是crt的计算复杂,限制了该方法的速度。一种改进的方法是利用布隆过滤器的原理和比特串提取的方法将数据包映射到比特矩阵里的不同比特位。该方法从ip地址里提取特定位置的比特串作为数据包在比特矩阵里的一个索引。通过将不同位置的索引进行合并来恢复超点。以ip地址中的比特串作为索引,虽然操作简单,但是随机性不高,比特矩阵里的每个比特不能以相同的概率被使用。导致该方法内存利用率低,准确率高。同时该方法也不能对滑动窗口下的超点连接数进行估算。

当今网络带宽越来越大,并行计算成为了实时处理高速网络流的必要方法之一。许多现有方法试图通过使用高速内存,如静态随机存储器sram,来加快数据包的处理速度。但是sram容量有限,限制了这些方法在大规模网络的应用。并且超点连接数估算需要占用大量的资源,而cpu的处理速度就成为了方法的新瓶颈。gpu(图形处理器)比cpu具有更高的并行处理能力因为它包含了更多的计算单元。当使用gpu进行超点连接数估算时可以实时处理高速网络流量。一种能够容忍错误的哈希表来过滤流记录,同时使用位图来记录主机连接数的方法首次在gpu上实现了主机连接数的并行计算。但是该方法需要在扫描数据包时需要存储每个流记录的ip地址,而不能直接恢复出超点。对所有主机进行连接数计算会占用大量时间。而且该方法直接将网络数据包传递给gpu,占用大量的传输带宽。服务器与gpu之间的通信成为该方法的瓶颈。



技术实现要素:

为解决上述问题,本发明公开了一种基于gpu的滑动窗口下的超点连接数估算方法,利用一种新的结构来增量式的记录主机的连接数,基于gpu进行滑动窗口下实时高速网络访问超点连接数估算。该方法包括设置两个数据结构:滑动估值器矩阵和滑动候选超点列表,滑动估值器矩阵用于检查超点和记录超点连接数。滑动估值器矩阵是由u行v列的滑动估值器组成的矩阵。方法整体包括四个过程:在gpu上初始化滑动估值器矩阵和滑动候选超点列表、扫描一个时间片里的所有报文、在时间片结束时估算超点连接数、窗口滑动。本方法的数据结构均保存在gpu的显存里;四个过程均在gpu上运行,由gpu并行进行超点连接数估算。

为了达到上述目的,本发明提供如下技术方案:

滑动窗口下基于gpu的网络访问超点连接数估算方法,包括如下步骤:

数据结构初始化,所述数据结构包括滑动估值器矩阵和滑动候选超点列表;

扫描一个时间片里的所有数据包,利用滑动估值器矩阵记录主机连接数,在扫描数据包时,判断主机是否为超点,将检测出的超点添加到候选主机列表里;

在时间片结束时,根据滑动估值器矩阵计算候选超点列表里的每个主机的连接数,输出连接数大于阈值的主机及其估算值;估算完所有候选超点主机的连接数后,更新滑动估值器矩阵和候选超点列表;

将窗口向前滑动一个时间片,开始扫描下一个时间片里的数据包,估算下一个滑动窗口里的超点连接数。

具体的,包括如下步骤:

第一步,设置参数

设置由u行v列的滑动估值器组成的滑动估值器矩阵,每个滑动估值器包含:由n个比特组成的超点指示器;由g个整数组成的滑动模糊估计器(对于ipv4,g的取值为8);由g’个整数组成的滑动线性估值器(g’的取指为大于1024的整数,g’取值越大,估值结果越精确);设置用于保存检测到的候选超点的滑动候选列表,由于超点个数不确定,所以滑动候选列表会在运行时动态变化。

第二步,在gpu上初始化数据结构

在gpu的显存上分配滑动估值器矩阵的内存空间,初始化滑动估值器矩阵,将滑动估值器矩阵里所有滑动模糊估计器的整数设置为最大值。将滑动估值器矩阵里所有滑动线性估计器的整数设置为最大值。在gpu上预留一块显存空间,用于保存候选超点列表。由于超点个数只占全部主机的一小部分,所以,预留的显存空间不用很大。

第三步,扫描ip数据包,提取ip地址对

扫描每个时间片里的数据包,提取每个数据包的ip地址,得到每个数据包的ip地址对。ip地址对是形如<aip,bip>的二元组。aip是要测量的网络里的一个主机,bip是通过边界路由器与aip通信的主机。在服务器上先对这些ip对进行缓存。当缓冲区满或者一个时间片里的数据包扫描完成时,将服务器上缓冲区里的ip地址对通过pcie总线拷贝到gpu的显存里。

第四步,启动gpu线程,扫描ip地址对

当复制完成后,gpu启动与ip地址对相同数量的线程来处理收到的ip地址对。每个gpu线程读取ip地址对缓冲区的一个ip地址<aip,bip>对进行处理。滑动估值器矩阵的每一行对应一个哈希函数rhi,i∈[0,v-1]。rhi(aip)将aip映射到第i行的任意一个滑动估值器。对于第i行,第rhi(aip)个滑动估值器会被更新,保存aip的连接数。

第五步,时间片结束时,估算超点连接数

在一个时间片结束时扫描完该时间片里的所有数据包后,开始进行超点连接数估算。对候选超点列表里的主机进行分组,每组1024个主机。对于每组主机,分别在gpu上进行超点连接数估算。估算方法为,对于一组超点主机,启动1024个线程,每个线程分别估算一个主机的连接数。每个线程估算候选主机连接数的方法如下。设第i行所有滑动估值器的滑动线性估值器的值小于k的整数的个数为|ldr(i)|k。计算滑动估值器矩阵里滑动线性估值器的每个整数被设置的概率对于主机aip,将滑动估值器矩阵每一行里与aip对应的滑动估值器的滑动线性估值器进行合并:将每一个滑动估值器的滑动线性估值器的整数按取所有相同位置的最大整数的操作进行合并得到一个新的滑动线性估值器。扫描该合并后的滑动线性估值器,得到值小于k的整数的个数|ule(aip)|k。根据公式计算aip的连接数。候选超点列表里的每个主机按上述方法被一个gpu线程处理得到它的连接数估算值。输出所有估算值大于等于θ的主机及其连接数估算值就完成了一个滑动窗口下的超点连接数估算,θ是超点的阈值。

第六步,更新滑动估值器矩阵和候选超点列表:

完成一个滑动窗口下的超点连接数估算后对滑动估值器矩阵和候选超点列表进行更新。将滑动估值器矩阵里的每个滑动估值器的超点指示器的每个比特设置为0。对于每个滑动估值器里的滑动模糊估值器的每个整数,如果其值小于最大值,则将其加1。对于每个滑动估值器里的滑动线性估值器的每个整数,如果其值小于最大值,则将其加1。扫描候选超点列表里的每个主机,确定其在更新后的滑动估值器矩阵里是否仍然为候选超点。如果是,则将其加入新的候选超点列表并更新对应的超点指示器的比特位。扫描完所有的候选超点主机后,用新的候选超点主机列表替换当前的候选超点主机列表。

第七步,将窗口滑动一个时间片,重复从第三步开始执行

估算完一个滑动时间窗口里的超点连接数,并更新完滑动估值器矩阵和候选超点列表后,将时间窗口滑动一个时间片,回到第三步,开始扫描下一个时间片里的所有数据包。

进一步的,所述第四步中更新某个滑动估值器的方法包括如下步骤:

首先用一个哈希函数h3将bip随机映射到该滑动估值器的滑动线性估值器的g’个整数中的一个,并将该整数设置为0。然后用一个随机哈希函数h1,将bip映射到[0,232-1]之间的一个整数h1(bip)。计算h1(bip)的最低有效位lsb(h1(bip))。某数的最低有效位就是从右开始,该数里第一个比特“1”的位置。如果lsb(h1(bip))小于一个整数τ,则不再对该ip地址对进行进一步的处理。其中τ=log2(θ/g),θ是超点的阈值。如果lsb(h1(bip))大于等于一个整数τ,则用h2将bip随机映射到该滑动估值器的滑动模糊估值器的g个整数中的一个,并将该整数设置为0。滑动估值器矩阵的每一行均按照上述方法对ip地址对<aip,bip>进行处理。

进一步的,上述滑动估值器矩阵中每一行都更新后,如果lsb(h1(bip))大于等于一个整数τ,需要进一步测试aip是否为超点。

进一步的,所述测试aip是否为超点的方法包括如下步骤:

将每一行里与aip对应的滑动估值器进行合并:将每一个滑动估值器的超点指示器按比特与的操作进行合并得到一个新的合并后的超点指示器,将每一个滑动估值器的滑动模糊估值器的整数按取所有相同位置的最大整数进行合并得到一个新的滑动模糊估值器。

计算滑动模糊估值器里所有值小于k的整数的个数,如果数量小于ρ*g,则将不再进行进一步处理,其中如果数量大于等于ρ*g,则aip被检测为是一个超点。当aip被检测为超点时,需要先确定aip是否在该滑动时间窗口内已经被检测为超点,如果已经被检测为超点,则无需进一步处理,如未被检测为超点,则将aip添加到候选超点列表,并将每行里与aip对应的滑动估值器里的超点指示器的第h4(aip)比特设置为1。

进一步的,确定aip是否在该滑动时间窗口内已经被检测为超点的方法包括如下步骤:

用一个哈希函数h4将aip映射到超点指示器里的某个随机比特位h4(aip),如果在上述合并后的超点指示器里该位为1,则表示aip已经在候选超点列表里;如果在上述合并后的超点指示器里该位为0,则表示aip未在候选超点列表里。

与现有技术相比,本发明具有如下优点和有益效果:

1.本方法能在滑动窗口下检测超点并估算器连接数,而其它方法只能估算离散窗口下的超点连接数。本方法明显具有优越性,估算值更准确,不受窗口起始时间的影响,不会遗漏跨越时间边界的超点。

2.本方法比现有方法具有更低的时间延迟,能及时对超点连接数进行估算。本方法在每次时间片结束时都会对超点连接数进行估算。由于时间片的长远远小于时间窗口的长度,所以本方法能更及时的估算超点连接数。

3.本方法能实时处理高速网络流量。滑动估值器矩阵可以同时被多个ip地址对更新而不产出错误。为了减少在每个时间片结束时算法的处理时间,该方法在扫描数据包的时候实时生成候选超点列表。在时间片结束时通过计算候选列表里主机的连接数,缩小了计算范围,提高了算法的整体速度。本发明方法能够在gpu并行处理大量的网络数据包,实时估算高速网络下的超点连接数。

附图说明

图1为网络流量在滑动窗口和离散窗口下的划分状态;

图2为离散时间窗口下由于跨越时间边界引起的错误;

图3为滑动估值器矩阵结构示意图;

图4为在gpu上扫描每个时间片里的ip地址对;

图5为每个时间片结束时,在gpu上估算超点连接数;

图6为本发明对滑动窗口下超点连接数估算模型;

图7为由三个时间片组成的滑动时间窗口示例;

图8为哈希函数映射举例;

图9为具体实施方式中里初始化后的滑动估值器矩阵;

图10为处理完第一个时间片里的第一个ip地址对后的滑动估值器矩阵;

图11为扫描完前3个时间片后的滑动估值器矩阵;

图12为第一个滑动时间窗口结束时计算完超点连接数且更新完所有整数和比特位后的滑动估值器矩阵。

具体实施方式

以下将结合具体实施例对本发明提供的技术方案进行详细说明,应理解下述具体实施方式仅用于说明本发明而不用于限制本发明的范围。

本发明提供的滑动窗口下基于gpu的网络访问超点连接数估算方法,其整体架构如图6所示,为了说明本发明是如何估算滑动窗口下的超点连接数,以下给出一个具体示例。

将所有的网络流按照固定长度大小的时间片进行划分,本例假设有5个时间片:s1,s2,s3,s4,s5;每个滑动窗口由连续的三个时间片组成,共有3个时间窗口w(1,3),w(2,3),w(3,3),如图7所示;

每个时间片里包含的ip地址对如下:

ippair(s1)=[<a1,b1>,<a2,b2>,<a1,b2>,<a1,b3>,<a1,b4>];

ippair(s2)=[<a2,b1>,<a2,b2>,<a1,b5>,<a1,b3>,<a1,b6>,<a1,b4>];

ippair(s3)=[<a1,b7>,<a2,b1>,<a1,b5>,<a1,b3>,<a1,b6>,<a1,b4>,<a1,b8>,<a1,b9>,<a1,b10>];

ippair(s4)=[<a1,b7>,<a2,b1>,<a1,b5>,<a3,b3>,<a1,b6>,<a1,b4>,<a1,b11>,<a1,b12>];

ippair(s5)=[<a1,b7>,<a3,b1>,<a2,b5>,<a1,b13>,<a1,b6>,<a1,b14>,<a1,b15>];

上述例子中anet里包含两个主机:a1,a2和a3;bnet里包含15个主机:b1到b15。超点阈值设置为5;滑动估值器矩阵设置为2行2列;每个滑动线性估值器包含的整数g’设置为8;滑动模糊估值器和滑动线性估值器里的整数设置为3比特,每个整数最大值为7。滑动估值器里的超点指示器设置为2bit。

根据统计方法可得,主机a1,a2,a3在不同滑动时间窗口下的对端主机集合和连接数分别为:

op(a1,1,3)={b1,b2,b3,b4,b5,b6,b7,b8,b9,b10}

op(a1,2,3)={b3,b4,b5,b6,b7,b8,b9,b10,b11,b12}

op(a1,3,3)={b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15}

|op(a1,1,3)|=10

|op(a1,2,3)|=10

|op(a1,3,3)|=13

op(a2,1,3)={b1,b2}

op(a2,2,3)={b1,b2}

op(a2,3,3)={b1}

|op(a2,1,3)|=2

|op(a2,2,3)|=2

|op(a2,3,3)|=1

op(a3,1,3)={}

op(a3,2,3)={b3}

op(a3,3,3)={b1,b3}

|op(a3,1,3)|=0

|op(a3,2,3)|=1

|op(a3,3,3)|=2

anet里的主机和bnet里的主机被不同哈希函数映射后的值如图8所示。

基于上述示例,本发明方法具体包括如下步骤:

步骤1:设置参数

如图3所示,设置滑动估值器矩阵里滑动估值器的行数和列数分别为两行两列,u=2,v=2。每个滑动估值器里超点指示器所含的比特位个数位2个,即n=2。滑动模糊估值器里的整数个数为8,滑动线性估值器里的整数个数位8;每个整数均由3个比特组成。

步骤2:初始化滑动估值器矩阵

在gpu的显存上分配滑动估值器矩阵,并对其进行初始化。所有超点指示器的比特位都设置位0,所有滑动模糊估值器和滑动线性估值器的整数设置为最大值7。初始化过后的滑动估值器矩阵如图9所示。

步骤3:在gpu上分配ip地址对缓存和超点列表存储空间

在gpu的显存上分配一块存储空间用于接收从服务器上传递的ip地址对。设置ip地址缓存里能保存20个ip地址对。则在gpu上分配的用于缓存ip地址对的空间大小为:160字节。在gpu上预留一块显存空间,用于保存检测到的候选超点列表。设置候选超点列表最多可以保存10个检测到的候选超点,则预留的用于保存候选超点列表的空间大小为40字节。

步骤4:扫描一个时间片里的数据包

从一个时间片开始时,扫描该时间片里的数据包,从每个ip数据包提取ip地址对,并将ip地址对保存到服务器上的缓存中。在第1个时间片里总共有5个数据包,从每个数据包提取ip地址对,得到该时间片里的ip地址对序列ippair(s1)。

步骤5:复制ip地址对到gpu显存

当ip地址对缓存满或者到达一个时间片结尾扫描完所有ip数据包时,将服务器上的ip地址对缓存通过pcie总线复制到gpu上的ip地址对缓存。在第1个时间片里一共有5个ip地址对,而ip地址对缓存里最多可以保存20个ip地址对。所以在时间片结束时就将缓存区里的5个ip地址对复制到gpu上,如图4所示。

步骤6:启动gpu线程,处理ip地址对

当复制完ip地址对的缓存时,在gpu上启动与收到ip地址对数量相同的线程,每个线程处理一个ip地址对。在第一个时间片里,gpu缓存收到5个ip地址对,所以在gpu上启动5个线程,每个线程处理一个ip地址对。

步骤7:找到在滑动估值器矩阵里与ip地址对对应的滑动估值器。

对于每个ip地址对,根据哈希函数rhi()找到第i行里对应的滑动估值器。对于第一个时间片里的第一个ip地址对<a1,b1>,从哈希函数映射表里可以得知rh0(a1)=0,rh1(a1)=1。所以ip地址对<a1,b1>会被映射到滑动估值器矩阵的第一行的第1个滑动估值器se[0,0]里,被映射到第二行的第二个滑动估值器se[1,1]里。

步骤8:更新滑动线性估值器

在每行里,更新与ip地址对对应的滑动估值器里的滑动线性估值器。根据哈希函数h3(),将滑动线性估值器里的一个整数设置为0。对于第一个时间片里的第一个ip地址对<a1,b1>,从哈希函数映射表里可以得知h3(b1)=0。所以滑动估值器se[0,0]和se[1,1]里的滑动线性估值器的第一个整数会被设置为0。

步骤9:计算ip地址的最低有效位,确定是否更新滑动模糊估值器

利用哈希函数h1()将ip地址对里的第二个ip地址进行随机映射,然后计算映射后的值的最低有效位。将计算得到大最低有效位与τ=log2(θ/g)进行比较。如果最低有效位大于τ则根据后续步骤更新滑动模糊估值器。如果最低有效位小于τ则不更新滑动模糊估值器。根据哈希表可得,第一个ip地址对的第二个ip地址计算得到的最低有效位lsb(h1(b1))为2。本实例里,θ=5,g=8。计算得到的τ小于0,所以需要更新滑动模糊估值器。

步骤10:更新滑动模糊估值器

在每行里,更新与ip地址对对应的滑动估值器里的滑动模糊估值器。根据哈希函数h2(),将滑动线性估值器里的一个整数设置为0。对于第一个时间片里的第一个ip地址对<a1,b1>,从哈希函数映射表里可以得知h2(b1)=1。所以滑动估值器se[0,0]和se[1,1]里的滑动线性估值器的第二个整数会被设置为0。处理完第一个时间片里的第一个ip地址对后的滑动估值器矩阵如图10所示。

步骤11:计算ip地址对的合并滑动模糊估值器

更新完滑动模糊估值器后,将所有与第一个ip地址对应滑动模糊估值器进行合并,得到合并后的滑动模糊估值器ure。合并方法为取每个滑动模糊估值器里的最大整数。对于第一个ip地址对<a1,b1>,将滑动模糊估值器[0,0]和滑动模糊估值器[1,1]进行合并,合并后的滑动模糊估值器里整数集合为ure={7,0,7,7,7,7,7,7}。

步骤12:根据合并后的滑动模糊估值器,确定ip地址对里是否包含超点。

计算得到合并后的滑动模糊估值器ure后,计算ure里数值小于滑动窗口里时间片个数的整数的个数|ure|k,将|ure|k与ρ*g比较。如果大于等于ρ*g,则该ip地址对里第一个ip地址为超点。本例中,ρ*g计算后取整,得3。扫描第一个ip地址对后|ure|k为1,小于3,所以此时不是超点。扫描完第1个时间片里的第4个ip地址对后,计算得到的a1的合并滑动模糊估值器为ure={7,0,0,0,7,7,7,7},且|ure|k=3。此时a1被检测为超点。

步骤13:检测到超点后,计算合并超点指示器

当检测到一个超点后,将所有与第一个ip地址对应的超点指示器进行合并,得到合并后的超点指示器。合并时,每个超点指示器按照比特与的方式进行合并。本例里,扫描完第1个时间片里的第4个ip地址对后,会将a1检测为超点。计算si[0,0]和si[1,1]合并后的超点指示器usi={0,0}。

步骤14:根据合并后的超点指示器,确定超点是否加入过超点候选列表

根据哈希函数h4()确定超点与超点指示器里的哪个比特对应。测试在合并超点指示器里,该比特是否被设置为1。如果被设置为1,则表示该超点已经在候选超点列表里;如果该比特为0,则表示该超点为被加入过候选超点列表。本例里,扫描完第1个时间片里的第4个ip地址对后,会将a1检测为超点。h4()将a1映射到超点指示器的第二个比特。usi里的第二个比特为0,所以a1未曾被加入过候选超点列表。

步骤15:将检测到的超点加入候选超点列表

如果步骤12检测到了超点,且在步骤14确定该超点未被加入过候选列表,则需要将该超点添加到候选超点列表里。本例里,扫描完第1个时间片里的第4个ip地址对后,会将a1检测为超点,且a1未在候选超点列表里。将a1加入候选超点列表。此时候选超点列表里包含一个检测到的超点a1。

步骤16:超点加入超点列表后,在超点指示器里记录该主机

当将一个超点加入候选列表后,需要将所有与该超点主机对应的滑动估值器的超点指示器的对应比特位设置为1。本例里,扫描完第1个时间片里的第4个ip地址对后,会将a1检测为超点,并将a1添加到候选超点列表里。si[0,0]和si[1,1]与a1对应,且h4(a1)=1。将si[0,0]和si[1,1]的第二个比特设置为1。更新后的超点指示器为si[0,0]={0,1},si[1,1]={0,1}。

步骤17:处理完一个缓存里的所有ip地址对后,等待下一个缓存满或到达时间片结尾

当所有gpu线程处理完ip地址对后,gpu等待下一次ip地址对缓存满,再从步骤6开始,处理新缓存里的ip地址对。如果该缓存是一个滑动窗口的最后一个时间片里的最后一个ip地址对缓存,则开始估算超点连接数,如图5所示。本例里一个滑动时间窗口包含3个时间片。扫描完前3个时间片后的滑动估值器矩阵如图11所示。

步骤18:计算滑动估值器矩阵每行里滑动线性估值器的每个整数被设置的概率

统计滑动估值器矩阵每行里滑动线性估值器的所有值小于滑动窗口时间片个数的整数个数。将得到的整数个数除以每行里所有滑动线性估值器的整数个数就得到滑动估值器矩阵每行里滑动线性估值器的每个整数被设置的概率。本例例,第一行的所有滑动线性估值器共有10整数数值小于3;第二行里有7个。每行的滑动线性估值器里一共有16个整数。所以第一行滑动线性估值器的整数被设置的概率为62.5%,第二行为50%。

步骤19:计算合并滑动线性估值器里每个整数被设置的概率

将每行里滑动线性估值器的每个整数被设置的概率相乘,得到合并滑动线性估值器里每个整数被设置的概率本例里,第一行和第二行滑动线性估值器的整数被设置的概率分别为62.5%和50%,

步骤20:启动gpu线程计算超点连接数

扫描候选超点列表,根据滑动线性估值器计算检测到的每个超点连接数。在gpu上启动固定数量的线程,每个线程处理一个候选超点列表里的超点。本例中,扫描完第三个时间片后,候选超点列表里有一个超点a1。在gpu上启动一个线程,计算a1的连接数。

步骤21:计算超点的合并滑动线性估值器

将所有与超点对应的滑动线性估值器进行合并,得到合并后的滑动线性估值器ule。合并时,每个滑动线性估值器取对应整数的最大值。本例里,扫描完第3个时间片里的所有ip地址对后,开始计算a1的连接数。a1与slr[0,0]和slr[1,1]对应。计算slr[0,0]和slr[1,1]合并后的滑动线性估值器ule={0,0,0,0,0,0,0,0}。

步骤22:计算合并滑动模糊估值器里被设置的整数个数

计算得到合并后的滑动模糊估值器ule后,计算ule里数值小于滑动窗口里时间片个数的整数的个数|ule|k。当|ule|k等于g’时,|ule|k设置为g’-1。|ule|k用于计算连接数。本例里,扫描完第3个时间片里的所有ip地址对后,计算得合并后的滑动线性估值器ule={0,0,0,0,0,0,0,0}。|ule|k=7。

步骤23:计算连接数

计算得到|ule|k后,根据公式计算超点连接数。本例里,g’=8。主机a1的|ule|k=7。a1连接数估计值为13.64,取整为13。在第一个滑动时间窗口里,a1的连接数为10,接近估算值。

步骤24:输出超点及其连接数

对于候选超点列表里的每个超点,计算完其连接数后,将所有连接数估计值大于超点阈值的主机及其连接数复制到服务器上,作为进一步的分析处理。对于估计值小于阈值的主机则不作为超点,不再输出到服务器上。本例里a1的连接数估计值为13。计算完超点连接数后将a1和其连接数估计值输出到服务器内存空间里。

步骤25:更新超点指示器

估算完超点连接数后,将滑动估值器矩阵里的所有超点指示器的比特位设置为0。本例里,在扫描ip地址对时,si[0,0]和si[1,1]的第二个比特被设置为1,此时需要将其恢复为0。

步骤26:更新滑动模糊估值器

估算完超点连接数后,将滑动估值器矩阵里的所有滑动模糊估值器的整数进行更新。如果滑动模糊估值器的一个整数值小于最大值,则将其加1。本例里滑动模糊估值器里第一个整数的最大值为7。对于等于7的整数不作处理;对于小于7的整数,将其加1。

步骤27:更新滑动线性估值器

估算完超点连接数后,将滑动估值器矩阵里的所有滑动线性估值器的整数进行更新。如果滑动线性估值器的一个整数值小于最大值,则将其加1。本例里滑动线性估值器里第一个整数的最大值为7。对于等于7的整数不作处理;对于小于7的整数,将其加1。更新完之后的滑动估值器矩阵如图12所示。

步骤28:确定候选超点列表里的每个主机在更新完滑动线性估值器后是否仍然是超点

对于候选超点列表里的每个主机,在更新完滑动估值器矩阵后,需要根据更新后的滑动模糊估值器重新确定其是否仍然是超点。根据更新后的滑动估值器矩阵,计算每个主机的合并滑动模糊估值器ure。然后计算ure里数值小于滑动窗口里时间片个数的整数的个数|ure|k,将|ure|k与ρ*g比较。如果大于等于ρ*g,则该主机在下一个滑动时间窗口里仍然为超点。本例中,ρ*g计算后取整,得3。根据更新后的滑动估值器矩阵,计算得到的a1的合并滑动模糊估值器为ure={1,1,1,1,1,1,1,1},且|ure|k=7。a1在下一个滑动时间窗口里仍然为超点。

步骤29:删除非超点

如果候选超点列表里的一个主机在步骤28里没有被检测为超点,则将其从候选超点列表里删除。

步骤30:更新超点指示器

如果候选超点列表里的一个主机在步骤28里被检测为超点,则更新滑动估值器矩阵里与该超点主机对应的超点指示器,避免该主机在扫描新时间片里的ip地址对时再次被加入候选超点列表。主机a1在步骤26里被检测为超点。si[0,0]和si[1,1]与a1对应,且h4(a1)=1。将si[0,0]和si[1,1]的第二个比特设置为1。更新后的超点指示器为si[0,0]={0,1},si[1,1]={0,1}。

步骤31:将时间窗口滑动一个时间片,估算下一个时间窗口的超点连接数

估算完一个时间窗口的超点连接数,更新完滑动估值器矩阵和候选超点列表后,将时间窗口滑动一个时间片,重复步骤3开始扫描下一个时间片的ip地址对,估算下一个滑动时间窗口里的超点连接数。

按照上述步骤可以在滑动窗口下对高速网络流量进行连续的超点连接数估算。

滑动窗口下实时超点连接数计算是网络研究领域里一个重要内容。增量式更新和低估算时间是它的两个难点。本发明提出的方法算法首次解决了这一问题。为了减少在每个时间片结束时计算超点连接数的时间,本发明利用滑动模糊估值器在扫描数据包的时候生成一个候选超点列表。滑动模糊估值器是一种轻量级的连接数估值器。由于它占用内存少处理速度快,在扫描数包时不会带来太多延迟。在每个时间片结束时,本发明利用滑动线性估值器估算每个候选超点的连接数。滑动线性估值器能准确的给出每个超点主机的连接数估计值。

本发明方案所公开的技术手段不仅限于上述实施方式所公开的技术手段,还包括由以上技术特征任意组合所组成的技术方案。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1