一种高速缓存与查询系统及查询方法

文档序号:26050538发布日期:2021-07-27 15:25阅读:91来源:国知局
一种高速缓存与查询系统及查询方法

本发明属于缓存与网络安全技术领域,具体地说,涉及一种高速缓存与查询系统及查询方法。



背景技术:

随着网络应用的迅速发展,各种网络攻击日益猖獗,网络安全问题受到越来越多的关注。为了有效地遏制这些网络攻击行为,网络管理员必须从大量的网络监测数据中实时地发现网络流量异常行为,例如,拒绝服务攻击(dos)、分布式拒绝服务攻击(ddos)和闪拥(flashcrowd)等,并及时采取相应的防御措施。

因此,为了能实时地发现网络流量异常行为,需要利用网络流量解析系统实时解析网络数据,在网络攻击发生时,及时地通知网络管理人员采取必要措施。网络流量解析系统在解析dns(domainnamesystem,域名系统)协议的过程中,会获得ip地址(internetprotocoladdress,互联网协议地址)和域名的对应关系,但是在之后解析http(hypertexttransferprotocol,超文本传输协议)协议时只能获得ip信息,因此,需要网络流量解析系统在获得ip和域名的对应关系时,将该对应关系存成键值对,并储存在内存中,之后在解析http协议时可以通过查询键值对来获得ip地址对应的域名,负责解析网络协议的cpu核心就是解析核。而网络流量解析系统对实时性要求极高,因此需要缓存和查询的速度极快,才能不影响正常的解析性能。而目前常规的lru缓存策略等缓存与查询方法无法满足多个解析核同时解析查询的需求。



技术实现要素:

为解决现有技术存在的上述缺陷,本发明提出了一种高速缓存与查询系统,该系统与网络流量解析系统联合使用,所述网络流量解析系统包括多个解析核和缓存核;

所述缓存核上设置缓存总表,用于汇总更新缓存信息,并定期发布增量更新信息;

所述解析核,用于解析由缓存核定期发布的增量更新信息;

该系统包括:缓存表设置模块、缓存表拆分模块和缓存替换模块;

所述缓存表设置模块,用于在每个解析核上单独设置一个带有单独内存块的解析缓存表;

所述缓存表拆分模块,用于将解析缓存表拆分为多个缓存子表;每个缓存子表缓存多个具有ip地址和域名一一对应的键值对;

所述缓存替换模块,用于对每个缓存子表进行缓存替换处理,获得高热度的缓存项。

作为上述技术方案的改进之一,所述缓存表拆分模块的具体过程如下:

将解析缓存表拆分为多个缓存子表,且将缓存表上设置的内存块划分为多个内存子块;每个缓存子表上设置一个内存子块,每个内存子块包括多个内存单元,每个内存单元缓存一个具有ip地址和域名一一对应的键值对,并按照域名的长度由长到短的顺序将多个键值对缓存在对应的内存单元中;

其中,ip地址和域名组成一一对应关系,并将该对应关系组成一个键值对;每个键值对缓存在大于其所需长度的最小内存单元中。

作为上述技术方案的改进之一,所述缓存子表包括:lru临时缓存区、lru回收缓存区和fifo常用缓存区;

所述lru临时缓存区,用于将第一次命中时的缓存项缓存至对应的内存子块,并存满;

所述fifo常用缓存区,用于对第二次命中缓存至lru临时缓存区的缓存项,进行位移操作,将第二次命中的缓存项从lru临时缓存区转移至fifo常用缓存区,并缓存至内存子块,直至存满;

所述lru回收缓存区,用于缓存从fifo常用缓存区淘汰的缓存项,并将其缓存至对应的内存子块。

作为上述技术方案的改进之一,所述系统还包括:缓存项热度计算模块和评估模块;

所述缓存项热度计算模块,用于在每个缓存项中记录本次命中时间,并与上次命中时间进行求差,计算出两次命中时间间隔,并根据该计算出的两次命中时间间隔,计算第n个缓存项的热度hn:

hn=hn-1-(tn-1-tn)2+1

其中,hn-1为第n-1个缓存项的热度;tn-1为缓存项中记录的第n-1次命中时间;tn为缓存项中记录的第n次命中时间;

所述评估模块,用于根据计算得到的第n个缓存项的热度hn,对当前的网络流量行为进行判断;

如果第n个缓存项的热度hn大于预先设定的热度安全阈值,则当前的网络流量行为判定为异常;

如果第n个缓存项的热度hn小于或等于预先设定的热度安全阈值,则当前的网络流量行为判定为正常。

本发明还提供了一种高速缓存与查询方法,该方法包括:

缓存表设置模块在每个解析核上单独设置一个带有单独内存块的解析缓存表;

缓存表拆分模块将解析缓存表拆分为多个缓存子表,每个缓存子表缓存多个具有ip地址和域名一一对应的键值对;

缓存替换模块对每个缓存子表进行缓存替换处理,获得高热度的缓存项。

作为上述技术方案的改进之一,所述缓存表拆分模块将解析缓存表拆分为多个缓存子表,每个缓存子表缓存多个具有ip地址和域名一一对应的键值对;其具体过程为:

所述缓存表拆分模块将解析缓存表拆分为多个缓存子表,且将缓存表上设置的内存块划分为多个内存子块;每个缓存子表上设置一个内存子块,每个内存子块包括多个内存单元,每个内存单元缓存一个具有ip地址和域名一一对应的键值对,并按照域名的长度由长到短的顺序将多个键值对缓存在对应的内存单元中;

其中,ip地址和域名组成一一对应关系,并将该对应关系组成一个键值对;每个键值对缓存在大于其所需长度的最小内存单元中。

作为上述技术方案的改进之一,所述缓存替换模块对每个缓存子表进行缓存替换处理,获得高热度的缓存项;其具体处理过程为:

缓存子表中的每个键值对作为一个缓存项,当某一个缓存项第一次命中时,先将该缓存项缓存至lru临时缓存区,缓存至lru临时缓存区的缓存项第二次命中时,则对缓存至lru临时缓存区的缓存项进行缓存位移操作,将该缓存项从lru临时缓存区转移到fifo常用缓存区,并将该缓存项作为高热度缓存项,根据该高热度缓存项中的ip地址和域名的对应关系,利用该缓存项的ip地址,获取对应的域名,作为最常用的域名;

该缓存至fifo常用缓存区的缓存项再次命中时,将该缓存项从fifo常用缓存区中删除,并将该缓存项先暂时存放在lru临时缓存区;

如果该缓存项再次命中时,则将该缓存项再次转移到fifo常用缓存区,并将该缓存项作为高热度缓存项,根据该高热度缓存项中的ip地址和域名的对应关系,利用该缓存项的ip地址,获取对应的域名,作为最常用的域名;

如果该缓存项没有命中时,则将该缓存项直接删除。

作为上述技术方案的改进之一,所述方法还包括:

缓存项热度计算模块在每个缓存项中记录本次命中时间,并与上次命中时间进行求差,计算出两次命中时间间隔,并根据该计算出的两次命中时间间隔,计算第n个缓存项的热度hn:

hn=hn-1-(tn-1-tn)2+1

其中,hn-1为第n-1个缓存项的热度;tn-1为缓存项中记录的第n-1次命中时间;tn为缓存项中记录的第n次命中时间;

评估模块根据计算得到的第n个缓存项的热度hn,对当前的网络流量行为进行判断;

如果第n个缓存项的热度hn大于预先设定的热度安全阈值,则当前的网络流量行为判定为异常;

如果第n个缓存项的热度hn小于或等于预先设定的热度安全阈值,则当前的网络流量行为判定为正常。

本发明与现有技术相比的有益效果是:

1、本发明的方法在解析流量的过程中把ip地址和域名缓存下来,能够解决由于网络流量解析系统在网络中是旁路设备,因此不能使用ip地址反向dns查询获得对应的域名的问题。而在日志查询过程中涉及到10亿条级别的日志,常规的逐条查询日志是不能在秒级完成;

2、本发明的方法隔离了查询和缓存操作,解析缓存表的更新过程不会影响解析核查询性能进而影响解析性能;解析缓存表拆分为多个缓存子表,既能增量发布更新,又可以避免加锁操作影响缓存性能;每个缓存子表又划分为lru临时缓存、lru回收缓存区和fifo常用缓存区;高热度的缓存项在fifo常用缓存区中不需要触发位移操作,节省了大量cpu运算资源,而且通过设置lru回收缓存区,保证了高热度缓存项不会被轻易淘汰。

附图说明

图1是本发明的一种高速缓存与查询方法的流程图。

具体实施方式

现结合附图对本发明作进一步的描述。

