一种流量统计并实时排名的方法
【技术领域】
[0001]本发明本发明涉及通信技术领域,尤其涉及一种流量统计并实时排名的方法。
【背景技术】
[0002]随着计算机和互联网技术的快速发展与广泛应用,计算机网络的系统安全受到计算机病毒和黑客攻击等多方面的威胁越来越大,经常会导致网络异常,为了确保网络正常稳定的运行以及业务的正常开展,运营商必须对流量进行检测并加以清洗。
[0003]在互联网服务提供商(Internet Service Provider, ISP)、互联网数据中心(Internet Data Center, IDC)等运营商的大流量网络环境下,要快速准确地判断当前网络状态,IP统计正是最核心的技术之一。把平均每秒流量等数值排在前几名的IP地址(以下简称IP)统计出来,可以实时准确地判断当前最可能被攻击的IP。但是,在大流量环境下IP的数量通常能够达到数十万,目前在大流量下对IP进行实时TOP排名的方法,需要在每次排名时对全部数据进行操作,这样不仅会占用过多的中央处理器(Central ProcessingUnit,CPU)资源,而且也达不到实时的效果,因此排名效率不理想。
【发明内容】
[0004]有鉴于此,本发明实施例提供一种流量统计并实时排名的方法,以解决在大流量下对IP地址进行实时排名时操作步骤繁琐,消耗资源多及排名效率低等问题。
[0005]发明实施例提供了一种流量统计并实时排名的方法,包括:
[0006]接收报文;
[0007]统计当前报文数量,存储至IP哈希数组中;
[0008]根据当前报文数量与预设历史时段前的历史报文数量之间的差值,计算出所述报文当前的单位时间数量;
[0009]根据所述报文当前的单位时间数量,将当前的单位时间数量排名前N位的报文的IP信息实时存储至排序数组中,其中,N为自然数,排序数组中的存储单元以最小二根堆的形式排列。
[0010]本发明实施例提供的一种流量统计并实时排名的方法,该方法通过IP哈希数组和最小二根堆算法对大流量下的IP地址进行统计和排名,不需要每次都使用全部数据进行一次重新排名就可以使排名数组中的数值始终为当前时刻全部数据里排名前N的数据,不仅减少了排名的操作步骤,降低了 CPU的消耗,而且真正实现了实时性的排名,提高了实时排名的效率。
【附图说明】
[0011]通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
[0012]图1是本发明实施例一提供的一种流量统计并实时排名的方法的流程图;
[0013]图2是本发明实施例二提供的一种流量统计并实时排名的方法的流程图;
[0014]图3是本发明实施例三提供的一种流量统计并实时排名的方法的流程图。
【具体实施方式】
[0015]下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。
[0016]实施例一
[0017]图1是本发明实施例一提供的一种流量统计并实时排名的方法的流程图,该方法能够实现对大流量下IP地址的统计和实时排名,可由服务器或终端来执行。
[0018]如图1所示,该方法包括:
[0019]S110、接收报文;
[0020]报文即网络中交换与传输的数据单元,其中包含了要发送的完整的数据信息,包括报文类型,版本,长度,对应的IP地址等等。系统在运行过程中CPU会不断地接收到各种不同类型的报文,如,传输控制协议/网络之间互连的协议建立连接时使用的握手信号报文(synchronous,syn),控制报文(internet control message protocol, icmp)等。所述接收报文即接收所有报文所包含的所有信息,从所接收的报文中可以任意提取所需要的信息,例如报文数量,流量值,IP地址等。
[0021]S120、统计当前报文数量,存储至IP哈希数组中;
[0022]所述当前报文数量为当前报文总数量,所述IP哈希数组即用于统计所有IP地址所对应的报文信息的哈希数组。
[0023]示例性的,建立一个全局的IP哈希数组用来统计IP信息,所述IP哈希数组可以包含不同的变量来对IP信息进行统计,优选的,本实施例中IP哈希数组中包含的变量包括报文数量,IP地址,流量值,排名标记等。
[0024]S130、根据当前报文数量与预设历史时段前的历史报文数量之间的差值,计算出所述报文当前的单位时间数量;
[0025]所述预设时段是根据需要预先设置的某一时间长度,是系统自动统计各类报文数量的最小周期,即每间隔此时间长度,系统会自动统计各类报文的数量。此时间长度的设置可以是任意的,如I秒,2秒,I分钟等等,但是设置的时间长度要与实际检测的需求相适应,设置的太长,无法实现实时排名,设置的太短会对系统带来过大的负荷,没有实际价值。优选的,所述预设历史时段的时间长度为I秒。所述当前报文数量与预设历史时段前的历史报文数量之间的差值为当前报文数量与I秒前的历史报文数量之间的差值,即为所述报文当前的每秒数量。通过计算所述报文每秒的数量,既不会对系统带来太大的负荷,又可以实时对报文数量进行统计排名,不但降低了 CPU的消耗,而且真正实现了实时性的排名,提高了实时排名的效率。
[0026]S140、根据所述报文当前的单位时间数量,将当前的单位时间数量排名前N位的报文的IP信息实时存储至排序数组中,其中,N为自然数,排序数组中的存储单元以最小二根堆的形式排列。
[0027]IP信息包含IP地址及其对应的报文数量(或流量值);排序数组(TOP数组)为基于最小二根堆算法,保持最小二根堆特性的数组,用于存储当前的单位时间数量排名前N位的报文的IP信息,其中,N为自然数,可以根据实际需要进行设定,例如,N可以取10,20,25等等。最小二根堆是一种二叉树,最小二根堆特性即对于每个非叶子节点的数值,一定不大于孩子节点的数值。
[0028]示例性的,建立一个全局的长度为N+1的TOP数组用来保存当前的单位时间数量排名前N位的报文的IP信息(Τ0Ρ[0]元素不使用),此TOP数组为一个最小二根堆,假设TOP[i]为非叶子节点,则其左孩子为T0P[i*2],其右孩子为T0P[i*2+l],其中i为TOP数组中的节点位置变量,i的取值在实时排名过程中是根据实际需要在不断地变化的,但是始终保持TOP数组中每个非叶子节点的数值一定不大于孩子节点的数值的特性。在首次使用TOP数组前,需要初始化TOP数组,即TOP [O] = 0,此时TOP数组中全部元素的值均置为0,因此,TOP [O]元素不使用。
[0029]具体的,在所述根据所述报文当前的单位时间数量,将当前的单位时间数量排名前N位的报文的IP信息存储至排序数组中之前,还包括:
[0030]创建第一函数和第二函数,其中,
[0031]第一函数,用于当排序数组中任一节点位置的当前数值比原数值小时,调用第一函数使当前数值所在的节点位置进行上移,直至保持排序数组的最小二根堆特性;
[0032]第二函数,用于当排序数组中任一节点位置的当前数值比原数值大时,调用第二函数使当前数值所在的节点位置进行下移,直至保持排序数组的最小二根堆特性。
[0033]创建第一函数和第二函数是为了确保TOP数组中的数据能够得到实时更新并始终保持最小二根堆特性。优选的,第一函数为top_up (j),第二函数top_down (j),这两个函数的作用是假设当前TOP数组已具备最小二根堆特性,若更新了节点位置j的值,假设新值比原来的值小,那么可能这个节点的新值可能会比其父节点的值小,所以需要进行不断上移操作直到TOP数组重新满足最小二根堆特性,这些操作由top_up(j)来完成;而top_down(j)的操作与top_up(j)恰好相反,即假设新值比原来的值大,则需要进行不断下移操作直到TOP数组重新满足最小二根堆特性。通过调用top_up(j)和top_down(j)函数,可以实时确保TOP数组中的数据始终为当前全部数据中排名前N的数据,且不需要每次都使用全部数据进行一次重新排名,减少了排名的操作步骤,提高了实时排名的效率。
[0034]在本技术方案中,通过IP哈希数组和最小二根堆算法对大流量下的IP地址进行统计和排名,不需要每次都使用全部数据进行一次重新排名就可以使排名数组中的数值始终为当前时刻全部数据里排名前N的数据,不仅减少了排名的操作步骤,降低了 CPU的消耗,而且真正实现了实时性的排名,提高了实时排名的效率。
[0035]实施例二
[0036]图2为本发明实施例二提供的一种流量统计并实时排名的方法的流程图,本实施例在实施例一的基础之上,对步骤“统计当前报文数量,存储至IP哈希数组中”做了进一步细化。
[0037]如图2所示,该方法具体包括:
[0038]S210、第一线程接收报文并从中获取IP地址;
[0039]创建第一线程,用于遍历IP哈希数组,从所接收的报文信息中提取IP地址并在所述哈希数组中进行查找和统计。所述接收报文并从中获取IP地址指从所接收到的所有报文中获取所有的IP地址。
[0040]S220、第一线程基于所述IP地址遍历IP哈希数组进行查找;
[0041]遍历IP哈希数组,查找出与所获取的IP地址相同的哈希位置及存储的数值。
[0042]S230、第一线程在查找到的所述IP地址对应的哈希位置上加1,统计出当前报文数量。
[0043]每当接收一个报文,从中获取IP地址并在IP哈希数组中对应的哈希位置上加1,依次类推,统计出IP哈希数组中每个IP地址所对应的当前报文的总数量。
[0044]在本技术方案中,创建第一线程用于在流入流出的所有报文中获取IP地址并在IP哈希数组中进行查找和统计报文总数量,可以实现对每个IP地址的流量值进行实时统计,以便于对IP地址的流量进行监测和实时排名等。