专利名称:一种阿瑞斯协议分析系统中双缓存的设计与实现方法
技术领域:
本发明 是一种针对阿瑞斯协议分析系统的缓存的设计与实现,主要用来解决阿瑞 斯网络报文的截获和篡改重定向之间速率不匹配的问题,解决了高速实时和变速可延时模 块共享数据导致处理速率下降的问题,属于缓冲技术领域。
背景技术:
近些年来P2P流量大量地占据了主干网络,使得运营成本不断增加,如何降低主 干网的压力,有效控制P2P流量是关键。阿瑞斯协议也是一个比较优秀的P2P协议,为了达 到控制该协议流量的目的,我们需要对该协议进行实时地分析,然后控制它在主干网上的 流量,使阿瑞斯协议的客户端尽量能够在城域网范围内完成下载功能,降低主干网的负担。 为了解决阿瑞斯协议分析中实时处理和延时等待的问题,我们必须采用一定的存储技术来 实现模块间的良好运转。缓冲技术就是为了协调吞吐速度相差很大或者实时性要求很高的设备以及模块 之间的数据传送工作。在数据到达与离去速度不匹配的地方,就应该使用缓冲技术。缓冲 技术好比是一个水库,如果上游来的水太多,下游来不及排走,水库就起到“缓冲”作用,先 让水在水库中停留一段时间,等下游能继续排水,再把水送往下游。它的应用非常广泛,在 计算机硬件技术领域,通常CPU的速度要比I/O设备的速度快得多得多,所以可以设置缓冲 区,对于从CPU来的数据,先放在缓冲区中,然后设备可以慢慢地从缓冲区中读出数据,这 样的缓冲区有内存以及cache缓存。在计算机软件技术领域,通常为了匹配两个不同模块 的工作速率或者工作延迟,我们可以也采用软缓冲技术来实现,如使用缓冲技术在线播放 视频。常见的缓冲技术有单缓冲,双缓冲,循环缓冲,缓冲池。当然,缓冲区的高效管理也离不丌一个合理的数据存储结构,不同的数据存储结 构体现出不同的访问性能,对于不同的使用场合,就应该使用对应的存储结构。现今的数据 存储结构大体上包括了线性结构、树形结构、图形结构、集合结构等。因此一个灵活的,高效的缓冲区的设计不但需要考虑需求本身的因素,而且还要 综合考虑它的数据结构的存取性能,代价因素等等。针对阿瑞斯协议分析系统,我们考虑到 内核抓包模块对数据包抓取的实时性要求很高,但内核数据处理模块需要对数据进行延时 处理,所以有必要设计一个高效的,符合要求的缓冲区,以提高各个模块的工作性能。
发明内容
技术问题本发明的目的是提供一种阿瑞斯协议分析系统中双缓存的设计与实现 方法,缓冲高速实时模块(内核抓包模块)和变速可延时模块(内核数据处理模块),以提 高各模块的工作效率。本发明相比以往的方案,有效分离高速实时模块和变速可延时模块, 具有运行的高效性、稳定性、灵活性。技术方案本发明的方法采用了哈希链表的存储结构对截获的阿瑞斯协议的哈希 搜索数据包进行存储,并使用数据包的源端的IP地址和端口号作为输入,计算其MD5值作为哈希链表的哈希值的来源,并使用了双哈希链表的方式,分离了两个不同模块的共享数 据,使两个不同模块对共享数据的读、写分开,互补干扰,以提高高速实时模块(即内核抓 包模块)的运行效率,将不需要或者无法实时处理的部分放到内核数据处理模块当中,进 一步细化模块分工。该方法为 步骤1)进行需求分析,对内核抓包模块需要存储的信息进行详细分析,并生成需 求分析文档;步骤2)根据步骤1的分析文档,理清内核抓包模块和内核数据处理模块的处理流 程以及他们之间的逻辑关系,并生成逻辑交互图以及功能说明文档;步骤3)根据步骤2的逻辑关系以及功能说明文档,设计并实现了内核抓包模块中 有关数据处理的相关步骤,并针对该模块对高速度和实时性的要求,专门设计了基于哈希 值的哈希链表结构的存储模式,该存储结构具有存储的灵活性,较线性表存储结构而言,具 有更好的查询优势,并使用链表结构,可以随意增减哈希链表的容量;步骤4)根据步骤2的逻辑关系以及功能说明文档,设计并实现了内核数据处理模 块,实现了该模块与用户态的NETLINK( —种内核态与用户态的通信套接字)通信,对哈希 链表的读取操作,以及通知内核抓包模块完成双哈希链表之间的轮换,有效提高了模块与 模块之间的独立性;步骤5)根据步骤2的逻辑关系以及功能说明文档,定义了 3种结构,包括节点结 构、线性表结构、哈希表头结构,设计并实现了双缓冲结构下的哈希链表的节点创建、存储、 读取、删除、获取节点个数等操作,借鉴了内存池的相关特性在删除操作上使用了只清空节 点信息,而不释放内存的方式以提高写入速度,同时使用了内核态的锁机制,对公共数据区 进行数据保护,实现了数据的可靠操作。有益效果本发明采用了双哈希链表、双缓冲的存储形式,分离了两个不同速率模 块之间的交互,较以往的方法具有以下优点1、高度的实时性由于采用了双哈希双缓冲的存储结构,有效分离了两个模块对 同一数据区的访问,尤其是读写访问,使得在同一时刻两个模块能够并行访问数据缓冲区, 所以内核抓包模块可以完全独立地将数据写入其中一个哈希链表,不受其他模块的限制, 处理速度更快,实时性更好;2、访问效率高由于采用了哈希链表的存储结构,可以根据数据包的源IP地址和 端口号进行计算得出它的MD5值,从而可以直接获得该数据包应该存放的行号,同时在读 取的时候也可以直接获得行号,减少了扫描的时间,综合效率优于线性表结构;3、存储灵活性好采用了开地址的散列表结构,即在术端使用了链表的存储形式, 在不考虑存储空间的情况下可以认为它的存储空间是无限的,可以动态地对存储空间进行 扩容,删减。4、数据安全性好在哈希链表中,为了避免不必要的误操作,使用了锁机制,对内 核态下的存储结构中的数据进行了锁保护,即使是误操作,也不会对数据区的安全造成威 胁;5、增强了模块的独立性由于采用了双哈希链表、双缓冲机制,在同一时刻两个模 块(即内核抓包模块和内核数据处理模块)之间不存在互操作同一个哈希链表的情况,两个模块之间唯一相关就只有消息通信(即内核数据处理模块在判断哈希链表1中节点数为 O时通知内核抓包模块进行哈希链表切换的消息)这一个唯一关联了,模块耦合性小6、写入速度快由于借用了内存池的相关特性,在节点删除操作上并不是完全删 除节点(即释放节点的内存空间),而只是清空有效数据区,因此有效保证了内存的写入速度。
图1是阿瑞斯协议分析系统网络整体架构图,图2是哈希链表的体系结构图,图3是用于缓存报文的哈希链表整体框架图,图4是内核抓包模块对哈希链表的处理时序图,图5是内核数据处理模块对哈希链表的处理流程图,图6是双哈希链表工作状态转移图(注同一虚线框内表示哈希链表在同一时刻 的状态)。
具体实施例方式一、体系结构本发明主要包括了 3个功能模块,内核抓包模块、内核数据处理模块以及哈希链 表缓存模块,下面主要描述这3个模块的主要功能。1、内核抓包模块的功能内核抓包模块的主要功能是使用Linux内核态下的Netfilter来抓取并识别阿 瑞斯数据包,同时提取哈希搜索数据包作为伪造报文以及报文重定向的依据。其中该模块 识别出阿瑞斯的哈希搜索报文后,需要对该报文进行存储(即存入哈希链表),同时使用 NETLINK向用户态发送一个哈希请求(该哈希请求最后送往索引服务器,并由它返回搜索 结果)O2、内核数据处理模块的功能内核数据处理模块的主要功能是等待用户态发回的来自索引服务器的节点列表 报文,并提取哈希链表中的哈希搜索报文进行搜索结果的伪造,实现数据下载的可控性。3、哈希链表缓存模块的功能哈希链表缓存模块的主要功能是为上述的两个模块提供缓冲服务,使用双缓冲的 设计模式实现读写分离。图2是哈希链表的体系结构图,它包括了八项基本功能创建哈 希表头、创建节点、插入节点、删除节点、查询节点、获取节点总数目、销毁节点、销毁哈希链 表,其中插入节点、删除节点以及查询节点功能比较重要,下面主要描述这3个功能模块。 插入节点的功能是使用原始输入数据进行直接存储或者创建新节点,并存入哈希链表;删 除节点的功能是根据哈希值这个唯一标识对特定的节点内容进行清空,以实现尽量少地重 复申请释放内存;查询节点的功能是根据哈希值查找特定节点以实现节点读取的可操作 性。二、方法流程该部分详细说明发明内容各个部分的设计与实现
1、内核抓包模块的实现 该模块利用Linux内核态下提供的Netfilter中的钩子函数在钩子点NF_IP_PRE_ ROUTING处对过往的数据包进行分析,识别和处理的,主要是分析sk_bufT结构体(该结 构维护一个收到的或者要发送的网络包)中的相关数据,并对数据部分进行识别,以确定 是否是阿瑞斯报文,同时若判定是阿瑞斯的哈希搜索报文,则将搜索的哈希ID发送到用户 态,并将该结构体指针存入哈希链表当中去,等待内核数据处理模块对数据进行处理。2、内核数据处理模块的实现该模块主要是和上一模块进行配合工作,首先接收用户态发来的来自索引服务器 的哈希搜索节点列表,再在哈希链表中提取节点信息(即sk_buff的结构指针),进行搜索 结果返回报文的伪造,伪造成功后将该结果报文发送到阿瑞斯的客户端,以实现欺骗阿瑞 斯客户端,让阿瑞斯客户端将这些节点加入到下载节点列表中,实现内网下载的目的。
3、哈希链表缓存模块的实现该模块是上述两个模块交互的共享数据区,也可以称为数据缓冲区,由于内核抓 包模块运行在实时的抓包状态,不可能一直等待索引服务器搜索并返回结果信息,需单独 设计出内核数据处理模块,来等待索引服务器的返回消息。显然这两个模块之间的处理速 度和时间上是不同步的,所以还需设计一个共享区对数据进行暂时性的存储,实现数据的 共享。考虑数据存取的时间有效性及灵活性,所以把节点存取放在链表当中,整体上采用散 列表结构,和线性表结构比较,在查询上具有速度优势。该方法包括的步骤为步骤1)进行需求分析,对内核抓包模块需要存储的信息进行详细分析,并生成需 求分析文档;步骤2)根据步骤1的分析文档,理清内核抓包模块和内核数据处理模块的处理流 程以及他们之间的逻辑关系,并生成逻辑交互图以及功能说明文档;步骤3)根据步骤2的逻辑关系以及功能说明文档,设计并实现了内核抓包模块中 有关数据处理的相关步骤,并针对该模块对高速度和实时性的要求,专门设计基于哈希值 的哈希链表结构的存储模式,该存储结构具有存储的灵活性,较线性表存储结构而言,具有 更好的查询优势,并使用链表结构,可以随意增加哈希链表的容量;步骤4)根据步骤2的逻辑关系以及功能说明文档,设计并实现内核数据处理模 块,并使用内核态与用户态通信套接字,实现该模块与用户态的双向通信,以及对哈希链表 的读取操作,以及通知内核抓包模块完成双哈希链表之间的交互,提高模块与模块之间的 独立性;步骤5)根据步骤2的逻辑关系以及功能说明文档,定义3种结构,包括节点结 构、线性表结构、哈希表头结构,设计并实现双缓冲结构下的哈希链表的节点创建、存储、读 取、删除、获取节点个数操作,借鉴了内存池的相关特性在删除操作上使用只清空节点信 息,而不释放内存的方式以提高写入速度,同时使用内核态的锁机制,对公共数据区进行数 据保护,实现了数据的可靠操作。该模块使用双哈希链表的形式使得两个模块可以同一时刻并行操作数据缓冲区, 同时使用基于内存池的技术,在删除节点时并不立即释放节点的存储空间,而只进行关键 区域的清空,使得写入速度更快,并使用锁机制,对数据区进行保护,安全性更高。
权利要求
1. 一种阿瑞斯协议分析系统中双缓存的设计与实现方法,其特征在于该方法包括的步 骤为步骤1)进行需求分析,对内核抓包模块需要存储的信息进行详细分析,并生成需求分 析文档;步骤2)根据步骤1的分析文档,理清内核抓包模块和内核数据处理模块的处理流程以 及他们之间的逻辑关系,并生成逻辑交互图以及功能说明文档;步骤3)根据步骤2的逻辑关系以及功能说明文档,设计并实现了内核抓包模块中有关 数据处理的相关步骤,并针对该模块对高速度和实时性的要求,专门设计基于哈希值的哈 希链表结构的存储模式,该存储结构具有存储的灵活性,较线性表存储结构而言,具有更好 的查询优势,并使用链表结构,可以随意增加哈希链表的容量;步骤4)根据步骤2的逻辑关系以及功能说明文档,设计并实现内核数据处理模块,并 使用内核态与用户态通信套接字,实现该模块与用户态的双向通信,以及对哈希链表的读 取操作,以及通知内核抓包模块完成双哈希链表之间的交互,提高模块与模块之间的独立 性;步骤5)根据步骤2的逻辑关系以及功能说明文档,定义3种结构,包括节点结构、线 性表结构、哈希表头结构,设计并实现双缓冲结构下的哈希链表的节点创建、存储、读取、删 除、获取节点个数操作,借鉴了内存池的相关特性在删除操作上使用只清空节点信息,而不 释放内存的方式以提高写入速度,同时使用内核态的锁机制,对公共数据区进行数据保护, 实现了数据的可靠操作。
全文摘要
一种阿瑞斯协议分析系统中双缓存的设计与实现方法采用了哈希链表的存储结构,即开地址散列表的存储方式对抓取的数据包进行存取,并创新性地增加了统计信息头结构,缩短查询时间。此外,本发明借鉴了内存池的存取机制,在对节点进行删除操作时,只对节点内容进行清空,而不释放节点空间,有效地提高了存储的效率。同时基于散列表的存储方式,在查询速度以及存储空间方面本身就具有优势,可以有效减少查找范围,降低查找时间,动态地扩充容量。另外,采用的双哈希链表的双缓冲机制,使得共享数据的两个不同模块在同一时刻可以并行地操作共享缓冲区,互不干扰,有效地减少了模块间的协作,大大地增加了模块的独立性。
文档编号H04L29/06GK102143083SQ20111008574
公开日2011年8月3日 申请日期2011年4月2日 优先权日2011年4月2日
发明者周东旭, 徐鹤, 李致远, 王汝传, 赵丹, 邵星, 韩志杰 申请人:南京邮电大学