本发明提供了一种高速缓存与查询系统,该系统与网络流量解析系统联合使用,所述网络流量解析系统包括多个解析核和缓存核;所述解析核,用于解析有缓存核定期发布的增量更新信息;所述缓存核上设置缓存总表,用于汇总更新缓存信息,并定期发布增量更新信息;

其中,解析核在解析流量的过程中直接从自身配置的解析缓存表中获取ip地址和域名的更新缓存信息,以保证解析缓存表的更新不会影响解析核的正常解析速度,并将自身解析过程中所有缓存和查询操作都同步发送到缓存核,由缓存核上的缓存总表汇总更新信息后,再定期发布增量更新信息到每个解析核上,保证了解析缓存表的更新与查询操作的分离。其中,更新信息包括解析缓存表查询的信息和缓存总表更新的信息。

该系统包括:缓存表设置模块、缓存表拆分模块和缓存替换模块;

所述缓存表设置模块,用于在每个解析核上单独设置一个带有单独内存块的解析缓存表,通过在每个解析核上单独设置解析缓存表,实现缓存表更新与查询操作分离;

具体地,在多个负责流量解析的解析核上单独设置解析缓存表,解析核在解析流量的过程中直接从自身配置的解析缓存表中获取带有ip地址和域名的更新缓存信息,以保证缓存核上面的缓存总表更新时不会影响解析核的正常解析速度,并且解析核将自身解析过程中所有缓存和查询操作都同步发送到缓存核。

所述缓存表拆分模块,用于将解析缓存表拆分为多个缓存子表,且将缓存表上设置的内存块划分为多个内存子块;每个缓存子表上设置一个内存子块,每个内存子块包括多个内存单元,每个内存单元缓存一个具有ip地址和域名一一对应的键值对,并按照域名的长度由长到短的顺序将多个键值对缓存在对应的内存单元中;其中,ip地址和域名组成一一对应关系,并将该对应关系组成一个键值对;每个键值对缓存在大于其所需长度的最小内存单元中。

所述缓存替换模块,用于对每个缓存子表进行缓存替换处理,获得高热度的缓存项。

具体地,所述缓存子表包括:lru(最近最少使用)临时缓存区、lru回收缓存区和fifo(先入先出)常用缓存区;

缓存子表中的每个键值对作为一个缓存项,当某一个缓存项第一次命中时,先存放在第一次命中的lru临时缓存区,第二次命中时进行缓存位移操作,将该缓存项从lru临时缓存区转移到fifo常用缓存区,并将该缓存项作为高热度缓存项,根据该高热度缓存项中的ip地址和域名的对应关系,利用该缓存项的ip地址,获取对应的域名,作为最常用的域名,可以最大限度地减少缓存位移操作的次数;

为了防止缓存项热度很高却因为时间顺序被fifo常用缓存区淘汰的情况,且该缓存至fifo常用缓存区的缓存项再次命中时,不再进行位移操作,将该缓存项从fifo常用缓存区中删除,并将该缓存项先暂时存放在lru临时缓存区,而不是立刻将该缓存项删除,如果该缓存至lru临时缓存区的缓存项再次命中时,则将该缓存项再次转移到fifo常用缓存区,并将该缓存项作为高热度缓存项,根据该高热度缓存项中的ip地址和域名的对应关系,利用该缓存项的ip地址,获取对应的域名,作为最常用的域名;

如果该缓存项没有命中时,则将该缓存项直接删除。

所述系统还包括:缓存项热度计算模块和评估模块;

所述缓存项热度计算模块,用于在每个缓存项中记录本次命中时间,并与上次命中时间进行求差,计算出两次命中时间间隔,并根据该计算出的两次命中时间间隔,计算第n个缓存项的热度hn:

hn=hn-1-(tn-1-tn)2+1

其中,hn-1为第n-1个缓存项的热度;tn-1为缓存项中记录的第n-1次命中时间;tn为缓存项中记录的第n次命中时间;

所述评估模块,用于根据计算得到的第n个缓存项的热度hn,对当前的网络流量行为进行判断;

如果第n个缓存项的热度hn大于预先设定的热度安全阈值,则当前的网络流量行为判定为异常;

如果第n个缓存项的热度hn小于或等于预先设定的热度安全阈值,则当前的网络流量行为判定为正常。

