CN104821924B - 一种网络数据包处理方法、装置和网络处理设备 - Google Patents
一种网络数据包处理方法、装置和网络处理设备 Download PDFInfo
- Publication number
- CN104821924B CN104821924B CN201410044200.7A CN201410044200A CN104821924B CN 104821924 B CN104821924 B CN 104821924B CN 201410044200 A CN201410044200 A CN 201410044200A CN 104821924 B CN104821924 B CN 104821924B
- Authority
- CN
- China
- Prior art keywords
- data packet
- packet
- data
- queue ring
- network
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Abstract
本发明实施方式公开了一种网络数据包处理方法、装置和网络处理设备。方法包括:经由网络接收数据包,并将接收的数据包存储到预定缓存空间;并行处理预定缓存空间中的数据包。本发明实施方式提出一种基于共享缓存空间的多进程数据包处理方式,数据包接收工作和包处理工作分离,各个处理进程并行处理数据包,可以充分发挥多核CPU优势,降低资源浪费。
Description
技术领域
本发明涉及信息处理技术领域,特别是涉及一种网络数据包处理方法、装置和网络处理设备。
背景技术
随着硬件技术的发展,目前多核CPU的使用已经非常普遍,尤其是在网络处理服务器方面。但是,如果没有良好的软件架构设计,系统总的CPU使用率只能维持在较低的水平,这就存在较大资源浪费。为了处理高速网络流量(比如1Gbps、10Gbps,甚至更高),对当前软件架构进行改进可以充分发挥多核CPU的优势。
为提高整个系统的CPU使用效率,常见有两种方法:多线程和多进程。多线程方式可以较好发挥多核CPU的性能,但是为了避免线程间竞争,需要使到线程锁,而线程锁的开销可能会占到CPU总开销的30%,这是一个不小的资源浪费,而且多线程实现方式对于代码编写还提出了更高要求。在多进程处理方式中,多个进程都需要从网卡收包,而包捕获是一项消耗CPU资源的工作,这对CPU资源造成了极大浪费,甚至会因此造成丢包。
发明内容
本发明实施方式提出一种网络数据包处理方法和处理装置,以降低CPU资源浪费。
本发明实施方式还提出一种网络处理设备,以降低CPU资源浪费。
本发明实施方式的技术方案如下:
一种网络数据包处理方法,包括:
经由网络接收数据包,并将接收的数据包存储到预定缓存空间;
并行处理所述预定缓存空间中的所述数据包。
所述预定缓存空间包括一数据包缓存队列环;该方法包括:
基于该数据包的接收编号以及所述数据包缓存队列环包含的存储单元总数,确定该数据包在所述数据包缓存队列环中的存储位置。
所述预定缓存空间还包括一数据包获取队列环,所述数据包获取队列环中保存有该数据包在所述数据包缓存队列环中的存储位置。
所述数据包获取队列环还保存有与该存储位置关联的该数据包接收编号和数据包长度。
所述预定缓存空间还包括一指向该数据包获取队列环当前位置的指针。
该方法包括:
在所述数据包获取队列环中确定一目标数据包在所述数据包缓存队列环中的存储位置;
从所确定的存储位置处获取并处理该目标数据包。
该方法包括:
从该数据包获取队列环当前位置开始,按照节点递减顺序查找接收编号小于或等于该目标数据包接收编号的匹配节点,当找到匹配节点时,获取该匹配节点与数据包获取队列环当前位置之间所有节点各自保存的存储位置,并利用所述存储位置从所述数据包缓存队列环中获取并处理该目标数据包。
该方法还包括,
当递减到所述数据包获取队列环的第一节点还找不到匹配节点时,从所述数据包获取队列环的最末节点开始按照节点递减顺序查找接收编号小于或等于该目标数据包的接收编号的匹配节点,一直查找到该数据包获取队列环当前位置;其中在该查找过程中,当找到匹配节点时,获取该匹配节点与数据包获取队列环当前位置之间所有节点各自保存的存储位置,并利用所述存储位置从所述数据包缓存队列环中获取并处理该目标数据包。
所述节点递减顺序为逐一递减、按照固定值递减或无规律递减。
该方法还包括:
缓存之前所处理数据包在数据包缓存队列环中的存储位置;
继续从所述数据包缓存队列环获取并处理该存储位置之后的数据包。
该方法还包括:
计算之前所处理数据包在数据包获取队列环的对应位置与该数据包获取队列环当前位置之间的差值,当所述差值与该数据包获取队列环长度之比低于预先设定的门限值时,停止处理所述预定缓存空间中的所述数据包。
一种网络数据包处理装置,包括:
接收单元,用于经由网络接收数据包,并将接收的数据包存储到预定缓存空间;
处理单元,用于并行处理所述预定缓存空间中的所述数据包。
所述预定缓存空间包括一数据包缓存队列环;
该接收单元,用于基于该数据包的接收编号以及所述数据包缓存队列环包含的存储单元总数,确定该数据包在所述数据包缓存队列环中的存储位置。
所述预定缓存空间还包括一数据包获取队列环,所述数据包获取队列环中保存有该数据包在所述数据包缓存队列环中的存储位置。
所述数据包获取队列环还保存与该存储位置关联的该数据包接收编号和数据包长度。
该处理单元,用于在所述数据包获取队列环中确定一目标数据包在所述数据包缓存队列环中的存储位置,并从所确定的存储位置处获取并处理该目标数据包。
该接收单元包括一个接收进程;该处理单元包括多个处理进程。
所述数据包获取队列环的数目为至少两个,每个数据包获取队列环与各自处理进程相对应;
每个数据包获取队列环保存有相对应处理进程的数据包在所述数据包缓存队列环中的存储位置;
该处理单元,用于使所述多个处理进程并行从各自对应的数据包获取队列环获取数据包存储位置,还并行处理对应于各自存储位置的数据包。
该处理单元,还用于计算之前所处理数据包在数据包获取队列环的对应位置与该数据包获取队列环当前位置之间的差值,当所述差值与该数据包获取队列环长度之比低于预先设定的门限值时,停止处理所述预定缓存空间中的所述数据包。
一种网络处理设备,包括如上任一项的网络数据包处理装置
从上述技术方案可以看出,本发明实施方式提出一种基于共享缓存空间的多进程包处理方式,将数据包接收工作和包处理工作分离,各个处理进程并行处理数据包,可以充分发挥多核CPU的优势,降低CPU资源浪费。
而且,本发明实施方式通过对多核CPU设备的软件架构进行调整,基于共享缓存结构将收包和处理包工作进行了分离,可以显著提高设备的包处理性能,进而减少总项目的成本。而且,本发明实施方式通过处理进程和深度处理进程池的设置,对流量进行分流处理,对CPU消耗类工作并行处理,可以明显降低系统的丢包率。还有,在本发明实施方式中,不同的处理进程可以拿到同样的流量,并完成不同类型的处理工作。另外,本发明实施方式依靠数据包序列号处理机制可以获知处理进程丢包情况,实施简单,可以使用较廉价的服务器完成专业网络处理器的工作。
附图说明
图1为根据本发明实施方式网络数据包处理方法流程图。
图2为根据本发明实施方式网络数据包处理装置示意图。
图3为根据本发明实施方式的共享缓存空间数据结构示意图。
图4为根据本发明实施方式的共享缓存空间工作原理第一示意图。
图5为根据本发明实施方式的共享缓存空间工作原理第二示意图。
图6为根据本发明实施方式的恶意软件扫描系统结构图。
具体实施方式
为了使本发明的技术方案及优点更加清楚明白,以下结合附图及实施方式,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅仅用以阐述性说明本发明,并不用于限定本发明的保护范围。
为了描述上的简洁和直观,下文通过描述若干代表性的实施方式来对本发明的方案进行阐述。实施方式中大量的细节仅用于帮助理解本发明的方案。但是很明显,本发明的技术方案实现时可以不局限于这些细节。为了避免不必要地模糊了本发明的方案,一些实施方式没有进行细致地描述,而是仅给出了框架。下文中,“包括”是指“包括但不限于”,“根据……”是指“至少根据……,但不限于仅根据……”。由于汉语的语言习惯,下文中没有特别指出一个成分的数量时,意味着该成分可以是一个也可以是多个,或可理解为至少一个。
在本发明实施方式中,提出一种基于共享缓存空间的多进程包处理方式,将收包工作和包处理工作分离,各个处理进程并行处理数据包,可以充分发挥多核CPU的优势,明显提高设备的网络吞吐量。
图1为根据本发明实施方式网络数据包处理方法流程图。
如图1所示,该方法包括:
步骤S101:经由网络接收数据包,并将接收的数据包存储到预定缓存空间。
在这里,可以经由诸如有线网、光纤网、无线网、局域网、城域网、广域网等各种类型的网络接收数据包。比如,可以通过一或多个以太网卡从网络接收数据包。
预定缓存空间可以包括利用线性数组建立的数据包缓存队列环。在数据包缓存队列环中具有多个存储单元,每个存储单元的存储空间可以相同,也可以各不相同。当经由网络接收到数据包之后,各个数据包具有各自的接收编号。比如,网卡可以基于数据包接收时间顺序,为各个数据包分配相应的接收编号。
在一个实施方式中,可以基于该数据包的接收编号以及数据包缓存队列环包含的存储单元总数,确定该数据包在数据包缓存队列环中的存储位置。
比如,对于接收编号为p的数据包,假设数据包缓存队列环包含的存储单元为N,可以将该接收编号为p的数据包存储到的第m个存储空间,其中m=p%N(其中,%是取余运算)。
举例,假设N为11,而p为12,m=12%11=1,则取模结果为1,即将接收编号为12的数据存放到存储单元1。
当数据包缓存队列环中各个存储单元都填充有数据包时,如果此时接收到新数据包,则利用新数据包覆盖数据包缓存队列环中相应位置的旧数据包。
在一个实施方式中,在该预定缓存空间中,还包括数据包获取队列环,在数据包获取队列环中存储有数据包在数据包缓存队列环中的存储位置。而且,在数据包获取队列环中,还与该存储位置关联保存数据包的接收编号和数据包长度。
比如:数据包获取队列环可以包括多个节点,这些节点首尾相连成为环状。每个节点中都储存有相对应数据包在数据包缓存队列环中的存储位置、该数据包的接收编号和该数据包长度。优选地,在预定缓存空间还包括指向该数据包获取队列环当前位置的指针。
步骤S102:并行处理预定缓存空间中的数据包。
在一个实施方式中:在数据包获取队列环中确定一目标数据包在数据包缓存队列环中的存储位置;然后从所确定的存储位置处获取并处理该目标数据包。其中:从该数据包获取队列环当前位置开始,按照节点递减顺序查找接收编号小于或等于该目标数据包接收编号的匹配节点,当找到匹配节点时,获取该匹配节点与数据包获取队列环当前位置之间所有节点各自保存的存储位置,并利用这些存储位置从数据包缓存队列环中获取并处理该目标数据包。
优选地,当递减到数据包获取队列环的第一节点还找不到匹配节点时,从数据包获取队列环的最末节点开始按照节点递减顺序查找接收编号小于或等于该目标数据包的接收编号的匹配节点,一直查找到该数据包获取队列环当前位置;在此查找过程中,当找到匹配节点时,可停止继续查找,获取该匹配节点与数据包获取队列环当前位置之间所有节点各自保存的存储位置,并利用该存储位置从数据包缓存队列环中获取并处理该目标数据包。
在上述过程中,节点递减顺序既可以为逐一递减,也可以是按照固定值递减或无规律递减,本发明实施方式对此并无限定。
在一个实施方式中:
可以由一个接收进程经由该网络接收数据包,并由该接收进程将接收的数据包存储到该预定缓存空间;由一进程池中的多个处理进程并行处理预定缓存空间中的数据包。这样,收包工作都交由一个接收进程执行,而包处理工作交由另一组处理进程执行。数据包只会被接收进程接收一次,可以克服传统多进程技术中多进程分别接收数据包所导致的资源浪费缺点。而且,处理进程池中的各个处理进程只处理与自身相关的包,可以克服传统多线程技术中的锁开销缺点。
在一个实施方式中:
数据包获取队列环的数目为至少两个,每个数据包获取队列环具有相对应的处理进程。而且每个数据包获取队列环存储有与处理进程相对应的数据包在数据包缓存队列环中的存储位置。该方法还包括:多个处理进程并行从各自对应的数据包获取队列环中获取数据包存储位置,还并行处理对应于各自存储位置的数据包。
优选地,接收进程可以按照各个处理进程的业务功能将收到的包进行简单分类。举例:接收进程把只需要1号处理进程处理的数据包在数据包缓存队列环中存入对应于1号处理进程的1号数据包获取队列环,而且把只需要2号处理进程处理的包在数据包缓存队列环中存入对应于2号处理进程的2号数据包获取队列环,依次类推。各个处理进程只处理相对应数据包获取队列环所指向的数据包,从而提高了整个系统的并发处理性能。
如果处理进程持续不停地处理数据包,则CPU使用率一直持续在较高水平,这也可能导致浪费。鉴于系统良性运行时的处理进程数据包处理速度通常快于接收进程的数据包接收速度,优选让处理进程池中每个处理进程在处理掉一批数据包之后,计算处理进程之前所处理数据包在数据包获取队列环的对应位置与该数据包获取队列环当前位置之间的差值,当差值与该数据包获取队列环长度之比低于预先设定的门限值时,处理进程暂时停止处理预定缓存空间中的数据包,而是让处理进程休息一段预定时间,在休息时间到后再继续处理新收到的包,这样既可以降低处理进程池的总CPU浪费,还可以保证处理进程不会和接收进程同时操作数据包获取队列环。
如果处理进程在处理包的同时,还需要完成一些CPU消耗性的工作(比如模式匹配、磁盘写入等),则处理进程有可能无法处理新收到的数据包,即发生处理丢包。因此,可以依据负载均衡原则为各个处理进程平均分配工作量。
网络流量由于其顺序达到的特性,同一个用户先后到达的数据包具有一定的关系,因此需要将相同用户的数据包分到相同处理进程去处理。比如,在GPRS、CDMA、LTE等核心网中,手机用户分配的IP地址在上线期间不再变动,而且办公网中一个终端配置的IP地址也不常变动,因此可以考虑按照用户IP对数据包进行分流。
举例,如果有R个处理进程,可以让1号处理进程处理IP%R=1的用户;2号处理进程处理IP%R=2的用户,依次类推,这样可以将所有用户的流量均衡到整个处理进程池,每个处理进程实际上间隔处理新到达数据包,从而可以提高每个处理进程以及整个处理进程池的处理总速度。
而且,可以启用另外一组负责深度处理的进程池或者线程池,以具体执行模式匹配、磁盘写入等深度消耗CPU的工作。处理进程在完成文件重组(file reassembling)、协议分析(protocol parser)等包处理相关工作后,将这些负载工作交由负责深度处理的进程池或者线程池,而处理进程转而继续处理新到达的数据包,这样可以最大程度降低丢包发生的可能性。
基于上述详细分析,本发明实施方式还提出了一种网络数据包处理装置。
图2为根据本发明实施方式网络数据包处理装置结构图。
如图2所示,网络数据包处理装置,包括:
接收单元201,用于经由网络接收数据包,并将接收的数据包存储到预定的缓存空间202;
处理单元203,用于并行处理缓存空间202中的数据包。
比如,接收单元201可以从多个网卡接收以太数据包eth0、eth1,一直到ethn。
在一个实施方式中:
缓存空间202包括利用线性数组建立的数据包缓存队列环;
该接收单元201,用于基于该数据包的接收编号以及数据包缓存队列环包含的存储单元总数,确定该数据包在数据包缓存队列环中的存储位置。
在一个实施方式中:
缓存空间202还包括数据包获取队列环,数据包获取队列环中存储有该数据包在数据包缓存队列环中的存储位置。
在一个实施方式中:
数据包获取队列环还与该存储位置关联保存该数据包的接收编号和数据包长度。
在一个实施方式中:
缓存空间202还包括指向该数据包获取队列环当前位置的指针。
在一个实施方式中:
该处理单元203,用于在数据包获取队列环中确定一目标数据包在数据包缓存队列环中的存储位置,并从所确定的存储位置处获取并处理该目标数据包。
在一个实施方式中:
该处理单元203,用于从该数据包获取队列环当前位置开始,按照节点递减顺序查找接收编号小于或等于该目标数据包接收编号的匹配节点,当找到匹配节点时,获取该匹配节点与数据包获取队列环当前位置之间所有节点各自保存的存储位置,并利用存储位置从数据包缓存队列环中获取并处理该目标数据包。
在一个实施方式中:
该处理单元203,还用于当递减到数据包获取队列环第一节点还找不到匹配节点时,从数据包获取队列环的最末节点开始按照节点递减顺序查找接收编号小于或等于该目标数据包的接收编号的匹配节点,一直查找到该数据包获取队列环当前位置;在此查找过程中,当找到匹配节点时,可停止继续查找,获取该匹配节点与数据包获取队列环当前位置之间所有节点各自保存的存储位置,并利用这些存储位置从数据包缓存队列环中获取并处理该目标数据包。
优选地,节点递减顺序可以为逐一递减、按照固定值递减或无规律递减,等等。
在一个实施方式中:
该处理单元203,用于缓存之前所处理数据包在数据包缓存队列环中的存储位置;并继续从数据包缓存队列环获取并处理该存储位置之后的数据包。
在一个实施方式中:
该接收单元201包括一个接收进程2011;该处理单元203可包括一进程池,进程池包括多个处理进程2031、2032…203j。比如,接收进程2011具体可以实施为包捕获绑定引擎或采用零拷贝(zero copy)技术,从多个网卡获取数据包etho,eth1…ethn。
在一个实施方式中:
数据包获取队列环的数目为至少两个,每个数据包获取队列环具有相对应的处理进程;每个数据包获取队列环中存储与处理进程相对应的数据包在数据包缓存队列环中的存储位置;
该处理单元203,用于使多个处理进程2031、2032…203j并行从各自对应的数据包获取队列环中获取数据包存储位置,还并行处理对应于各自存储位置的数据包。
在一个实施方式中:
该处理单元203,还用于计算之前所处理数据包在数据包获取队列环的对应位置与该数据包获取队列环当前位置之间的差值,当所述差值与该数据包获取队列环长度之比低于预先设定的门限值时,停止处理所述预定缓存空间中的数据包。
在一个实施方式中:该装置还包括深度处理单元204,用于具体执行模式匹配、磁盘写入等消耗CPU的工作。深度处理单元204具体可以实施为包含进程2041、2042…204k的进程池,或者实施为包含线程2041、2042…204k的线程池。
处理单元203在完成文件重组、协议分析等包处理相关的工作后,可以将包处理后的负载工作交由深度处理单元204执行,而处理单元203继续处理新接收数据包,这样可以最大程度降低丢包发生的可能性。
可见,在本发明实施方式中,接收进程和处理进程可以共享预定缓存空间。
图3为根据本发明实施方式的共享缓存空间数据结构示意图。
如图3所示,该共享缓存空间包括3个组成部分:
(1)、数据包缓存队列环(pkt_buf);pkt_buf可以是一个线性数组,用来缓存通过网络接收到的数据包,该线性数组可以包括多个存储单元,每个存储单元至少能存储一个以太网包(如1600B),可以根据系统内存设置数组大小;数组越大,则包数据缓存性能越好。
(2)、数据包获取队列环(capture_queue);capture_queue是一个较小的结构体,包括:(a)、一个64位计数器(pkt_counter),用于存储数据包的接收编号;(b)、pkt_len,用于指示数据包的实际长度;(c)、pkt_buf_index,用于保存pkt_buf数组的下标,即数据包在pkt_buf中的存储位置;根据pkt_buf_index可以在数据包缓存队列环中找到对应的包本身。
(3)、指针(p_current);指向capture_queue当前正在处理的数据包。
图4为根据本发明实施方式的共享缓存空间工作原理第一示意图。
如图4所示,上部的队列环为数据包缓存队列环(pkt_buf),下部的队列环为数据包获取队列环(capture_queue)。假定数据包缓存队列环长度为N,而数据包获取队列环长度为M。该数据包获取队列环当前位置的指针为p_current。
当数据包eth0、eth1…ethn陆续到达时,网卡可以依据接收时间对这些数据包进行编号。比如,当最新的接收编号为p时,可以将接收编号为p的数据包存储到pkt_buf中的p%N(%是取余运算)位置处,假定该位置在pkt_buf中的顺序为m。
然后,在capture_queue队列中的p_current位置插入该接收编号为p的数据包的索引节点信息,具体包括:位计数器(pkt_counter)的值p(即接收编号p);数据包大小(pkt_len)以及实际写入pkt_buf的位置(pkt_buf_index,具体为m),随后p_current自增。假设capture_queue大小是M,可以对p_current的自增采用p_current=(p_current+1)%M的方式,即构造了数据包获取队列环。自此,接收进程已经可以正常工作,而且与处理进程的工作并无关联。
处理进程池有序处理每一个到达的数据包。处理进程池的处理原理类似于TCP的序列号机制。首先,每个处理进程都保存下一个应该接收的包序列号计数器,记为next_recv_pkt_counte。从capture_queue的p_current所指的位置递减查找,如果找到1号节点则继续从M节点递减查找,一直找到p_current+1位置。在查找过程中,如果某个节点Q的pkt_counter与next_recv_pkt_counter取值相同,则停止查找,开始处理自此位置递增到p_current的节点,这些节点的pkt_buf_index所指向的包就是接收进程新收到数据包。也就是说,首先从p_current递减查找pkt_counter<=next_recv_pkt_counter的节点Q,然后从节点Q开始递增处理新收数据包。如果持续查找到p_current+1节点,仍然无法找到pkt_counter与next_recv_pkt_counter取值相同的节点,则表明出现丢包。由于pkt_counter一直是递增的状态,因此pkt_counter(p_current+1)-next_recv_pkt_counter就是丢掉包数。
可以通过逐一递减来查找匹配节点。如果期望提高递减查找速度,可以按照固定值递减或无规律递减。即不是依次减一查找,而是每次减若干个值,只要查找到有节点的pkt_counter小于或等于next_recv_pkt_counter即停止查找,并开始递增处理。
随着递减查找速度的提高,可以在高速网络的关键代码部分大量减少比较的次数。
实际上,还可以设置一个pkt_buf对应于多个capture_queue的场景。接收进程按照各个处理进程的业务功能将收到的包进行简单分类。比如:把只需要1号处理进程处理的包插入1号处理进程的capture_queue,只需要2号处理进程处理的包插入2号处理进程的capture_queue,依次类推。各个进程只处理对应capture_queue所指向的数据包,从而提高了整个系统的并发处理性能。
图5为根据本发明实施方式的共享缓存空间工作原理第二示意图。
如图5所示,上部的队列环为数据包缓存队列环(pkt_buf),下部的为数据包获取队列环包括两个。这两个数据包获取队列环当前位置的指针分别为p_current_1和为p_current_2。每个数据包获取队列环对应于不同的处理进程。这样,各个处理进程只处理相对应数据包获取队列环所指向的数据包,从而提高了整个系统的并发处理性能。
在本发明实施方式中,还可以由处理进程设置读指针缓存,缓存最近已处理数据包在pkt_buf中的位置值。处理进程下次处理时,直接从该位置所对应的数据包开始处理,从而无需查找数据,而是可以直接定位数据,优化效果比较明显。
本方案还有一个优点是可以允许处理进程池中的不同进程完成不同种类的工作:比如处理进程1进行垃圾邮件检查,处理进程2进行文件共享监控,处理进程3进行入侵检测等,因为各个处理进程都可以获取所有的用户流量,所以可以基于自己负责的工作进行特殊的优化。
由此可见,本发明实施方式通过对多核CPU设备的软件架构进行调整,基于共享缓存结构将收包和处理包工作分离,可以显著提高同样设备的包处理性能,进而减少总项目的成本。而且,本发明实施方式通过处理进程和深度处理进程池的设置,对所有流量进行分流处理,对CPU消耗类工作进行并行处理,可以明显降低系统的丢包率。还有,在本发明实施方式中,不同的处理进程可以拿到同样的流量,完成不同类型的处理工作。另外,本发明实施方式依靠包序列号处理机制可以知道处理进程丢包情况,而且实施简单,提升效果明显,可以使用较廉价的服务器完成专业网络处理器的工作。
可以将本发明实施方式应用到各种应用环境中,尤其适用于网络处理设备。
现在的网络处理设备CPU动辄1-2颗,每颗CPU又可以包含6-12个核心,这样每台设备操作系统识别出的CPU数量就可能达到6-24颗,基于CPU亲和力的原理,如果将数据包接收进程绑定到一些CPU上,将包处理进程池、深度处理进程池绑定到另外一些CPU上,将在上述基于共享缓存的架构优化的基础上再次提高整个系统的性能。
本发明实施方式通过共享缓存将数据包和接收处理包这两个通常耦合在一起的操作进行了拆分,收包过程不用关注如何处理包,处理包过程不用关注如何接收数据包。本发明实施方式通过简单原理和代码,充分利用了多核CPU,可以提高系统整体性能,能够使用较廉价的设备达到专业网络处理器的性能。
图6为根据本发明实施方式的恶意软件扫描系统结构图。
如图6所示,该恶意软件扫描系统602通过网络分流器或分光器6015,从移动终端6011接收经由GPRS服务节点(SGSN)6012所传递的网络数据包,以及从互联网6013接收经由网关GPRS支持节点(GGSN)6014所传递的网络数据包。
接收单元201捕获这些网络数据包,而且将所捕获的网络数据包发送到共享缓存池202。MMS分析器进程2031、移动恶意软件分析器进程2032和Web线程分析器进程2033分别从共享缓存池202中获取各自相应数据包以完成各自的文件重组、协议分析等包处理工作,而且由病毒扫描处理进程池6016针对处理后的数据具体执行病毒扫描工作,其中病毒扫描处理进程池6016具有已知病毒特征数据库6017。最后,由病毒日志/文件保存/文件上传进程6018完成具体的病毒日志生成、文件上传和保存工作。
以上描述了将本发明实施到恶意软件扫描系统中的示范性实例,本领域技术人员可以意识到,这种描述仅是示范性的,并不用于对本发明实施方式的保护范围进行限定。
需要说明的是,上述各流程和各结构图中不是所有的步骤和模块都是必须的,可以根据实际的需要省略某些步骤或模块。各步骤的执行顺序不是固定的,可以根据需要进行调整。各模块的划分仅仅是为了便于描述采用的功能上的划分,实际实现时,一个模块可以分由多个模块实现,多个模块的功能也可以由同一个模块实现,这些模块可以位于同一个设备中,也可以位于不同的设备中。
各实施方式中的单元和模块可以采用软件、硬件或软硬件结合的方式实现。例如,一个硬件模块可以包括专门设计的永久性电路或逻辑器件(如专用处理器,如FPGA或ASIC)用于完成特定的操作。硬件模块也可以包括由软件临时配置的可编程逻辑器件或电路(如包括通用处理器或其它可编程处理器)用于执行特定操作。至于具体采用专用的永久性电路,或是采用临时配置的电路(如由软件进行配置)来实现硬件模块,可以根据成本和时间上的考虑来决定。
本发明还提供了一种机器可读的存储介质,存储用于使一机器执行如本文所述方法的指令。具体地,可以提供配有存储介质的系统或者装置,在该存储介质上存储着实现上述实施方式中任一实施方式的功能的软件程序代码,且使该系统或者装置的计算机(或CPU或MPU)读出并执行存储在存储介质中的程序代码。此外,还可以通过基于程序代码的指令使计算机上操作的操作系统等来完成部分或者全部的实际操作。还可以将从存储介质读出的程序代码写到插入计算机内的扩展板中所设置的存储器中或者写到与计算机相连接的扩展单元中设置的存储器中,随后基于程序代码的指令使安装在扩展板或者扩展单元上的CPU等来执行部分和全部实际操作,从而实现上述实施方式中任一实施方式的功能。
用于提供程序代码的存储介质实施方式包括软盘、硬盘、磁光盘、光盘(如CD-ROM、CD-R、CD-RW、DVD-ROM、DVD-RAM、DVD-RW、DVD+RW)、磁带、非易失性存储卡和ROM。可选择地,还可以由通信网络从服务器计算机上下载程序代码。
综上所述,在本发明实施方式中,经由网络接收数据包,并将接收的数据包存储到预定缓存空间;并行处理预定缓存空间中的数据包。由此可见,本发明实施方式提出一种基于共享缓存空间队列的多进程包处理方式,将数据包接收工作和包处理工作分离,各个处理进程并行处理数据包,可以充分发挥多核CPU的优势,降低资源浪费。
而且,本发明实施方式通过对多核CPU设备的软件架构进行调整,基于共享缓存结构将收包和处理包工作进行分离,可以显著提高同样设备的包处理性能,进而减少总项目的成本。而且,本发明实施方式通过处理进程和深度处理进程池的设置,对所有流量进行分流处理,对CPU消耗类工作进行并行处理,可以明显降低系统的丢包率。还有,在本发明实施方式中,不同的处理进程可以拿到同样的流量,完成不同类型的处理工作。另外,本发明实施方式依靠包序列号处理机制可以获知处理进程丢包情况,而且实施简单,提升效果明显,可以使用较廉价服务器完成专业网络处理器的工作。
以上所述,仅为本发明的较佳实施方式而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (15)
1.一种网络数据包处理方法,包括:
经由网络接收数据包,并将接收的数据包存储到预定缓存空间,其中,所述预定缓存空间包括一数据包缓存队列环和一数据包获取队列环,所述数据包获取队列环包括多个节点,所述多个节点首尾相连成环状,每个节点保存有对应数据包在所述数据包缓存队列环中的存储位置,以及与该存储位置关联的该数据包接收编号;
并行处理所述预定缓存空间中的所述数据包,其中,从所述数据包获取队列环当前位置开始,按照节点递减顺序查找接收编号小于或等于一个目标数据包接收编号的匹配节点,当找到匹配节点时,获取该匹配节点与数据包获取队列环当前位置之间所有节点各自保存的存储位置,并利用所述存储位置从所述数据包缓存队列环获取并处理所述目标数据包。
2.根据权利要求1所述的网络数据包处理方法,其特征在于,该方法包括:
基于该数据包的接收编号以及所述数据包缓存队列环包含的存储单元总数,确定该数据包在所述数据包缓存队列环中的存储位置。
3.根据权利要求1所述的网络数据包处理方法,其特征在于,所述数据包获取队列环还保存有与该存储位置关联的该数据包的数据包长度。
4.根据权利要求3所述的网络数据包处理方法,其特征在于,所述预定缓存空间还包括一指向该数据包获取队列环当前位置的指针。
5.根据权利要求1所述的网络数据包处理方法,其特征在于,该方法还包括,
当递减到所述数据包获取队列环的第一节点还找不到匹配节点时,从所述数据包获取队列环的最末节点开始按照节点递减顺序查找接收编号小于或等于该目标数据包接收编号的匹配节点,一直查找到该数据包获取队列环当前位置;其中在该查找过程中,当找到匹配节点时,获取该匹配节点与数据包获取队列环当前位置之间所有节点各自保存的存储位置,并利用所述存储位置从所述数据包缓存队列环获取并处理该目标数据包。
6.根据权利要求5所述的网络数据包处理方法,其特征在于,所述节点递减顺序为逐一递减、按照固定值递减或无规律递减。
7.根据权利要求1所述的网络数据包处理方法,其特征在于,该方法还包括:
缓存之前所处理数据包在该数据包缓存队列环中的存储位置;
继续从所述数据包缓存队列环获取并处理该存储位置之后的数据包。
8.根据权利要求1所述的网络数据包处理方法,其特征在于,该方法还包括:
计算之前所处理数据包在数据包获取队列环的对应位置与该数据包获取队列环当前位置之间的差值,当所述差值与该数据包获取队列环长度之比低于预先设定的门限值时,停止处理所述预定缓存空间中的所述数据包。
9.一种网络数据包处理装置,包括:
接收单元,用于经由网络接收数据包,并将接收的数据包存储到预定缓存空间,其中,所述预定缓存空间包括一数据包缓存队列环和一数据包获取队列环,所述数据包获取队列环包括多个节点,所述多个节点首尾相连成环状,每个节点保存有对应数据包在所述数据包缓存队列环中的存储位置,以及与该存储位置关联的该数据包接收编号;
处理单元,用于并行处理所述预定缓存空间中的所述数据包,其中,从所述数据包获取队列环当前位置开始,按照节点递减顺序查找接收编号小于或等于一个目标数据包接收编号的匹配节点,当找到匹配节点时,获取该匹配节点与数据包获取队列环当前位置之间所有节点各自保存的存储位置,并利用所述存储位置从所述数据包缓存队列环获取并处理所述目标数据包。
10.根据权利要求9所述的网络数据包处理装置,其特征在于,
该接收单元,用于基于该数据包的接收编号以及所述数据包缓存队列环包含的存储单元总数,确定该数据包在所述数据包缓存队列环中的存储位置。
11.根据权利要求9所述的网络数据包处理装置,其特征在于,所述数据包获取队列环还保存有与该存储位置关联的该数据包的数据包长度。
12.根据权利要求9-11中任一项所述的网络数据包处理装置,其特征在于,
该接收单元包括一个接收进程;该处理单元包括多个处理进程。
13.根据权利要求12所述的网络数据包处理装置,其特征在于,所述数据包获取队列环的数目为至少两个,每个数据包获取队列环与各自处理进程相对应;
每个数据包获取队列环中保存有相对应处理进程的数据包在所述数据包缓存队列环中的存储位置;
该处理单元,用于使所述多个处理进程并行从各自对应的数据包获取队列环获取数据包存储位置,还并行处理对应于各自存储位置的数据包。
14.根据权利要求9所述的网络数据包处理装置,其特征在于,
该处理单元,还用于计算之前所处理数据包在数据包获取队列环的对应位置与该数据包获取队列环当前位置之间的差值,当所述差值与该数据包获取队列环长度之比低于预先设定的门限值时,停止处理所述预定缓存空间中的所述数据包。
15.一种网络处理设备,其特征在于,包括如权利要求9-14中任一项的网络数据包处理装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410044200.7A CN104821924B (zh) | 2014-01-30 | 2014-01-30 | 一种网络数据包处理方法、装置和网络处理设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410044200.7A CN104821924B (zh) | 2014-01-30 | 2014-01-30 | 一种网络数据包处理方法、装置和网络处理设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104821924A CN104821924A (zh) | 2015-08-05 |
CN104821924B true CN104821924B (zh) | 2018-11-27 |
Family
ID=53732092
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410044200.7A Active CN104821924B (zh) | 2014-01-30 | 2014-01-30 | 一种网络数据包处理方法、装置和网络处理设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104821924B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105577567B (zh) * | 2016-01-29 | 2018-11-02 | 国家电网公司 | 基于Intel DPDK的网络数据包并行处理方法 |
CN106131180A (zh) * | 2016-07-08 | 2016-11-16 | 深圳市沃特沃德股份有限公司 | 智能终端多并发请求的处理方法、装置及系统 |
CN106776056B (zh) * | 2016-11-10 | 2020-12-29 | 北京像素软件科技股份有限公司 | 游戏数据处理方法、装置及服务器 |
CN107277062B (zh) * | 2017-08-09 | 2019-12-24 | 北京中科威荣计算机技术有限公司 | 数据包的并行处理方法及装置 |
CN108183893B (zh) * | 2017-12-25 | 2021-03-30 | 东软集团股份有限公司 | 一种分片包检测方法、检测装置、存储介质和电子设备 |
CN110851288B (zh) * | 2019-10-17 | 2021-08-03 | 腾讯科技(深圳)有限公司 | 消息处理方法及装置 |
CN110908798B (zh) * | 2019-11-08 | 2022-11-25 | 丁剑明 | 多进程协同式网络流量解析方法及装置 |
CN111432435B (zh) * | 2020-03-18 | 2022-07-15 | 南京英锐创电子科技有限公司 | 蓝牙接收装置和蓝牙通信方法及电子设备 |
CN111740947A (zh) * | 2020-05-11 | 2020-10-02 | 深圳震有科技股份有限公司 | 一种数据包批量处理方法、智能终端及存储介质 |
CN115380280A (zh) * | 2020-06-15 | 2022-11-22 | 深圳市欢太科技有限公司 | 文件还原方法、终端及存储介质 |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101013383A (zh) * | 2007-02-13 | 2007-08-08 | 杭州华为三康技术有限公司 | 实现多核cpu进行报文联合处理的系统及方法 |
CN101414271A (zh) * | 2008-12-04 | 2009-04-22 | 浙江大学 | 多核平台下基于硬件计时器与任务队列的调度方法 |
CN101436989A (zh) * | 2008-12-26 | 2009-05-20 | 福建星网锐捷网络有限公司 | 一种转发报文的方法及装置 |
CN102158408A (zh) * | 2011-04-01 | 2011-08-17 | 华为技术有限公司 | 数据流处理方法和装置 |
CN102497322A (zh) * | 2011-12-19 | 2012-06-13 | 曙光信息产业(北京)有限公司 | 一种基于分流网卡和多核cpu实现的高速包过滤设备和方法 |
CN102571580A (zh) * | 2011-12-31 | 2012-07-11 | 曙光信息产业股份有限公司 | 数据接收方法和计算机 |
CN102624889A (zh) * | 2012-03-06 | 2012-08-01 | 河海大学 | 一种基于接收与处理分离的海量数据并发性处理方法 |
CN102752198A (zh) * | 2012-06-21 | 2012-10-24 | 北京星网锐捷网络技术有限公司 | 多核报文转发方法、多核处理器及网络设备 |
CN102855218A (zh) * | 2012-05-14 | 2013-01-02 | 中兴通讯股份有限公司 | 数据处理系统、方法及装置 |
CN102902512A (zh) * | 2012-08-31 | 2013-01-30 | 浪潮电子信息产业股份有限公司 | 一种基于多线程编程及消息队列的多线程并行处理方法 |
CN103049245A (zh) * | 2012-10-25 | 2013-04-17 | 浪潮电子信息产业股份有限公司 | 一种基于cpu多核平台的软件性能优化方法 |
CN103257888A (zh) * | 2012-02-16 | 2013-08-21 | 阿里巴巴集团控股有限公司 | 一种对缓冲队列并发执行读、写访问的方法和设备 |
CN103532876A (zh) * | 2013-10-23 | 2014-01-22 | 中国科学院声学研究所 | 数据流的处理方法与系统 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7369912B2 (en) * | 2003-05-29 | 2008-05-06 | Fisher-Rosemount Systems, Inc. | Batch execution engine with independent batch execution processes |
US8788570B2 (en) * | 2009-06-22 | 2014-07-22 | Citrix Systems, Inc. | Systems and methods for retaining source IP in a load balancing multi-core environment |
US8695008B2 (en) * | 2011-04-05 | 2014-04-08 | Qualcomm Incorporated | Method and system for dynamically controlling power to multiple cores in a multicore processor of a portable computing device |
-
2014
- 2014-01-30 CN CN201410044200.7A patent/CN104821924B/zh active Active
Patent Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101013383A (zh) * | 2007-02-13 | 2007-08-08 | 杭州华为三康技术有限公司 | 实现多核cpu进行报文联合处理的系统及方法 |
CN101414271A (zh) * | 2008-12-04 | 2009-04-22 | 浙江大学 | 多核平台下基于硬件计时器与任务队列的调度方法 |
CN101436989A (zh) * | 2008-12-26 | 2009-05-20 | 福建星网锐捷网络有限公司 | 一种转发报文的方法及装置 |
CN102158408A (zh) * | 2011-04-01 | 2011-08-17 | 华为技术有限公司 | 数据流处理方法和装置 |
CN102497322A (zh) * | 2011-12-19 | 2012-06-13 | 曙光信息产业(北京)有限公司 | 一种基于分流网卡和多核cpu实现的高速包过滤设备和方法 |
CN102571580A (zh) * | 2011-12-31 | 2012-07-11 | 曙光信息产业股份有限公司 | 数据接收方法和计算机 |
CN103257888A (zh) * | 2012-02-16 | 2013-08-21 | 阿里巴巴集团控股有限公司 | 一种对缓冲队列并发执行读、写访问的方法和设备 |
CN102624889A (zh) * | 2012-03-06 | 2012-08-01 | 河海大学 | 一种基于接收与处理分离的海量数据并发性处理方法 |
CN102855218A (zh) * | 2012-05-14 | 2013-01-02 | 中兴通讯股份有限公司 | 数据处理系统、方法及装置 |
CN102752198A (zh) * | 2012-06-21 | 2012-10-24 | 北京星网锐捷网络技术有限公司 | 多核报文转发方法、多核处理器及网络设备 |
CN102902512A (zh) * | 2012-08-31 | 2013-01-30 | 浪潮电子信息产业股份有限公司 | 一种基于多线程编程及消息队列的多线程并行处理方法 |
CN103049245A (zh) * | 2012-10-25 | 2013-04-17 | 浪潮电子信息产业股份有限公司 | 一种基于cpu多核平台的软件性能优化方法 |
CN103532876A (zh) * | 2013-10-23 | 2014-01-22 | 中国科学院声学研究所 | 数据流的处理方法与系统 |
Also Published As
Publication number | Publication date |
---|---|
CN104821924A (zh) | 2015-08-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104821924B (zh) | 一种网络数据包处理方法、装置和网络处理设备 | |
Miao et al. | Silkroad: Making stateful layer-4 load balancing fast and cheap using switching asics | |
US8369334B2 (en) | Internet real-time deep packet inspection and control device and method | |
Congdon et al. | Simultaneously reducing latency and power consumption in openflow switches | |
CN102761517B (zh) | 一种高速网络的内容还原方法 | |
CN107852604A (zh) | 用于提供全局虚拟网络(gvn)的系统和方法 | |
US11343187B2 (en) | Quantitative exact match distance in network flows | |
CN102130838B (zh) | 一种基于阿瑞斯协议的对等网络缓存系统的实现方法 | |
CN108363621B (zh) | numa架构下的报文转发方法、装置、存储介质及电子设备 | |
Oikonomou et al. | Experiences from porting the Contiki operating system to a popular hardware platform | |
CN104734955A (zh) | 网络功能虚拟化的实现方法、宽带网络网关以及控制装置 | |
CN102970142A (zh) | 一种vpn设备在多加密卡环境下并发加解密的方法及系统 | |
CN103559017B (zh) | 基于gpu异构计算平台的字符串匹配方法及系统 | |
CN102158406B (zh) | 面向计算机网络链路的智能选路方法 | |
CN102035738A (zh) | 一种获取路由信息的方法及装置 | |
CN107249038A (zh) | 业务数据转发方法及系统 | |
CN110351208A (zh) | 一种报文转发方法、装置、设备及计算机可读存储介质 | |
Katta et al. | Rule-caching algorithms for software-defined networks | |
US9716673B2 (en) | Packet storage method and packet storage apparatus | |
CN108418871A (zh) | 一种云存储性能优化方法和系统 | |
Xiong et al. | Efficient differentiated storage architecture for large-scale flow tables in software-defined wide-area networks | |
CN102523208A (zh) | 多核架构下的应用层协议并行处理方法 | |
KR100864889B1 (ko) | Tcp 상태 기반 패킷 필터 장치 및 그 방법 | |
CN105991367A (zh) | 一种测量虚拟机之间通信依赖关系的方法和系统 | |
De Sensi et al. | Dpi over commodity hardware: implementation of a scalable framework using fastflow |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |