背景技术
网络流量是由一个个报文构成的,网络中传输的报文具有一些在传输过程中不变特性的字段,如源IP、宿IP等,在测量时间范围内,这些报文中具有相同流标识的若干报文构成流,这个具有相同字段的报文集合称为网络流,如常用的网络流按照报文字段五元组定义,即源IP、宿IP、源端口、宿端口和协议字段,将具有相同五元组字段的报文集合称为一个网络流,并将识别网络流的字段组合称为流标识,对于根据五元组字段定义的网络流,其流标识为{源IP、宿IP、源端口、宿端口和协议}。按照网络流标识中的某一个字段或者某几个字段定义的网络流集合称为聚合流,具有相同聚合点标识的流构成聚合点标识的流构成聚合点。如按照源IP聚合或者按照宿IP聚合,那么其对应的字段为聚合点,如按照源IP聚合的网络流,其源IP定义为聚合点。超点是流数超过了一个事先定义阀值的聚合点。本发明就是为了检测出超点。
互联网安全中经常需要检测出链接大量宿IP(源IP)的源IP(宿IP)的问题属于超点检测问题,在这里面超点定义为链接数量超过一个定义阀值的源IP或者宿IP。超点检测问题举例如下:设一个数据流
P={(A.B)(B.A)(D.B)(B.D)(F.A)(C.B)(E.A)(C.B)(B.A)(E.B)(C.A)(B.A)(E.A)(E.B)(A.C)(B.D)(C.D)(B.A)(A.B)(B.C)(D.A)(C.B)}
在这个集合中一个有20个元素,这里的元素就是我们对应的每个报文,每个元素包括小数点前1位字母和小数点后1位字母,小数点前一位的字母定义为报文对应的源IP标识,小数点后面的一位字母定义为报文对应的宿IP标识。如果我们将具有相同源宿IP标识的数聚合在一起就是
F={(A.B)(B.A)(D.B)(B.D)(F.A)(C.B)(E.A)(E.B)(C.A)(A.C)(C.D)(B.C)(D.A)}
共有13个元素,这些元素就是我们定义的流,每个流包含有1个或多个报文,如果按照小数点前面相同的字母进行聚合,同时记录聚合中包含元素的数量,就成为
S={(A,2)(B,3)(D,2)(F,1)(C,3)(E,2)}
在这个集合中包含的这6个元素就称为聚合点信息,每个元素中包括两个信息,第一个字母就是聚合点标识,第二个数就是属于这个聚合点的流数,如(B,3)表示标记为B的流有3个。如果我们定义超点检测阀值为3,即流的数量超过或等于3的聚合点定义为超点,因此在这个例子中,聚合点B和C就是我们要检测的超点。本发明的任务就是给出一种高效从数据流S中检测出阀值为3超点的方法,也就是检测出超点B和C,以及它们的流数。
超点问题在网络安全中具有重要的应用价值。(1)检测网络蠕虫:一个蠕虫主机向大量的宿地址发送探测流量,这台蠕虫主机可以看成是一个超流主机。(2)检测DDoS/DoS:DDoS/DoS攻击过程中,大量的主机/IP地址向一个目标地址发送大量的流量,这个被攻击的目标主机也可以看成一个超流主机。(3)检测端口扫描攻击:一个主机为了发现易攻击的对象存在,向不同的IP地址和不同的端口发起大量链接,这个源IP也可以被看成是超流IP。(4)超流问题还可以用在P2P分布式网络中,主机对中可能会产生大量的链接,超流IP被认为是热点IP,通过实时检测超流IP有助于进行负载均衡以提高网络的效率。
为了能够检测网络流量中的超点,测量***需要能够在内存中维护每个流的信息记录和每个聚合点的信息记录,因此如何在内存中维护流记录信息和聚合点信息成为超点检测方法的关键所在。传统的方法是直接在内存中维护所有的流信息和聚合点信息,如Snort和FlowScan都是使用这种方法,它的缺点是需要消耗大量的内存空间,这种方法只能处理低速局域网中的流量。为了能够检测高速网络中的超点,Venkataraman提出两种基于流抽样的超点IP检测技术,但是这种方法仍然是要维护所有被抽样到的流信息和聚合点的信息,这种方法的本质和直接使用哈希表存储所有流信息没有区别,也需要消耗大量的内存空间,难于用于高速网络流量超点检测。Zhao提出一种使用比特向量维护流信息记录,这种方法由于维护每个流的信息只需要一个比特,在维护流记录信息方面可以节省大量的测量资源,但是Zhao的方法直接使用一个哈希函数映射到比特向量中,不同流的映射到同一个比特位置上的概率很大,造成了流映射的冲突,使得流数估计上误差较大;这种方法的第二个缺点就是仍然需要为所有测量到的聚合点维护记录信息,这个也要浪费大量的内存资源的消耗。针对这两个缺点,Zhao提出了第二个解决方案,定义一个比特矩阵,将聚合点标识映射到矩阵的X轴,流标识映射到矩阵的Y轴,将流信息和聚合点流数记录在一个矩阵中,这种方法的优点的相对第一种方案精度要高些,这种方法的主要缺点是:维护这个矩阵需要大量的内存资源;另外由于这种方法在测量期间不知道哪个聚合点可能是超点,因此所有聚合点的标识都需要记录;比特矩阵实际上只记录了聚合点的流数信息,因此该方法还需要浪费大量内存资源记录所有聚合点的标识信息。
Bloom Filter是Burton Bloom在20世纪70年代提出的,Bloom Filter被广泛用于拼写检查和数据库***中。近二十年来,随着网络技术的发展,Bloom Filter在网络领域获得广泛的应用,各种Bloom Filter变种和新的应用不断出现。Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合(falsepositive)。
初始状态时,Bloom Filter是一个包含m位的位数组,每一位都置为0。图1是初始状态时,Bloom Filter是一个包含m位的位数组,每一位都置为0。
为了表达S={x1,x2,…,xn}这样一个n个元素的集合,Bloom Filter使用k个相互独立的哈希函数(Hash Function),它们分别将集合中的每个元素映射到{1,…,m}的范围中。对任意一个元素x,第i个哈希函数映射的位置hi(x)就会被置为1(1≤i≤k)。如果一个位置多次被置为1,那么只有第一次会起作用,后面几次将没有任何效果。在图2中,k=3,且有两个哈希函数选中同一个位置。
在判断y是否属于这个集合时,使用k次哈希函数,如果所有hi(y)的位置都是1(1≤i≤k),那么就认为y是集合中的元素,否则就认为y不是集合中的元素。
Bloom Filter在判断一个元素是否属于它表示的集合时会有一定的错误率(falsepositive rate),假设kn<m且各个哈希函数是完全随机的,当集合S={x1,x2,…,xn}的所有元素都被k个哈希函数映射到m位的位数组中时,这个位数组中某一位还是0的概率是:p=(1-1/m)kn≈e-kn/m
其中1/m表示任意一个哈希函数选中这一位的概率,(1-1/m)表示哈希一次没有选中这一位的概率。要把S完全映射到位数组中,需要做kn次哈希。某一位还是0意味着kn次哈希都没有选中它,因此这个概率就是(1-1/m)的kn次方。
令ρ为位数组中0的比例,则ρ的数学期望E(ρ)=p。在ρ已知的情况下,要求的错误率(false positive rate)为:
f=(1-ρ)k≈(1-p)k=(1-(1-1/m)kn)k≈(1-e-kn/m)k
(1-ρ)为位数组中1的比例,(1-ρ)k就表示k次哈希都刚好选中1的区域,即falsepositive rate。
Bloom Filter要靠多个哈希函数将集合映射到位数组中,那么应该选择几个哈希函数才能使元素查询时的错误率降到最低呢?如果哈希函数的个数多,那么在对一个不属于集合的元素进行查询时得到0的概率就大;但另一方面,如果哈希函数的个数少,那么位数组中的0就多。为了得到最优的哈希函数个数,需要根据错误率公式进行计算。
f=exp(k ln(1-e-kn/m)),令g=k ln(1-e-kn/m),只要让g取到最小,f自然也取到最小。由于p=e-kn/m,可以将g写成g=-m/nln(p)ln(1-p),根据对称性法则可以很容易看出当p=1/2,也就是k=ln2·(m/n)时,g取得最小值。因此最小错误率f等于(1/2)k≈(0.6185)m/n。
计数型Bloom Filter和Bloom Filter结构的区别在于Bloom Filter为每个位置设置一个比特空间,而计数型Bloom Filter为每个位置设置一个计数器C(i),计数器的初始值为0,当增加一个元素时,C[hi(d)]=C[hi(d)]+1,(i=1,...k)
发明内容
为了解决上述超点测量方法中存在测量精度和测量资源的消耗的两个主要问题,我们利用Bloom Filter结构记录流信息和计数型Bloom Filter结构记录聚合点信息。BloomFilter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。因此我们使用Bloom Filter结构维护流存在信息,这样每个流记录只需要消耗1-3个比特的内存空间,而且Bloom Filter结构是采用多个哈希函数进行映射,大大降低不同流之间的冲突概率,提高流的检测精度。采用计数型Bloom Filter结构维护聚合点信息具有两个方面的功能,一个方面是计数型BloomFilter结构具有Bloom Filter的功能,能够维护聚合点的存在信息,另一个方面是计数型Bloom Filter实际上成为了一个超点过滤器,只有计数型Bloom Filter中一个聚合点的流数超过了一个阀值,那么这个聚合点被检测为超点,我们将记录该超点的标识信息和流数信息,这个超点的详细信息就是我们超点检测方法所需要的结果。
本发明提出一种基于Bloom Filter的高速网络流量的超点实时检测方法,可以实现超点的高速检测和超点记录缓冲空间的控制。和目前的方法相比本方法只记录被识别为超点的详细信息,而不需要记录所有流和聚合点的详细信息,因此本方法能够节省内存资源的消耗;另一个方面由于采用了Bloom Filter的数据结构,提高了流和聚合点的检测精度,降低了流之间的冲突概率,因此又能够提高流数测量精度和超点检测精度。其技术方案如下:
一种高速网络流量的超点实时检测方法,其特征是该方法基于Bloom Filter数据结构,采用Bloom Filter技术过滤新流,采用计数型Bloom Filter技术过滤超点;包括设置三个数据结构和三个过程,三个数据结构分别是一个Bloom Filter数据结构、一个计数型Bloom Filter数据结构和一个哈希链表数据结构。Bloom Filter数据结构用于记录流存在信息,计数型Bloom Filter数据结构用于记录聚合点的流数信息,哈希链表结构用于记录超点标识和超点流数信息;三个过程分别是基于Bloom Filter的新流检测过程、基于计数型Bloom Filter的超点检测过程和基于哈希链表的超点信息记录过程。
检测过程具体为:当一个报文到达测量器,首先在Bloom Filter数据结构中查找该报文是否属于一个新流,如果测量器发现该报文所属的流已经存在,则测量器停止处理该报文,继续处理下一个到达的报文;如果测量器发现新到达的报文是属于一个新流,则将该新流信息记录在这个Bloom Filter数据结构中,并转由计数型Bloom Filter超点检测过程处理;计数型Bloom Filter超点检测过程查找计数型Bloom Filter数据结构以判断该新流的聚合点是否是一个超点,如果这个该新流所对应的聚合点不是一个超点,则将该新流信息记录在计数型Bloom Filter数据结构中,停止处理该报文,继续处理下一个到达的报文;如果这个新流所对应的聚合点是一个超点,则计数型Bloom Filter结构中流数信息不做修改,并将该新流信息转由基于哈希链表的超点过程处理;如果在哈希链表结构中查找到该报文所对应的超点信息,则直接将该超点的流数信息累加,否则如果该报文对应的超点在哈希链表数据结构中没有记录,则在哈希链表数据结构中增加该超点信息,将其流数的初始值设置为超流检测阀值加1;测量时间结束后,将哈希链表中的超点信息输出。
具体技术步骤如下:
第1步:设置参数
设置Bloom Filter中需要使用的哈希函数个数为k个,分别对应的k个哈希函数为h1()、h2()、…、hk(),这k个哈希函数的输入是网络流标识,输出是一个长度为n个比特的哈希值;设置Bloom Filter比特向量大小m,其中m=2n,n是哈希函数输出哈希值的比特长度;
设置计数型Bloom Filter中需要使用的哈希函数个数为b个,分别对应的b个哈希函数为h’1()、h’2()、…、h’b(),这b个哈希函数的输入是聚合点标识,输出是一个长度为d个比特的哈希值;设置计数型Bloom Filter比特向量大小a,其中a=2d,d是计数型Bloom Filter所对应b个哈希函数输出哈希值的比特长度;设置计数型Bloom Filter向量每个位为e个比特,设置超点判断阀值为r,其中设置的阀值r需要小于2e,e为计数型Bloom Filter向量中每个位的比特数;
设置超点哈希链表结构中指针数组所使用的哈希函数为h”(),哈希函数h”()的输入为超点标识,输出为q比特长度的哈希值;设置一个指向超点结点的指针数组大小为w,其中w=2q;设置超点结点由超点标识、超点流数和指向下一个超点结点的指针等三个字段构成;
设置测量开始时间begintime和测量结束时间endtime;
第2步:设置各结构初始值
设置Bloom Filter比特向量中的所有m个位置初始值为0;
设置计数型Bloom Filter比特向量中所有a个位置的初始值为0;
设置超点哈希链表结构中指向超点结构的指针数组的所有w个位置初始值为空指针;
第3步:测量时间结束判断
如果当前时钟已经等于或大于测量结束时间endtime,则将哈希链表中的超点结点信息输出;否则,等待报文到达测量器,如果一个报文到达测量器,进入第4步;
第4步:基于Bloom Filter的新流判断
设该报文所对应的网络流标识为A,使用Bloom Filter所对应的k个哈希函数计算网络流标识A的哈希值,h1(A)、h2(A)、…、hk(A),如果这k个哈希值对应的Bloom Filter结构中的值均为1,则这个报文的流已经被记录过,回到第3步;如果这k个哈希值对应的Bloom Filter结构中的值至少有1个位置上为0,则这个报文的流是一个新流,将这k个哈希值对应的Bloom Filter结构中的值全部赋值为1,进入到第5步;
第5步:基于计数型Bloom Filter的超点判断
设该报文所对应的聚合点标识为B,使用计数型Bloom Filter所对应的b个哈希函数计算聚合点标识B的哈希值,h’1(B)、h’2(B)、…、h’k(B),查找这b个哈希值对应位置的计数型Bloom Filter结构中的最小值,如果这个最小值小于超点定义的阀值,则将这b个哈希值对应位置的计数型Bloom Filter结构中等于最小值的值累加1,回到第3步;如果这个最小值等于或大于超点定义的阀值,进入到第6步;
第6步:基于哈希链表的超点信息记录
设该报文所对应的超点标识为B,使用哈希链表所对应的哈希函数计算超点标识B的哈希值,h”(B),查找哈希值对应位置指针数组的指针,如果这个指针指向的链表中查找到该超点的结点记录,则将该超点结点记录中的流数字段值累加1,回到第3步;如果在这个指针指向链表中没有该超点的结点记录,则进入第7步;
第7步:生成新的超点结点记录
在内存中为超点结构分配一个结点空间,该结点空间中内容包括该超点标识、超点的流数和指向下一个超点的指针,设置这个超点结点的超点标识字段为超点标识,将其流数字段的初始值设置为超流检测阀值加1,设置超点结点中的指向下一个结点的指针设置为空;将该超点哈希值所对应哈希链表指针数组的超点结点链表中的最后一个结点的指针指向这个新的超点结点;回到第3步。
相关名词定义,网络中传输的报文具有一些在传输过程中不变特性的字段,如源IP、宿IP等,在测量时间范围内,具有相同字段的报文集合称为网络流,如常用的网络流按照报文字段五元组定义,即源IP、宿IP、源端口、宿端口和协议字段,将具有相同五元组字段的报文集合称为一个网络流,并将识别网络流的字段组合称为流标识,对于根据五元组字段定义的网络流,其流标识为{源IP、宿IP、源端口、宿端口和协议}。按照网络流标识中的某一个字段或者某几个字段定义的网络流集合称为聚合流,如按照源IP聚合或者按照宿IP聚合,那么其对应的字段为聚合点,如按照源IP聚合的网络流,其源IP定义为聚合点。超点是流数量超过了一个事先定义阀值的聚合点,本发明的目的就是要能够实时进行超点检测。
Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。计数型Bloom Filter是每个位置设定一个计数器的Bloom Filter,计数型Bloom Filter和Bloom Filter的区别在于Bloom Filter为每个位置设置一个比特,因此每个位置只能记录0或1两个值,而计数型Bloom Filter为每个位置设置一个计数器,每个位置能够记录多个值的信息。
哈希链表结构是一个指针数组加链表的结构,初始的时候哈希链表是一个指针数组,数组中的所有位置设为空指针,当测量器要记录一个新的超点信息时,***为该超点分配一个结点空间,该结点空间中内容包括该超点标识、超点的流数和指向下一个超点的指针,采用哈希函数映射超点标识到指针数组的一个位置,将这个位置指针指向该分配的超点结点;如果这个位置的指针已经指向其它超点结点,则将该位置指针链表的最后一个结点的指针指向新分配的超点结点;如果这个超点信息在哈希链表中已经被记录,则更新该超点中的流数信息;
与现有技术相比,本发明具有如下优点及有益效果:
(1)本方法处理报文信息依次通过新流检测、超点检测和超点记录三个过程,只有通过新流检测的报文,才能进入到超点检测过程,因此相同流的所有报文中只有第一个报文会被新流检测过程处理,因而大大降低测量器的处理流量的负担,提高测量器的处理能力。
(2)本方法对于流数没有超过阀值的聚合点标识信息和流标识信息都不记录,在整个超点检测过程中只保存超点的标识信息和流数信息,能够直接实时检测出超点信息,因而大大节省测量资源的消耗。
(3)本方法在新流检测和超点检测过程中采用了多个哈希函数进行标识映射,大大降低不同流之间的冲突概率,提高超点流数的检测精度。
具体实施方式
图1、图2、图3是现有的Bloom Filter数据结构和哈希链表数据结构示意图,图4、图5、图6是本发明相关的过程图、示意图和流程图,图7是本发明实例中各数据结构测量结束后的状态图。参看图4-7,给出一个实施例:
设一个报文流
P={(A.B)(B.A)(D.B)(B.D)(F.A)(C.B)(E.A)(C.B)(B.A)(B.E)(A.C)(B.E)(B.A)(E.B)(E.B)}
在这个集合中一个有15个元素,这里的元素就是我们对应的每个报文,每个元素包括小数点前1位字母和小数点后1位字母,小数点前一位的字母定义为报文对应的源IP标识,小数点后面的一位字母定义为报文对应的宿IP标识。
1(第1步):设置参数
设置Bloom Filter中需要使用的哈希函数个数为3个,分别对应的3个哈希函数为h1()、h2()、h3(),这3个哈希函数的输入是网络流标识,输出是一个长度为5个比特的哈希值;设置Bloom Filter比特向量大小32,其中32=25,5是哈希函数输出哈希值的比特长度;
对应实例中的10个网络流标识(A.B)(B.A)(D.B)(B.D)(F.A)(C.B)(E.A)(E.B)(B.E)(A.C),3个哈希函数h1()、h2()、h3()对应的输出分别为:
h1(A.B)=7, h2(A.B)=10,h3(A.B)=13
h1(B.A)=27,h2(B.A)=24,h3(B.A)=1
h1(D.B)=27,h2(D.B)=1, h3(D.B)=4
h1(B.D)=31,h2(B.D)=5, h3(B.D)=8
h1(F.A)=18,h2(F.A)=31,h3(F.A)=5
h1(C.B)=7, h2(C.B)=1, h3(C.B)=14
h1(E.A)=2, h2(E.A)=26,h3(E.A)=23
h1(E.B)=25,h2(E.B)=15,h3(E.B)=11
h1(B.E)=12,h2(C.A)=7, h3(C.A)=29
h1(A.C)=10,h2(A.C)=0, h3(A.C)=8
设置计数型Bloom Filter中需要使用的哈希函数个数为3个,分别对应的3个哈希函数为h’1()、h’2()、h’3(),这3个哈希函数的输入是聚合点标识,本实例中设置集合元素中的第一个字母为聚合点标识,该实例中的聚合点标识为{A B C D E F},输出是一个长度为4个比特的哈希值;设置计数型Bloom Filter比特向量大小16,其中16=24,4是计数型Bloom Filter所对应3个哈希函数输出哈希值的比特长度;设置计数型BloomFilter向量每个位为2个比特,设置超点判断阀值为2,其中设置的阀值2需要小于22,2为计数型Bloom Filter向量中每个位的比特数;
对应实例中的6个聚合点标识A B C D E F,3个哈希函数h’1()、h’2()、h’3()对应的输出分别为:
h’1(A)=1,h’2(A)=11,h’3(A)=12
h’1(B)=7,h’2(B)=13,h’3(B)=9
h’1(C)=5,h’2(C)=15,h’3(C)=3
h’1(D)=0,h’2(D)=1, h’3(D)=0
h’1(E)=3,h’2(E)=12,h’3(E)=8
h’1(F)=5,h’2(F)=2, h’3(F)=15
设置超点哈希链表结构中指针数组所使用的哈希函数为h”(),哈希函数h”()的输入为超点标识,输出为2比特长度的哈希值;设置一个指向超点结构的指针数组大小为4,其中4=22;设置超点结构由超点标识、超点流数量和指向下一个超点的指针构成;
对应实例中的6个聚合点标识A B C D E F,哈希函数h”()对应的输出分别为:
h”(A)=3 h”(B)=1 h”(C)=1 h”(D)=0
h”(E)=3 h”(F)=1
设置测量开始时间0和测量结束时间10;
进入2(第2步);
2(第2步):设置各结构初始值
设置Bloom Filter比特向量中的所有32个位置初始值为0;
设置计数型Bloom Filter比特向量中所有16个位置的初始值为0;
设置超点哈希链表结构中指向超点结构的指针数组的所有4个位置初始值为空指针;
进入3(第3步);
3(第3步):测量时间结束判断
当前时钟的时间为0,小于测量结束时间10,等待报文到达测量器,报文(A.B)到达测量器,进入4(第4步);
4(第4步):基于Bloom Filter的新流判断
报文(A.B)所对应的网络流标识为(A.B),使用Bloom Filter所对应的3个哈希函数计算网络流标识(A.B)的哈希值h1(A.B)=7,h2(A.B)=10,h3(A.B)=13,这3个哈希位置对应的Bloom Filter结构中的值均为0,这个报文的流是一个新流,将这3个哈希位置对应的Bloom Filter结构中的值全部赋值为1,进入到5(第5步);
5(第5步):基于计数型Bloom Filter的超点判断
报文(A.B)所对应的聚合点标识为A,使用计数型Bloom Filter所对应的3个哈希函数计算聚合点标识A的哈希值,h’1(A)=1,h’2(A)=11,h’3(A)=12,查找这3个哈希值对应位置的Bloom Filter结构中的最小值,所有这3个值均为最小值0,这个最小值0小于超点定义的阀值2,将这3个哈希值对应位置的计数型Bloom Filter结构中等于最小值的值累加1,回到6(第3步);
6(第3步):测量时间结束判断
当前测量器时钟等于1,小于于测量结束时间10,等待报文到达测量器,报文(B.A)到达测量器,进入7(第4步);
7(第4步):基于Bloom Filter的新流判断
报文(B.A)所对应的网络流标识为(B.A),使用Bloom Filter所对应的3个哈希函数计算网络流标识(B.A)的哈希值h1(B.A)=27,h2(B.A)=24,h3(B.A)=1,这3个哈希位置对应的Bloom Filter结构中的值均为0,这个报文的流是一个新流,将这3个哈希位置对应的Bloom Filter结构中的值全部赋值为1,进入到8(第5步);
8(第5步):基于计数型Bloom Filter的超点判断
报文(A.B)所对应的聚合点标识为B,使用计数型Bloom Filter所对应的3个哈希函数计算聚合点标识B的哈希值,h’1(B)=7,h’2(B)=13,h’3(B)=9,查找7、13、9对应位置的Bloom Filter结构中的最小值,所有这3个值均为最小值0,这个最小值0小于超点定义的阀值2,将这3个哈希值对应位置的计数型Bloom Filter结构中等于最小值的值累加1,回到9(第3步);
9(第3步):测量时间结束判断
当前测量器时钟等于2,小于于测量结束时间10,等待报文到达测量器,报文(B.A)到达测量器,进入10(第4步);
10(第4步):基于Bloom Filter的新流判断
报文(D.B)所对应的网络流标识为(D.B),使用Bloom Filter所对应的3个哈希函数计算网络流标识(D.B)的哈希值h1(D.B)=27,h2(D.B)=1,h3(D.B)=4,这3个哈希位置对应的Bloom Filter结构中的值,其中第4位置为0,这个报文的流是一个新流,将BloomFilter结构中的第4位置值赋值为1,进入到11(第5步);
11(第5步):基于计数型Bloom Filter的超点判断
报文(D.B)所对应的聚合点标识为D,使用计数型Bloom Filter所对应的3个哈希函数计算聚合点标识D的哈希值,h’1(D)=0,h’2(D)=1,h’3(D)=0,查找0、1对应位置的Bloom Filter结构中的最小值,第0个值的最小值为0,这个最小值0小于超点定义的阀值2,将这个哈希值对应位置的计数型Bloom Filter结构中等于最小值的值累加1,回到12(第3步);
12(第3步):测量时间结束判断
当前测量器时钟等于3,小于于测量结束时间10,等待报文到达测量器,报文(B.D)到达测量器,进入13(第4步);
13(第4步):基于Bloom Filter的新流判断
报文(B.D)所对应的网络流标识为(B.D),使用Bloom Filter所对应的3个哈希函数计算网络流标识(B.D)的哈希值h1(B.D)=31,h2(B.D)=5,h3(B.D)=8,这3个哈希位置对应的Bloom Filter结构中的值均为0,这个报文的流是一个新流,将这3个哈希位置对应的Bloom Filter结构中的值全部赋值为1,进入到14(第5步);
14(第5步):基于计数型Bloom Filter的超点判断
报文(B.D)所对应的聚合点标识为B,使用计数型Bloom Filter所对应的3个哈希函数计算聚合点标识D的哈希值,h’1(B)=7,h’2(B)=13,h’3(B)=9,查找7、9、13对应位置的Bloom Filter结构中的最小值,这3个值的最小值均为1,这个最小值1小于超点定义的阀值2,将这个哈希值对应位置的计数型Bloom Filter结构中等于最小值的值累加1,回到15(第3步);
15(第3步):测量时间结束判断
当前测量器时钟等于4,小于于测量结束时间10,等待报文到达测量器,报文(F.A)到达测量器,进入16(第4步);
16(第4步):基于Bloom Filter的新流判断
报文(F.A)所对应的网络流标识为(F.A),使用Bloom Filter所对应的3个哈希函数计算网络流标识(F.A)的哈希值h1(F.A)=18,h2(F.A)=31,h3(F.A)=5,Bloom Filter结构中第18位置的值为0,这个报文的流是一个新流,将这个哈希位置对应的Bloom Filter结构中的值赋值为1,进入到17(第5步);
17(第5步):基于计数型Bloom Filter的超点判断
报文(F.A)所对应的聚合点标识为F,使用计数型Bloom Filter所对应的3个哈希函数计算聚合点标识F的哈希值,h’1(F)=5,h’2(F)=2,h’3(F)=15,查找2、5、15对应位置的Bloom Filter结构中的最小值,这3个值的最小值均为0,这个最小值0小于超点定义的阀值2,将这个哈希值对应位置的计数型Bloom Filter结构中等于最小值的值累加1,回到18(第3步);
18(第3步):测量时间结束判断
当前测量器时钟等于5,小于于测量结束时间10,等待报文到达测量器,报文(C.B)到达测量器,进入19(第4步);
19(第4步):基于Bloom Filter的新流判断
报文(C.B)所对应的网络流标识为(C.B),使用Bloom Filter所对应的3个哈希函数计算网络流标识(C.B)的哈希值h1(C.B)=7,h2(C.B)=1,h3(C.B)=14,Bloom Filter结构中第14位置的值为0,这个报文的流是一个新流,将这个哈希位置对应的Bloom Filter结构中的值赋值为1,进入到20(第5步);
20(第5步):基于计数型Bloom Filter的超点判断
报文(C.B)所对应的聚合点标识为C,使用计数型Bloom Filter所对应的3个哈希函数计算聚合点标识C的哈希值,h’1(C)=5,h’2(C)=15,h’3(C)=3,查找3、5、15对应位置的Bloom Filter结构中的最小值,第3个位置的最小值为0,这个最小值0小于超点定义的阀值2,将这个哈希值对应位置的计数型Bloom Filter结构中等于最小值的值累加1,回到21(第3步);
21(第3步):测量时间结束判断
当前测量器时钟等于6,小于于测量结束时间10,等待报文到达测量器,报文(E.A)到达测量器,进入22(第4步);
22(第4步):基于Bloom Filter的新流判断
报文(E.A)所对应的网络流标识为(E.A),使用Bloom Filter所对应的3个哈希函数计算网络流标识(E.A)的哈希值h1(E.A)=2,h2(E.A)=26,h3(E.A)=23,这3个哈希位置对应的Bloom Filter结构中的值均为0,这个报文的流是一个新流,将这3个哈希位置对应的Bloom Filter结构中的值全部赋值为1,进入到23(第5步);
23(第5步):基于计数型Bloom Filter的超点判断
报文(E.A)所对应的聚合点标识为E,使用计数型Bloom Filter所对应的3个哈希函数计算聚合点标识E的哈希值,h’1(E)=3,h’2(E)=12,h’3(E)=8,查找3、8、12对应位置的Bloom Filter结构中的最小值,第8个位置的最小值为0,这个最小值0小于超点定义的阀值2,将这个哈希值对应位置的计数型Bloom Filter结构中等于最小值的值累加1,回到24(第3步);
24(第3步):测量时间结束判断
当前测量器时钟等于7,小于于测量结束时间10,等待报文到达测量器,报文(C.B)到达测量器,进入25(第4步);
25(第4步):基于Bloom Filter的新流判断
报文(C.B)所对应的网络流标识为(C.B),使用Bloom Filter所对应的3个哈希函数计算网络流标识(C.B)的哈希值h1(C.B)=7,h2(C.B)=1,h3(C.B)=14,这3个哈希位置对应的Bloom Filter结构中的值均为1,这3个哈希位置对应的Bloom Filter结构中的值均为1,则这个报文的流已经被记录过,回到26(第3步);
26(第3步):测量时间结束判断
当前测量器时钟等于8,小于于测量结束时间10,等待报文到达测量器,报文(B.A)到达测量器,进入27(第4步);
27(第4步):基于Bloom Filter的新流判断
报文(B.A)所对应的网络流标识为(B.A),使用Bloom Filter所对应的3个哈希函数计算网络流标识(B.A)的哈希值h1(B.A)=27,h2(B.A)=24,h3(B.A)=1,这3个哈希位置对应的Bloom Filter结构中的值均为1,这3个哈希位置对应的Bloom Filter结构中的值均为1,则这个报文的流已经被记录过,到28(第3步);
28(第3步):测量时间结束判断
当前测量器时钟等于9,小于于测量结束时间10,等待报文到达测量器,报文(A.C)到达测量器,进入29(第4步);
29(第4步):基于Bloom Filter的新流判断
报文(B.E)所对应的网络流标识为(B.E),使用Bloom Filter所对应的3个哈希函数计算网络流标识(B.E)的哈希值h1(B.E)=12,h2(C.A)=7,h3(C.A)=29,这第12、29哈希位置对应的Bloom Filter结构中的值为0,这个报文的流是一个新流,将第12、29个哈希位置对应的Bloom Filter结构中的值赋值为1,进入到30(第5步);
30(第5步):基于计数型Bloom Filter的超点判断
报文(B.E)所对应的聚合点标识为B,使用计数型Bloom Filter所对应的3个哈希函数计算聚合点标识B的哈希值,h’1(B)=7,h’2(B)=13,h’3(B)=9,查找7、9、13对应位置的Bloom Filter结构中的最小值,其最小值为2,这个最小值2等于大于超点定义的阀值,进入到31(第6步);
31(第6步):基于哈希链表的超点信息记录
设该报文所对应的超点标识为B,使用哈希链表所对应的哈希函数计算超点标识B的哈希值,h”(B)=1,查找哈希值对应位置指针数组的指针,在这个指针指向链表中没有该超点的结点记录,则进入32(第7步);
32(第7步):生成新的超点结点记录
在内存中为超点结构分配一个结点空间,设置这个超点结点的超点标识字段为超点标识为B,将其流数字段的初始值设置为超流检测阀值加1,流数初始值等于3,设置超点结点中的指向下一个结点的指针设置为空;将该超点哈希值所对应哈希链表指针数组的超点结点链表中的最后一个结点的指针指向这个新的超点结点;进入33(第3步)。
33(第3步):测量时间结束判断
当前时钟为10,已经等于测量结束时间10,则将哈希链表中的超点信息输出;输出的信息为:
超点B,超点B的流数为3。
本发明实例测量时间结束后,三个数据结构的状态见图7。