其中,当两次命中时间间隔很短,且小于单位1时,缓存项的热度值会加上一个接近数值1的正数,缓存项的热度会不断积累,当时两次激活间间隔超过单位1时,缓存项的热度值会加上一个很大的负数,而当热度值为负数时,热度值会清零;可以使用极少的资源统计出该缓存项的热度(即活跃度),为网络管理员判断涉及dns的ddos、dns隧道等攻击类型时提供判断依据。

如图1所示,本发明还提供了一种高速缓存与查询方法,该方法包括:

缓存表设置模块在每个解析核上单独设置一个带有单独内存块的解析缓存表,通过在每个解析核上单独设置解析缓存表,实现缓存表更新与查询操作分离;

具体地,在每个负责流量解析的解析核上设置解析缓存表,解析核在解析流量的过程中直接从自身配置的解析缓存表中获取ip地址和域名的缓存信息,以保证缓存核上面单独设置的缓存总表更新时不会影响解析核的正常解析速度,并且解析核将自身解析过程中所有缓存和查询操作都同步发送到缓存核上的缓存总表,缓存核上的缓存总表汇总更新信息后再定期发布增量更新信息到各个解析核上,从而实现解析缓存表用于查询,缓存总表用于更新,保证了缓存表更新与查询操作的分离。解析核收到缓存核上设置的缓存总表定期发布的增量更新信息后,先对解析缓存表进行更新,并在解析缓存表空闲时,再对解析缓存表进行更新,以避免影响解析缓存表的正常使用。

在解析缓存表更新间隔内,会存在由于未更新导致缓存未命中情况,互联网中域名访问频率服从帕累托分布,高热度的缓存项(即域名)占绝大多数,低热度冷门的缓存项(域名)占比小于1%;而由于低热度的冷门缓存项因更新时间有间隔才会导致未命中的情况发生,且占比非常小,因此该未命中的情况可以忽略。

缓存表拆分模块将解析缓存表拆分为多个缓存子表,且将缓存表上设置的内存块划分为多个内存子块;每个缓存子表上设置一个内存子块,每个内存子块包括多个内存单元,每个内存单元缓存一个具有ip地址和域名一一对应的键值对,并按照域名的长度由长到短的顺序将多个键值对缓存在对应的内存单元中;其中,ip地址和域名组成一一对应关系,并将该对应关系组成一个键值对;每个键值对缓存在大于其所需长度的最小内存单元中。

缓存替换模块对每个缓存子表进行缓存替换处理,获得高热度的缓存项。

具体地,所述缓存子表包括:lru(最近最少使用)临时缓存区、lru回收缓存区和fifo(先入先出)常用缓存区;

缓存子表中的每个键值对作为一个缓存项,当某一个缓存项第一次命中时,先存放在第一次命中的lru临时缓存区,第二次命中时进行缓存位移操作,将该缓存项转移到fifo常用缓存区,并将该缓存项作为高热度缓存项,根据该高热度缓存项中的ip地址和域名的对应关系,利用该缓存项的ip地址,获取对应的域名,作为最常用的域名,可以最大限度地减少缓存位移操作的次数;

其中,设置lru临时缓存区、lru回收缓存区和fifo常用缓存区这三个缓存区的目的是为了防止缓存项热度很高却因为时间顺序被fifo常用缓存区淘汰的情况,且存放在fifo常用缓存区的该缓存项再次命中时,则不再进行位移操作,并将该缓存项从fifo常用缓存区中删除,同时将该缓存项先暂时存放在lru临时缓存区,而不是立刻删除,如果该缓存项再次命中时,则将该缓存项再次转移到fifo常用缓存区,并将该缓存项作为高热度缓存项,根据该高热度缓存项中的ip地址和域名的对应关系,利用该缓存项的ip地址,获取对应的域名,作为最常用的域名;

如果该缓存项没有命中时,则将该缓存项直接删除。

其中,每个缓存表上设置单独的内存块,因此,将整块的内存块划分多个内存子块,并对每个内存子块进行进一步划分为多个内存单元,每个内存单元的大小根据存放ip地址和域名组成的键值对的大小来划分,每收到一个新的ip地址和域名组成的键值对,就将其存放在大于其所需长度的最小内存单元中,当每个内存子块存满了多个ip地址和域名组成的键值对之后,再根据上述判断过程,将不常用的键值对缓存项进行删除和淘汰。

