专利名称::一种随机抽样方法和装置的制作方法
技术领域:
:本发明涉及网络通信
技术领域:
,特别是涉及一种随机抽样方法和装置。
背景技术:
:随着互联网的高速发展和网络规模的不断扩大,不仅网上的应用也越来越复杂,而且网络上的各种攻击也越来越多(如病毒,蠕虫等),因此网络设备都需要具备监控网络流量分布情况的能。目前现有技术中的网络设备都能够提供数据包的统计功能,但这个统计功能只能了解通过该网络设备大致的流量,不能详细的了解网络流量分布情况,如在通过该网络设备的流量中来自哪个源IP地址的流量最多,然而这正是对确定网络攻击源所必须的。为了实现这个目标,出现很多基于流统计的技术,这些技术一般都能够统计一个数据流的时间段内的数据包和字节数的统计情况,数据流一般情况下也会包含IP的五元组信息(源IP、源端口、协议类型、目的IP及目的端口构成一个IP五元组)和4妄口信息。但是如果对于数据流所有的数据包都要进行抽样的话,就会消耗大量的CPU资源,同时由于统计的带宽流量限制,也无法对更多的流进^f亍统计。因此为了降低CPU的使用负担,也为了统,i十更大范围的流量分布情况,一般会对数据流采取抽样技术,这样即能有效降低统计的数据流量,'又能准确的了解数据的流量分布情况。现有的抽样技术包括随机抽样和固定抽样两种,固定抽样就是抽样的间隔是固定的,随机抽样就是按一定的间隔随机进行抽样。通常的随机抽样方式就是,设置一个随机数范围为抽样周期的随机源,当随机源为某个值时,就抽取该数据包。如图1所示,为现有技术进行4比1的随机抽样示意图,在每四个数据包选择一个数据包进行抽样。在实现本发明实施例过程中,发明人发现现有技术中至少存在如下问题:现有技术中的随机源提供比较困难,如果随机性不好的话会出现抽样的间隔;f艮不均匀,有时可能会出现一个抽样周朝内出现多次抽样,有时一个抽样周期内一个抽样都没有。因此,如何提供一种高效、可靠的抽样技术,成为业界急需解决的一个问题。
发明内容本发明实施例要解决的问题是提供一种随机抽样方法和装置,以解决现有技术中随机源随机性不好,抽样河:隔不均匀的技术缺陷。为达到上述目的,本发明实施例一方面提出一种随机抽样方法,包括以下步骤网络设备接收数据包,并读取抽样计数器;所述网络设备计算所述抽样计数器的值与抽样周期的商N;所述网络设备根据所述商N决定是否对所述4妄收的数据包进行抽样。其中,所述网络设备根据所迷商N决定是否对接收的数据包进行抽样具体包括所述网络设备根据所述商N在抽样周期的数值范围内通过伪随机函数产生抽样值S,所述抽样值S为需要进行抽样的数据包在所述抽样周期内的序号;所述网络设备根据所述抽样值S及接收数据包在所述抽样周期的序号决定是否对所述接收的数据包进行抽样。其中,所述网络设备根据所述抽样值S及接收数据包在所述抽样周期的序号决定是否对所述接收的数据包进行抽样具体为计算所述抽样计数器的值与所述抽样周期的余数M;所述网络设备在所述抽样值S和所述余数M相等时,决定对接收的数据包进行抽样。其中,在所述网络设备读取抽样计数器时,还包括所述抽样计数器自动力口1。其中,所述抽样计数器为读加计数器。其中,所述抽样计数器的比特位长JL位大于等于抽样周期比特位长的2倍。本发明实施例还提供了一种网络设备,包括数据包接收模块、抽样计数器读取模块、商计算模块和抽样模块,所述数据包接收模块,用于接收数据包;所述抽样计数器读取模块,用于在所述数据包接收模块接收到数据包后读取抽样计数器的值,在读取所述抽样计数器时,所述抽样计数器自动加l;所述商计算模块,用于计算所述抽样计数器的值与抽样周期的商N;所述抽样模块,用于根据所述商计算模块计算的商N决定是否对接收的数据包进行抽样。其中,所述抽样模块包括抽样值生成子模块、余数计算子模块和判断子模块,所述抽样值生成子模块,用于根砵所述商计算模块得到的商N在抽样周期的数值范围内通过伪随机函数产生抽样值S;所述余数计算子模块,用于计算所述抽样计数器的值与所述抽样周期的余数M;所述判断子模块,用于在所述抽样值S和所述余数M相等时,?央定对接收的数据包进行抽样。其中,还包括抽样计数器,所述抽样计数器为读加计数器。其中,所述抽样计数器的比特位长度位大于等于抽样周期比特位长的2倍。本发明实施例的技术方案具有以下优点,本发明实施例提供一种高效、可靠的抽样技术,由于一个抽样周期内商N都会变化一次,因此每个抽样周期内由商N决定进行的抽样数据包都是不相同的,能够对数捧流均匀抽样,且实现筒单。图1为现有技术进行4比1的随机抽样示意图;图2为本发明实施例一的随机抽样:方法流程图;图3为本发明实施例二的网络设备结构图。具体实施例方式下面结合附图和实施例,对本发明^j具体实施方式作进一步详细描述如图2所示,为本发明实施例一的随机抽样方法流程图,包括以下步骤.步骤S201,网络设备接收数据包,并读取抽样计数器。其中抽样技术器优选为读加计数器,读加计数器在读取的过程中自动会加1(这个过程称为读加),且这个过程是不会被其它的引擎和任务打断。一般NP(网络处理器)或其它的用于数据包高速处理多核GPU或ASIC(ApplicationSpecificIntegratedCircuits,专用集成电路)硬件,都具有自动读加计数器的功能。本发明实施例通过读加计数器的这个功能,能够避免多处理器并行处理时对数据包进行的加锁处理。对所述加锁处理简单介绍如下在高端的路由器和交换机中,为了提高数据包的处理能力,一般采用多引擎的NP或CPU或硬件芯片来完成,需要采取多个包同'时并行处理才能达到高性能。抽样计数器内保存有抽样值,每个抽样周期^更新一次所述抽样值。具体为在接收到数据包后判断是否达到抽样周瑚,如果未达到抽样周期则以保存的抽样值进行抽样;如果达到抽样周期则抽样计数器需要去读取随机值从而更新其保存的抽样值,以新的抽样值爲到来的抽样周期内进行抽样。但是由于多个数据包可能会同时到达,同时读取抽样计数器,只要有一个包发现达到抽样周期,抽样计数器就会去读取随机值,更新抽样值;然而抽样计数器读取随机值需要花费多个指令周期,在抽样计数器读取随机值的时间内其它处理器一直在按照旧的抽样值在进行抽样,从而造成抽样不均匀,因此为了解决上述问题,需要在抽样计数器读取随机值的时间段内对接收的数据进行加锁处理,保证在该期间备处理引擎不能并行处理。但是这种加锁处理的方式对设备性能影响很大,导致转发性能急剧下降。然而本发明实施例通过读加计数器自,身产生随机值,避免读取随机值的间隔时间,从而无需进行加锁处理。i当然本发明实施例提出的读加计数器为优选方式,任何在读取时能够自动加1的计数器均可用于实现本发明,因此上述计数器也应为本发明实施例保护范围所涵盖。步骤S202,网络设备计算抽样计数器的值与抽样周期的商N。如果抽样周期是为2的n次方,那么将抽样计数器的值右移n位就能得到商N。因此本发明实施例对于抽样周期为2的n次方,那么本发明实施例即可通过简单的逻辑运算就能够实现抽样判断。通过本发明实施例计算的商N能够作为随机种子,生成相应的抽样值,并且对于每个抽样周期来说得到的商N都不同,因此对于每个抽样周期进行抽样判断的抽样值也会不同,从而实现均匀抽样。步骤S203,网络设备根据商N在抽样周期的数值范围内通过伪随机函数产生抽样值S,伪随机函数要求同一输入,得到唯一输出,——对应。抽样值S为需要进行抽样的数据包在所述抽样周期内的序号,例如采样周期为8,而抽样值为5,就说明需要对该抽样周期内的第5个数据包进行抽样。所述伪随机函数,根据输入的商N的不同会生成不同的抽样值S,其中该抽样值S为抽样周期的数值范围内的一个数,如进行8比1的随机抽样,抽样周期为8,则抽样值就是介于0-7之间的一个数;如可设定商N为0时,抽样值为3;如可设定商N为1时,抽样值为5;如可设定商N为3时,抽样值为1等。这样生成的抽样值实际就为需要进行抽,羊的数据包在所述抽样周期内的序号。并且本发明实施例对于伪随机算法的精度没有做出要求或规定,且伪随机算法的好坏对抽样结果影响不大,如C语言的标准库中就提供了伪随机函数,伪随机算法也很多。。步骤S204,网络设备根据抽样值S及接收数据包在所述抽样周期的序号决定是否对所述接收的数据包进行抽样。本发明实施例提出了一种确定接收到的数据包实际序号的方法,即计算所述抽样计数器的值与所述抽样周期的余数M,通过所述余数M确定序号。如果是按2几次方为抽样周期,则将抽样计数器值与2的几次方-1的值相与就能得到余数M。如抽样计数器的值为20,抽样周期为8,则余数M为4,说明当前接收到的数据包是该抽样周期内的第四个数据包。因此在抽样值S和余数M相等时,就可决定对接收的数据包进行抽样。为了便于理解本发明实施例,下面以进行8比1的随机抽样,以0为抽样点,抽样计数器的比特位长度位为抽样周期比特位长的2倍(16位)。设置商N与经过伪随机算法生成的抽样值为下表所示<table>tableseeoriginaldocumentpage8</column></row><table><table>tableseeoriginaldocumentpage9</column></row><table>数据包1:这样当第1个数据包到来的时候,抽样计数器进行读加操作,读取抽样计数器的当前值为0,抽样计数器同时加1得到1;将0(0000000000000000)与7(00000111)相与得到余数还是0,其中计算余数可采用0000000000000000与00000110相与的方式;然后计算当前计数器值与抽样周期的商,本实施例中抽样周期为8,因此将计数器值0000000000000000右移3位即得到商值,该商值为0。才艮据上表商0对应抽样值为3,此时抽样值3与余数0不相等,因此不抽样。数据包2:当第2个数据包到来的肘候,抽样计数器进行读加操作,读取到的抽样计数器的当前值为1(OOpOOOOOOOOOOOOl),计数器同时加l为2;将1与7(00000111)相与得到余数是1;然后计算当前计数器值与抽样周期的商,通过将所述读取到的抽样计数器值右移3位得到商为0,根据上表商为0时对应的抽样值为3,与余数1不相等,因此不对该数据包2抽样。数据包4:当第4个数据包到来的时候,抽样计数器进行读加操作,读取到的抽样计数器的当前值为3(0000000000000011),计数器同时加1为4;将3(00000011)与7(00000111)相与得到余数是3;然后计算该数据包对应的商,可以将当前计数器值右移3位得到商为0,对商0进行随机运算得到抽样值还为3,与余数3相等,因此抽取该数据包。数据包8:当第8个数据包到来的时候,抽样计数器进行读加操作,读取到的抽样计数器的当前值为7(0000000000000111),计凄t器同时加1为8;将7与7相与得到余数是7;然后计算该数据包对应的商,将当前计数器值右移3位,得到商为0,根据上表对商0进行随机运算得到抽样值为3,与余数7不相等,因此不抽样。从上述抽样周期(数据包1-数据包8)可以看出根据计算的商只对数据包4进行抽样。数据包9:当第9个数据包到来的时候,抽样计数器进行读加操作,读取到的抽样计数器的当前值为8,计熬器同时加1为9;将抽样计数器的当前值8与7相与得到余数是0;然后计算该对应的商,将当前计数器值右移3位,得到商为1,根据上表对商!进行随机运算得到抽样值为1,与余数0不相等,因此不抽取该数据包。数据包10:当第IO个数据包到来的时候,抽样计数器进行读加操作,读取到的抽样计数器的当前值为9,计数器同时加1为10;将抽样计数器的当前值9(0000000000001001)与7(00000111)相与得到余数是1;然后计算该对应的商,将当前计数器值右移3位,得到商为1,根据上表对商1进行随机运算得到抽样值为1,与余数l相等,因此抽取该数据包。数据包16:当第16个数据包到来的时候,抽样计数器进行读加操作,读取到的抽样计数器的当前值为15,计数器同时加1为16;将抽样计数器的当前值15与7相与得到余数为7;然后计算该对应的商,将当前计数器值右移3位,得到商为2,根据上表对商2进行随机运算得到抽样值为7,与余数7相等,因此抽取该数据包。因此从上述看出对于第一个抽样周期抽取的数据包为数据包4;对于第二个抽样周期抽取的数据包为数据包10;对于第三个抽样周期抽取的数据包为数据包16(以.三个周期为例),因此可以看出本发明实施例对于每个不同的抽样周期都会对不同的数据包进行抽样,因此能够对数据流进行均匀抽样。如图3所示,为本发明实施例二的网络设备结构图,网络设备l包括数据包接收模块ll、抽样计数器读取片莫块12、商计算模块13和抽样模块14,数据包接收模块11用于接收数据包;抽样计数器读取才莫块12用于在数据包接收模块11接收到数据包后读取抽样计数器的值,在读取所述抽样计数器时,所述抽样计数器自动加1;商计算模块1:3用于计算所述抽样计数器的值与抽样周期的商N;抽样模块14用于根据商计算模块13计算的商N决定是否对接收的数据包进行抽样。其中,抽样模块14包括抽样值生成子模块141、余数计算子模块142和判断子模块143,抽样值生成子模块141用于根据商计算模块13得到的商N在抽样周期的数值范围内通过伪随机函教产生抽样值s;余数计算子模块142用于计算抽样计数器的值与所述抽样周期的余数M;判断子模块143用于在所述抽样值S和所述余数M相等时,决定对接收的数据包进行抽样。其中,还包括抽样计数器15,抽样计数器15优选为读加计数器。其中,抽样计数器的比特位长度位大于等于抽样周期比特位长的2倍。本发明实施例提供一种高效、可靠的抽样技术,由于一个抽样周期内商N都会变化一次,因此每个抽样周期内由裔N决定进行的抽样数据包都是不相同的,能够对数据流均勻抽样,且实现简单。通过本发明实施例还能够避免加锁操:作。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用石更件平台的方式来实现,当然也可以通过石更件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。以上所述仅是本发明的优选实施方式,应当指出,对于本
技术领域:
的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。权利要求1、一种随机抽样方法,其特征在于,包括以下步骤网络设备接收数据包,并读取抽样计数器;所述网络设备计算所述抽样计数器的值与抽样周期的商N;所述网络设备根据所述商N决定是否对所述接收的数据包进行抽样。2、如权利要求1所述随机抽样方法,其特征在于,所述网络设备根据所述商N决定是否对接收的数据包进行抽样具体包括所述网络设备根据所述商N在抽样周期的数值范围内通过伪随机函数产生抽样值S,所述抽样值S为需要进行抽样的数据包在所述抽样周期内的序号;所述网络设备才艮据所述抽样值S及接收数据包在所述抽样周期的序号决定是否对所述接收的数据包进行抽样。3、如权利要求1或2所述随机抽样方法,其特征在于,所述网络设备根据所述抽样值S及接收数据包在所述抽样周期的序号决定是否对所述接收的数据包进行抽样具体为计算所述抽样计数器的值与所述抽样周期的余数M;所述网络设备在所述抽样值S和所述余数M相等时,决定对接收的数据包进行抽样。4、如权利要求1或2所述随机抽样方法,其特征在于,在所迷网络设备读取抽样计数器时,还包括所述抽样计数器为读加计数器。5、如权利要求4所述随机抽样方法,其特征在于,每接收一个数据包,所述抽样计数器自动加1。6、如权利要求1或2所述随机抽样方法,其特征在于,所述抽样计数器的比特位长度位大于等于抽样周郑比特伴长的2倍。7、一种网络设备,其特征在于,包括数据包接收模块、抽样计数器读取模块、商计算模块和抽样模块,所述数据包接收模块,用于接收数捧包;所述抽样计数器读取模块,用于在所述数据包接收模块接收到数据包后读取抽样计数器的值,在读取所迷抽样计数器时,所述抽样计数器自动加l;所述商计算模块,用于计算所述抽样计数器的值与抽样周期的商N;所述抽样模块,用于根据所述商计算模块计算的商N决定是否对接收的数据包进行抽样。8、如权利要求7所述网络设备,其特征在于,所述抽样模块包括抽样值生成子模块、余数计算子模块和判断子權块,所述抽样值生成子模块,用于根据所述商计算模块得到的商N在抽样周期的数值范围内通过伪随机函数产生抽样值S;所述余数计算子模块,用于计算所迷抽样计数器的值与所述抽样周期的余数M;所述判断子模块,用于在所述抽样值S和所述余数M相等时,决定对接收的lt据包进行抽样。9、如权利要求7所述网络设备,其特征在于,还包括抽样计数器,所述抽样计数器为读加计数器。10、如权利要求7所迷网络设备,其特征在于,所述抽样计数器的比特位长度位大于等于抽样周期比特位长的2倍。全文摘要本发明公开了一种随机抽样方法,包括以下步骤网络设备接收数据包,并读取抽样计数器;所述网络设备计算所述抽样计数器的值与抽样周期的商N;所述网络设备根据所述商N决定是否对所述接收的数据包进行抽样。本发明实施例提供一种高效、可靠的抽样技术,由于一个抽样周期内商N都会变化一次,因此每个抽样周期内由商N决定进行的抽样数据包都是不相同的,能够对数据流均匀抽样,且实现简单。文档编号H04L12/56GK101159673SQ20071016606公开日2008年4月9日申请日期2007年11月1日优先权日2007年11月1日发明者卢胜文申请人:杭州华三通信技术有限公司