一种报文处理方法和装置的制造方法
【技术领域】
[0001]本发明涉及报文处理领域,尤其涉及一种报文处理方法和装置。
【背景技术】
[0002]拒绝服务攻击(Dos,Denial of Service)是指利用各种服务请求耗尽被攻击网络的系统资源,从而使被攻击网络无法处理合法用户的请求。然而随着僵尸网络的兴起,使得分布式拒绝服务攻击(DDos,Distributed of Service)得快快速壮大和日益泛滥。分布式拒绝服务攻击是指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DoS攻击。DDos的攻击方法简单、影响较大、难以追查,形成了规模巨大的攻击和网络流量,对被攻击网络造成了极大的危害。
[0003]随着DDos攻击技术的不断提高和发展,各运营商面临的安全和运营挑战也不断增多,运营商必须在DDos威胁影响关键业务和应用之前,接收流量报文并且进行分析,判断是否发生攻击,把攻击流量清洗掉,确保网络正常稳定的运行以及业务的正常开展。其核心是对流量报文进行分析处理。
[0004]现在的攻击流量往往高达Gbps甚至数十Gbps,高效的报文分析处理,是一切分析处理工作的基础。目前的高速网络流量分析模块都安装在专用于网络处理器架构下,这种架构价格昂贵,不易扩展。或者高速网络流量分析模块使用86架构处理器,86架构是现在通用的架构,却很容易因为处理不当,而导致处理性能急剧下降,高速网络流量分析模块通常选择丢弃一部分性能使用X86架构处理器。
【发明内容】
[0005]有鉴于此,本发明实施例提供一种报文处理方法和装置,以优化现有大流量报文的处理方案。
[0006]第一方面,本发明实施例提供了一种报文处理方法,包括:
[0007]在主线程中将接收的报文顺序拷贝到数组中;
[0008]在报文分流线程中提取所述数组中所述报文的源地址和目标地址;
[0009]将所述源地址与所述目标地址按照预设算法进行计算;
[0010]将所述报文按照所述计算结果发送给相应的工作线程。
[0011]第二方面,本发明实施例还提供了一种报文处理装置,包括:
[0012]报文接收模块,用于在主线程中将接收的报文顺序拷贝到数组中;
[0013]地址提取模块,用于在报文分流线程中提取所述数组中所述报文的源地址和目标地址;
[0014]地址计算模块,用于将所述源地址与所述目的地址按照预设算法进行计算;
[0015]报文分配模块,用于将所述报文按照所述计算结果发送给相应的工作线程。
[0016]本发明实施例提供的一种报文处理方法和装置,该方法通过在主线程将接收的报文顺序拷贝到数组中,在报文分流线程中提取该报文的源地址和目标地址,并将源地址和目标地址按照预设算法进行计算,根据计算结果将该报文发送到相应的工作线程。通过采用上述报文处理方法,可以充分利用多个CPU核心,减少线程之间的相互影响,并且能提高缓存的命中率,提高了报文分析处理效率。
【附图说明】
[0017]通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
[0018]图1为本发明实施例一提供的一种报文处理方法流程图;
[0019]图2为本发明实施例二提供的一种报文处理方法流程图;
[0020]图3为本发明实施例三提供的一种报文处理装置的结构框图。
【具体实施方式】
[0021]下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。
[0022]实施例一
[0023]图1是本发明实施例一提供的一种报文处理方法的流程图,该方法可以由任意执行报文处理的装置来执行,该装置可以通过软件和/或硬件来实现。如图1所示,该方法包括:
[0024]S110、在主线程中将接收的报文顺序拷贝到数组中。
[0025]在本实施例中,所述报文可以为IP报文、TCP报文或UDP报文等报文。
[0026]示例性的,在主线程接收报文前,可以先创建一个二维数组,当主线程接收到报文时,将接收到的报文拷贝到这个二维数组中。优选的,接收的报文可以按接收的顺序拷贝到这个二维数组中。优选的,可以将接收的报文的头部按顺序拷贝到二维数组中。例如,创建二维数组G_PKG[MAX*N] [Μ],N为创建的工作线程数,MAX为一个具体数值,M为最大拷贝的字节数,其中Ν,ΜΑΧ,Μ都可以根据具体的实际情况设定。进一步的,假设MAX可以为40,N可以为10,M可以为60字节。创建的主线程可以命名为HANDLE线程,当HANDLE线程接收到一个报文时,这里接收的报文可以命名为PKG报文,将PKG报文的报文头拷贝到二维数组G_PKG中,由于现有报文的报文头部的字节都小于60字节,因此M设置为60字节可以满足本实施例。
[0027]S120、在报文分流线程中提取所述数组中所述报文的源地址和目标地址。
[0028]示例性的,当报文分流线程检查到二维数组中有新的报文时,就会提取报文的源地址和目标地址。例如,将报文分流线程可以命名为SPLIT线程,当SPLIT线程检查到G_PKG中有新的报文时,就在二维数组中取出该报文的源IP地址SIP和目标IP地址DIP。
[0029]S130、将所述源地址与所述目标地址按照预设算法进行计算。
[0030]示例性的,当报文分流线程提取出报文的源地址和目标地址后,将源地址和目标地址按照预先设定的算法进行运算得出一个数值。例如,预先设定的算法可以为(SIP'DIP) % N,当SPLIT线程提取SIP和DIP后,按照此算法算出一个数值,此值可以为命名为KEY。
[0031]S140、将所述报文按照所述计算结果发送给相应的工作线程。
[0032]示例性的,在将所述报文的源地址与目标地址进行计算后,报文分流线程根据计算的值,将该报文发送给相应的工作线程。例如,将SIP和DIP按照(SIP~DIP) % N的算法得出的KEY值为M,且M〈N,报文分流线程就将报文PKG发送给对应的工作线程M。
[0033]S150、当所述工作线程接收到所述报文后,对所述报文进行分析统计。
[0034]示例性的,当工作线程接收到由报文分流线程发送的报文时,取出该报文,并对该报文进行分析统计,工作线程具体的分析方法可以按照实际情况来自由设定。优选的,可以取出各类报文的头部进行分析。例如,当工作线程接收的报文为IP报文时,则对IP HEADER进行分析统计,又如,当工作线程接收的报文为TCP报文时,则对TCP HEADER进行分析统计,或者,当工作线程接收的报文为UDP报文时,则对UDP HEADER进行分析统计。
[0035]本发明实施例一提供的报文处理方法,先建立一个二维数值,主线程接收到报文时,将接收的报文顺序拷贝到二维数组中,报文分流线程检查到二维数组中有报文时,就提取报文的源地址和目标地址,并将源地址和目标地址按照预设的算法进行进算,并按照计算结果将报文发送给相应的工作线程,工作线程接收到报文后,可以对报文进行分析统计。当到达的报文很多时,主线程只负责拷贝报文,可以增大报文的缓存命中率,使用报文分流线程减少工作线程对报文的查找,工作线程只需要分析接收到的报文,这样可以加快报文处理的过程,提高工作线程的工作效率。
[0036]实施例二
[0037]图2为本发明实施例提供的一种报文处理方法的流程图,在上述实施例基础之上作进一步的优化。
[0038]进一步的,在主线程中将接收的报文顺序拷贝到数组之前,先创建主线程,报文分流线程以及不小于两个的工作线程,并将这些线程分别绑定至不同的CPU,该流程具体包括:
[0039]S2