当ip和域名键值对作为缓存项第一命中时先存放在lru临时缓存区,lru临时缓存区存满了缓存项之后,则多余的缓存项先被删除,如果存放在lru临时缓存区内的缓存项再次被命中时,将该缓存项转移至fifo常用缓存区;其中,在fifo常用缓存区被删除的缓存项会被移动到lru回收缓存区,如果当lru回收缓存区中的缓存项再次被命中时,就会将该缓存项再次转移至fifo常用缓存区;而如果当lru回收缓存区中的缓存项一直没有被命中,并且被移动到缓存区尾部时,则删除和淘汰该缓存项。因为每次位移操作都要对整个缓存区进行加锁,是限制性能的最大瓶颈,为了尽可能减少对缓存项的位移操作,把最常用的ip和域名键值对放到fifo常用缓存区中,不再对其进行位移操作,只有当fifo缓存区满了之后移出到lru回收缓存区中。

所述方法还包括:缓存项热度计算模块在每个缓存项中记录本次命中时间,并与上次命中时间进行求差,计算出两次命中时间间隔,并根据该计算出的两次命中时间间隔,计算第n个缓存项的热度hn:

hn=hn-1-(tn-1-tn)2+1

其中,hn-1为第n-1个缓存项的热度;tn-1为缓存项中记录的第n-1次命中时间;tn为缓存项中记录的第n次命中时间;

评估模块根据计算得到的第n个缓存项的热度hn,对当前的网络流量行为进行判断;

如果第n个缓存项的热度hn大于预先设定的热度安全阈值,则当前的网络流量行为判定为异常;

如果第n个缓存项的热度hn小于或等于预先设定的热度安全阈值,则当前的网络流量行为判定为正常。

当两次命中时间间隔很短时,热度值会加上一个接近数值1的正数,热度会不断积累,当命中时间间隔超过单位1时,热度值会加上一个很大的负数,而当热度值为负数时,热度值会清零,可以使用极少的资源统计出该缓存项的热度(即活跃度),为网络管理员判断涉及dns的ddos、dns隧道等攻击类型时提供判断依据。

其中,如图1所示,每个缓存项的键(key)由哈希表来负责查找,哈希表中存放的是每个缓存项的哈希值,哈希表是根据哈希值排序的,因此哈希表中的顺序与热度无关,所以需要用双向链表来进行热度排序。而缓存项又以双向链表的形式串在一起,当缓存项被命中时,就会被移除或移动到缓存表的头部,使用双向链表可以方便进行缓存位移操作,图1中的下一个节点、上一个节点指的是该缓存项所指向其所在链表的后一项和前一项的指针。每个缓存项的键(key)由哈希表来负责查找,并返回查找结果(value),而缓存项又以双向链表的形式串在一起,当缓存项被命中时,就会被移除或移动到缓存表的头部,使用双向链表可以方便位移操作。图1中的连接线表示指针指向的内存地址。

如图1所示,每个负责解析网络流量的解析核上都备有一份解析缓存表,解析核得到ip查询域名的时候直接从自己核上的解析缓存表查询数据,解析核的查询和缓存信息都通过dpdk的无锁环形队列发送给缓存核,缓存核上的缓存总表根据这些信息不停的调整解析缓存表,汇总并更新解析缓存表,之后定期(比如一分钟)发布更新给解析核,发布过程为增量更新。其中,增量更新主要通过将解析缓存表拆分开来完成的,解析缓存表拆分成多个缓存子表还可以减少多个解析核同时发布信息时缓存核加锁的影响。通过这种将查询和缓存分开,能够保证多核平台网络流量解析系统能够快速读取缓存信息,不会影响解析性能,保证了实时性。

多核平台网络流量解析系统在解析dns协议的过程中会获得ip和域名的对应关系,但是在之后解析http等协议时只能获得ip信息,这就需要网络流量解析系统在获得ip和域名的对应关系时将其存成键值对放在内存中,之后在解析http等协议时可以查询键值来获得ip对应的域名。在多核平台网络流量解析系统中,不同tcp/udp流因其五元组的哈希不同被网络包分发核分给不同的解析核中,因此同一个用户的上网信息可能因为其协议不同、五元组的哈希不同会被分给不同的解析核中,这就导致对ip和域名的映射关系进行缓存时不能在每个解析核上单独缓存,而集中缓存又面临多个解析核的竞争问题,带来查询和缓存性能的极大受限。针对现有技术存在的以上问题,本发明的方法能够解决在多核平台网络流量解析系统中ip和域名的高速缓存和查询问题,

最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1