本发明涉及流量去重技术领域,尤其涉及一种流量去重方法和装置。
背景技术:
随着数据中心的日益庞大,以及越来越高的安全、性能、审计等要求,也对流量采集、分析设备性能带来了很大的挑战,在流量的采集过程中,大量重复的数据包的产生是不可避免的。重复的数据包在传输过程中会占用网络带宽,降低数据传输质量,终端做业务处理时也会降低业务效率,而且在存储时也浪费存储空间,并且对安全、分析、审计等设备造成不必要的性能压力。
传统的流量去重解决方案,通常是比较两个报文的负载或负载的哈希hash值是否相同来判断,但在网络传输过程中,网络数据包头会发生改变,在数据包结构发生改变的情况下就不能保证能够准确去除流量中的重复。
技术实现要素:
本发明提供了一种流量去重方法和装置,解决了现有技术在数据包结构发生改变的情况下,流量去重的准确率较低的技术问题。
本发明提供的一种流量去重方法,应用于ovs虚拟交换机,包括:
接收输入数据包;
计算所述输入数据包中的所有字段对应的总哈希值;
检测预置的冲突哈希表中是否存在与所述总哈希值相等的冲突哈希值;
若存在,则从所述冲突哈希值对应的数据包链表按预设链表顺序选取链表头部节点;
从所述输入数据包中提取待匹配字段,从所述链表头部节点中提取与所述待匹配字段的类型对应的冲突字段;
根据所述待匹配字段和所述冲突字段的比对结果,判断所述输入数据包与所述链表头部节点是否重复;
若判定所述输入数据包与所述链表头部节点重复,则删除所述链表头部节点。
可选地,所述从所述输入数据包中提取待匹配字段,从所述链表头部节点中提取与所述待匹配字段的类型对应的冲突字段的步骤,包括:
判断所述输入数据包的时间戳与所述链表头部节点的时间戳之差是否大于预设时间窗口;
若否,从所述输入数据包中提取待匹配字段,从所述链表头部节点中提取与所述待匹配字段的类型对应的冲突字段。
可选地,所述待匹配字段包括待匹配负载字段和待匹配mac地址字段,所述冲突字段包括冲突负载字段和冲突mac地址字段,所述根据所述待匹配字段和所述冲突字段的比对结果,判断所述输入数据包与所述链表头部节点是否重复的步骤,包括:
比对所述待匹配负载字段和所述冲突负载字段;
当所述待匹配负载字段和所述冲突负载字段相同时,比对所述待匹配mac地址字段和所述冲突mac地址字段是否相同;
若相同,则执行交换机匹配过程,判断所述输入数据包与所述链表头部节点是否重复;
若不相同,则执行路由匹配过程,判断所述输入数据包与所述链表头部节点是否重复。
可选地,所述待匹配字段还包括第一生存时间值ttl和输入数据包的源ip地址字段,所述冲突字段还包括第二ttl和链表头部节点的源ip地址字段,所述若相同,则执行交换机匹配过程,判断所述输入数据包与所述链表头部节点是否重复的步骤,包括:
若所述待匹配mac地址字段和所述冲突mac地址字段相同,则比对所述输入数据包的源ip地址字段和所述链表头部节点的源ip地址字段是否相同;
若相同,则比较所述第一ttl和所述第二ttl是否相等;
当所述第一ttl和所述第二ttl相等时,判断所述输入数据包的第一传输协议参数与所述链表头部节点的第二传输协议参数是否相同;
若所述输入数据包的第一传输协议参数与所述链表头部节点的第二传输协议参数相同,则判定所述输入数据包和所述链表头部节点重复。
可选地,所述待匹配字段还包括所述输入数据包的源ip地址字段,所述冲突字段还包括链表头部节点的源ip地址字段,所述若不相同,则执行路由匹配过程,判断所述输入数据包与所述链表头部节点是否重复的步骤,包括:
若所述待匹配mac地址字段和所述冲突mac地址字段相同,则比对所述输入数据包的源ip地址字段和所述链表头部节点的源ip地址字段是否相同;
当所述输入数据包的源ip地址字段和所述链表头部节点的源ip地址字段相同时,判断所述输入数据包的第一传输协议参数与所述链表头部节点的第二传输协议参数是否相同;
若所述输入数据包的第一传输协议参数与所述链表头部节点的第二传输协议参数相同,则判定所述输入数据包和所述链表头部节点重复。
可选地,所述方法还包括:
当所述输入数据包的源ip地址字段和所述链表头部节点的源ip地址字段不相同时,检测所述输入数据包的源ip地址字段是否处于源地址转换场景;
若是,则判断所述输入数据包的第一传输协议参数与所述链表头部节点的第二传输协议参数是否相同;
若所述输入数据包的第一传输协议参数与所述链表头部节点的第二传输协议参数相同,则判定所述输入数据包和所述链表头部节点重复。
可选地,所述方法还包括:
当所述输入数据包和所述链表头部节点不重复时,从所述数据包链表中选择新的链表头部节点;
返回所述从所述输入数据包中提取待匹配字段,从所述链表头部节点中提取与所述待匹配字段的类型对应的冲突字段的步骤;
若判定所述输入数据包与所述数据包链表中的全部冲突数据包均不重复,则将所述输入数据包添加到所述数据包链表中。
可选地,所述接收输入数据包的步骤,包括:
接收采用以太网协议的输入数据包。
可选地,所述方法还包括:
当所述输入数据包的时间戳与所述链表头部节点的时间戳之差大于所述预设时间窗口时,从所述数据包链表中删除所述链表头部节点;
将所述输入数据包添加到所述数据包链表中。
本发明还提供了一种流量去重装置,应用于ovs虚拟交换机,包括:
数据包接收模块,用于接收输入数据包;
总哈希值提取模块,用于计算所述输入数据包中的所有字段对应的总哈希值;
冲突哈希值检测模块,用于检测预置的冲突哈希表中是否存在与所述总哈希值相等的冲突哈希值;
链表头部节点选择模块,用于若存在,则从所述冲突哈希值对应的数据包链表按预设链表顺序选取链表头部节点
字段提取模块,用于从所述输入数据包中提取待匹配字段,从所述链表头部节点中提取与所述待匹配字段的类型对应的冲突字段;
重复比对模块,用于根据所述待匹配字段和所述冲突字段的比对结果,判断所述输入数据包与所述链表头部节点是否重复;
节点删除模块,用于若判定所述输入数据包与所述链表头部节点重复,则删除所述链表头部节点。
从以上技术方案可以看出,本发明具有以下优点:
通过ovs虚拟交换机接收输入数据包并计算所有字段对应的总哈希值,通过总哈希值和预置的冲突哈希表的比对,若是存在冲突哈希值,则从冲突哈希值对应的数据包链表中选择链表头部节点,再从输入数据包中提取待匹配字段,从链表头部节点中提取与待匹配字段类型对应的冲突字段,最后基于待匹配字段和冲突字段的比对结果判断输入数据包是否与链表头部节点出现重复,若是重复则删除输入数据包。从而能够在在数据包结构发生改变的情况下,更为准确地对数据包进行流量去重。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1为本发明实施例提供的一种流量去重方法的步骤流程图;
图2为本发明可选实施例提供的一种流量去重方法的步骤流程图;
图3为本发明实施例提供的一种冲突哈希表示意图;
图4为本发明实施例提供的一种时间窗口示意图;
图5为本发明实施例提供的交换机匹配过程的步骤流程图;
图6为本发明实施例提供的路由匹配过程的步骤流程图;
图7为本发明实施例提供的另一实施例的一种流量去重方法的步骤流程图;
图8为本发明实施例提供的一种流量去重装置的结构框图。
具体实施方式
本发明实施例提供了一种流量去重方法和装置,用于解决现有技术在数据包结构发生改变的情况下,流量去重的准确率较低的技术问题。
openvswitch dpdk是一种基于openflow流表的高性能开源交换机组件(简称ovs虚拟交换机),通过ovs精确的数据包头过滤转发机制,可作为流量分流器来使用,通过在x86服务器上跑ovs即可做到传统tap分流设备的功能,但是ovs内部是没有流量去重功能实现,所以本发明能够在ovs开源基础上实现高性能的报文去重复功能。
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
请参阅图1,图1为本发明实施例提供的一种流量去重方法的步骤流程图。
本发明提供的一种流量去重方法,应用于ovs虚拟交换机,包括:
步骤101,接收输入数据包;
在本发明实施例中,由于现有的ovs虚拟交换机并不具备流量去重的功能,若是出现重复的报文可能会影响到后续对报文的处理,因此在ovs虚拟交换机启动后,接收输入数据包,以对输入数据包进行流量去重操作。
步骤102,计算所述输入数据包中的所有字段对应的总哈希值;
在具体实现中,哈希值在不同的情况下不会出现数据包相同的情况,为此首先需要对输入数据包的所有字段的总哈希值进行计算,进而判断是否与存在哈希值相同的情况。而为了降低哈希值的计算量,可以仅计算输入数据包中的负载报文的哈希值,以确定是否为同一个报文。
步骤103,检测预置的冲突哈希表中是否存在与所述总哈希值相等的冲突哈希值;
在本发明实施例中,为能够对总哈希值进行比对,在ovs虚拟机中配置有预置的冲突哈希表,其中包括了多个冲突哈希值。可以通过检测到冲突哈希表中存在与总哈希值对应的冲突哈希值,判断输入数据包是否是重复数据包或者出现哈希冲突。
哈希值指的是哈希函数(hashfunction)把消息或数据压缩而成的摘要或者索引,使得数据量变小,将数据的格式固定下来,以表示和所记录数据之间的对应关系。
哈希冲突指的是不同的数据包算出的哈希值相同。
步骤104,若存在,则从所述冲突哈希值对应的数据包链表按预设链表顺序选取链表头部节点;
在具体实现中,每个冲突哈希值具有对应的链表结构,其链表结构中包括了数据包链表。因此若是冲突哈希表中存在与总哈希值相同的冲突哈希值,则可以从冲突哈希值对应的数据包链表中选择链表头部节点,可以按冲突数据包的顺序进行选择。
步骤105,从所述输入数据包中提取待匹配字段,从所述链表头部节点中提取与所述待匹配字段的类型对应的冲突字段;
由于输入数据包中的报文在网络中传输时其二、三、四层的包头的有些字段是肯定发生改变的,有些字段是不变的,而有些字可能变也有可能不变,而且这些变化依转发场景不同而不同。因此可以计算输入数据包所有字段的总哈希值。
为验证链表头部节点与输入数据包是否相等,可以通过从输入数据包中提取待匹配字段,例如共性字段;从链表头部节点中提取冲突字段,以便于后续验证数据包是否重复。
其中,共性字段指的是无论在何种传输场景中都不会改变的字段,例如源ip地址、目的ip地址、传输端口和传输协议等字段。
步骤106,根据所述待匹配字段和所述冲突字段的比对结果,判断所述输入数据包与所述链表头部节点是否重复;
在获取到待匹配字段和冲突字段后,对上述两种字段进行比对,基于比对结果判断输入数据包和链表头部节点是否重复。
步骤107,若判定所述输入数据包与所述链表头部节点重复,则删除所述链表头部节点。
在本发明实施例中,通过ovs虚拟交换机接收输入数据包并计算所有字段对应的总哈希值,通过总哈希值和预置的冲突哈希表的比对,若是存在冲突哈希值,则从冲突哈希值对应的数据包链表中选择链表头部节点,再从输入数据包中提取待匹配字段,从链表头部节点中提取与待匹配字段类型对应的冲突字段,最后基于待匹配字段和冲突字段的比对结果判断输入数据包是否与链表头部节点出现重复,若是重复则删除输入数据包。从而能够在在数据包结构发生改变的情况下,更为准确地对数据包进行流量去重。
请参阅图2,图2为本发明可选实施例提供的一种流量去重方法的步骤流程图。
本发明提供的一种流量去重方法,应用于ovs虚拟交换机,包括:
步骤201,接收输入数据包;
在本发明实施例中,为提高本方法的处理效率,可以选择性地接收采用特定协议的输入数据包,例如接收采用以太网协议的输入数据包。
步骤202,计算所述输入数据包中的所有字段对应的总哈希值;
步骤203,检测预置的冲突哈希表中是否存在与所述总哈希值相等的冲突哈希值;
步骤204,若存在,则从所述冲突哈希值对应的数据包链表按预设链表顺序选取链表头部节点;
在本发明实施例中,步骤202-204与上述步骤102-104的具体实现过程类似,在此不再赘述。
参见图3,图3示出了本发明实施例中的一种冲突哈希表示意图,其中包括环形队列kfifo,环形队列中包括冲突哈希值ring[key1]至ring[keymax],每个冲突哈希值各包括了各自的冲突数据包pkt1、pkt2、pkt3、pkt4、pkt5……pktn。在选择链表头部节点的过程中,可以从pktn一直选择到pkt1。
而在软件实现中,上述冲突哈希表的构建可以通过程序语言实现,例如:
在本发明的一个示例中,上述步骤105可以替换为以下步骤205-206:
步骤205,判断所述输入数据包的时间戳与所述链表头部节点的时间戳之差是否大于预设时间窗口;
参见图4,图4示出了本发明实施例的一种时间窗口示意图,其中包括pkt1、pkt2、pkt3、pkt4、pkt5……pktn,当输入数据包new到来时,获取输入数据包new的时间戳和链表头部节点pkti(i为正整数,1≤i≤n,n为正整数)的时间戳进行比较。
由于重复报文的产生是具有一定的时间局部性的,即一个重复的报文肯定不会在原报文产生很久之后生成,这就为报文去重在时间上提供了一个参考,即只比较在某一段设定的时间范围内是否有相同的报文,这一段时间称为时间窗口。
步骤206,若否,从所述输入数据包中提取待匹配字段,从所述链表头部节点中提取与所述待匹配字段的类型对应的冲突字段。
在本发明实施例中,通过检测输入数据包和链表头部节点之间的时间戳之差是否大于时间窗口,若小于或等于所述时间窗口,则可以继续提取待匹配字段和冲突字段进行进一步的比对。
可选地,所述方法还包括:
当所述输入数据包的时间戳与所述链表头部节点的时间戳之差大于所述预设时间窗口时,从所述数据包链表中删除所述链表头部节点;
将所述输入数据包添加到所述数据包链表中。
考虑不同的报文过多,哈希冲突会增加明显,目前我们保存一秒钟的报文进行去重,极端情况10g网卡,一秒有14880000个包保存下来,如果全是不同的话,则会产生很多hash冲突,所以需要引入时间窗口的概念,对这个冲突链表进行管理,超出时间窗口的要删除掉。而为了保证后续能够继续进行流量去重,可以将所述输入数据包添加到所述数据包链表中。
由于定位到链表的操作是o(1),只用在查找的时候进行当前链表的添加或删除操作即可,所以不会导致链表过长,遍历过多的情况。
步骤207,根据所述待匹配字段和所述冲突字段的比对结果,判断所述输入数据包与所述链表头部节点是否重复;
在本发明的另一个示例中,所述待匹配字段包括待匹配负载字段和待匹配mac地址字段,所述冲突字段包括冲突负载字段和冲突mac地址字段,所述步骤207可以包括以下子步骤s11-s14:
s11、比对所述待匹配负载字段和所述冲突负载字段;
s12、当所述待匹配负载字段和所述冲突负载字段相同时,比对所述待匹配mac地址字段和所述冲突mac地址字段是否相同;
在本发明实施例中,可以先比对待匹配负载字段和冲突负载字段是否相同,若相同则继续比对待匹配mac地址字段和冲突mac地址字段是否相同。
可选地,若是待匹配负载字段和冲突负载字段不相同,则判定所述输入数据包和链表头部节点不重复。
s13、若相同,则执行交换机匹配过程,判断所述输入数据包与所述链表头部节点是否重复;
进一步地,在待匹配mac地址字段和冲突mac地址字段相同时,可以执行交换机匹配过程,以判定输入数据包和冲突数据包的其他字段是否相同。
可选地,若待匹配mac地址字段和冲突mac地址字段不相同,则判定输入数据包和链表头部节点不重复。
在本发明可选实施例中,所述待匹配字段还包括第一生存时间值ttl和所述输入数据包的源ip地址字段,所述冲突字段还包括第二ttl和链表头部节点的源ip地址字段,所述步骤s13可以包括以下子步骤:
若所述待匹配mac地址字段和所述冲突mac地址字段相同,则比对所述输入数据包的源ip地址字段和所述链表头部节点的源ip地址字段是否相同;
若相同,则比较所述第一ttl和所述第二ttl是否相等;
当所述第一ttl和所述第二ttl相等时,判断所述输入数据包的第一传输协议参数与所述链表头部节点的第二传输协议参数是否相同;
若所述输入数据包的第一传输协议参数与所述链表头部节点的第二传输协议参数相同,则判定所述输入数据包和所述链表头部节点重复。
在本发明实施例中,传输协议参数包括了传输协议类型,当传输协议类型和参数都相同时,判定所述输入数据包和所述链表头部节点重复;当传输协议类型不同时,判定所述输入数据包和所述链表头部节点不重复。
参见图5,图5示出本发明实施例中的交换机匹配过程的步骤流程图,其中包括了以下步骤:
11、循环遍历冲突数据包;
12、比较ip地址是否相同;
13、若ip地址相同,则比较ttl和协议是否相同;若ip地址不同,则返回到循环遍历冲突数据包的步骤;
14、若所述ttl和协议都相同,则判断协议类型是什么;若存在一个不同,则返回到循环遍历冲突数据包的步骤;
15、若协议类型是tcp,则比较tcp参数是否相同;若协议类型是udp,则比较udp参数是否相同;
16、若参数相同,则确定冲突数据包重复,删除冲突数据包。
s14、若不相同,则执行路由匹配过程,判断所述输入数据包与所述链表头部节点是否重复。
可选地,所述待匹配字段还包括所述输入数据包的源ip地址字段,所述冲突字段还包括链表头部节点的源ip地址字段,所述步骤s14可以包括以下子步骤:
若所述待匹配mac地址字段和所述冲突mac地址字段相同,则比对所述输入数据包的源ip地址字段和所述链表头部节点的源ip地址字段是否相同;
当所述输入数据包的源ip地址字段和所述链表头部节点的源ip地址字段相同时,判断所述输入数据包的第一传输协议参数与所述链表头部节点的第二传输协议参数是否相同;
若所述输入数据包的第一传输协议参数与所述链表头部节点的第二传输协议参数相同,则判定所述输入数据包和所述链表头部节点重复。
在本发明实施例中,传输协议参数包括了传输协议类型,当传输协议类型和参数都相同时,判定所述输入数据包和所述链表头部节点重复;当传输协议类型不同时,判定所述输入数据包和所述链表头部节点不重复。
参见图6,图6示出本发明实施例中的路由匹配过程的步骤流程图,其中包括了以下步骤:
21、循环遍历冲突数据包;
22、比较ip地址是否相同;
23、若ip地址不同,则判断是否为源地址转换场景;若ip地址相同,则判断协议是否相同;
24、若是源地址转换场景,则判断协议是否相同;若不是,则返回到循环遍历冲突数据包的步骤;
25、若使用协议相同,则判断协议类型是什么;若使用协议不同,则返回到循环遍历冲突数据包的步骤;
26、若协议类型是tcp,则比较tcp参数是否相同;若协议类型是udp,则比较udp参数是否相同;
27、若参数相同,则确定冲突数据包重复,删除冲突数据包;若参数不同,则返回到循环遍历冲突数据包的步骤。
在本发明实施例中,由于路由匹配过程通常可能会涉及到源地址转换场景,但目的ip地址并不改变,因此为提高比对速率,此处的比较ip地址可以只比对源ip地址。
进一步地,所述步骤s14还包括:
当所述输入数据包的源ip地址字段和所述链表头部节点的源ip地址字段不相同时,检测所述输入数据包的源ip地址字段是否处于源地址转换场景;
若是,则判断所述输入数据包的第一传输协议参数与所述链表头部节点的第二传输协议参数是否相同;
若所述输入数据包的第一传输协议参数与所述链表头部节点的第二传输协议参数相同,则判定所述输入数据包和所述链表头部节点重复。
在本发明实施例中,传输协议参数包括了传输协议类型,当传输协议类型和参数都相同时,判定所述输入数据包和所述链表头部节点重复;当传输协议类型不同时,判定所述输入数据包和所述链表头部节点不重复。
在本发明可选实施例中,所述方法还包括:
当所述输入数据包和所述链表头部节点不重复时,从所述数据包链表中选择新的链表头部节点;
返回所述从所述输入数据包中提取待匹配字段,从所述链表头部节点中提取与所述待匹配字段的类型对应的冲突字段的步骤;
若判定所述输入数据包与所述数据包链表中的全部冲突数据包均不重复,则将所述输入数据包添加到所述数据包链表中。
在本发明实施例中,若存在某一个字段不同则可以判定所述输入数据包和链表头部节点不重复,此时若冲突哈希值对应的数据包链表中还存在冲突数据包,则继续选择新的链表头部节点,重新提取新的链表头部节点中的冲突字段,进行再次比对,直至找到重复的链表头部节点。
若是输入数据包和数据包链表中的全部冲突数据包均不重复时,将所述输入数据包添加到冲突哈希值对应的数据包链表中,作为最后一个链表头部节点。
步骤208,若判定所述输入数据包与所述链表头部节点重复,则删除所述链表头部节点。
在本发明实施例中,通过ovs虚拟交换机接收输入数据包并计算所有字段对应的总哈希值,通过总哈希值和预置的冲突哈希表的比对,若是存在冲突哈希值,则从冲突哈希值对应的数据包链表中选择链表头部节点,再从输入数据包中提取待匹配字段,从链表头部节点中提取与待匹配字段类型对应的冲突字段,最后基于待匹配字段和冲突字段的比对结果判断输入数据包是否与链表头部节点出现重复,若是重复则删除输入数据包。从而能够在在数据包结构发生改变的情况下,更为准确地对数据包进行流量去重。
参见图7,图7示出了本发明另一实施例的一种流量去重方法的步骤流程图。
其中包括:
31、启动ovs虚拟交换机中的pmd线程;
32、初始化哈希表,分配内存空间,其中哈希表可以设置为2000000,为哈希表中的每个冲突哈希值对应的数据包链表进行初始化;
33、循环轮询是否接收到输入数据包;
34、若是有,则调用接口dp_netdev_input进行输入;
35、对输入数据包进行逐个去重;
36、首先判断输入数据包是否为ipv4报文,若是则进入下一步骤;若否则返回对输入数据包进行逐个去重的步骤;
37、计算输入数据包的总哈希值;
38、判断是否从哈希表中找到冲突哈希值,若是则进入下一步骤;若否则提取更多信息加入到哈希表中,更新哈希表;
39、判断哈希值对应的链表中是否找到对应的冲突数据包,若是则进行下一步骤;若否则将输入数据包对应的哈希值插入哈希表,将输入数据包插入到链表,返回对输入数据包进行逐个去重的步骤;
310、判断冲突数据包是否超出时间窗口,若否则进行下一步骤;若是则删除超出时间窗口的冲突数据包,将输入数据包对应的哈希值插入哈希表,将输入数据包插入到链表,返回对输入数据包进行逐个去重的步骤;
311、判断负载哈希值是否相同,若相同则进行下一步骤;若否则返回到判断哈希值对应的链表中是否找到对应的冲突数据包的步骤;
312、判断mac地址是否相同,若是则执行路由匹配过程,判断输入数据包是否重复;若否则执行交换机匹配过程,判断输入数据包是否重复;
313、当找到重复的冲突数据包时,对冲突数据包进行删除去重;
314、当没有找到重复的冲突数据包时,返回到判断哈希值对应的链表中是否找到对应的冲突数据包的步骤。
参见图8,图8提供了本发明实施例中的一种流量去重装置的结构框图。
本发明实施例提供了一种流量去重装置,应用于ovs虚拟交换机,包括:
数据包接收模块801,用于接收输入数据包;
总哈希值提取模块802,用于计算所述输入数据包中的所有字段对应的总哈希值;
冲突哈希值检测模块803,用于检测预置的冲突哈希表中是否存在与所述总哈希值相等的冲突哈希值;
链表头部节点选择模块804,用于若存在,则从所述冲突哈希值对应的数据包链表按预设链表顺序选取链表头部节点
字段提取模块805,用于从所述输入数据包中提取待匹配字段,从所述链表头部节点中提取与所述待匹配字段的类型对应的冲突字段;
重复比对模块806,用于根据所述待匹配字段和所述冲突字段的比对结果,判断所述输入数据包与所述链表头部节点是否重复;
节点删除模块807,用于若判定所述输入数据包与所述链表头部节点重复,则删除所述链表头部节点。
可选地,所述字段提取模块805包括:
超时判断子模块,用于判断所述输入数据包的时间戳与所述链表头部节点的时间戳之差是否大于预设时间窗口;
字段提取子模块,用于若否,从所述输入数据包中提取待匹配字段,从所述链表头部节点中提取与所述待匹配字段的类型对应的冲突字段。
可选地,所述待匹配字段包括待匹配负载字段和待匹配mac地址字段,所述冲突字段包括冲突负载字段和冲突mac地址字段,所述重复比对模块806包括:
负载字段比对子模块,用于比对所述待匹配负载字段和所述冲突负载字段;
mac地址字段比对子模块,用于当所述待匹配负载字段和所述冲突负载字段相同时,比对所述待匹配mac地址字段和所述冲突mac地址字段是否相同;
交换机匹配过程执行子模块,用于若相同,则执行交换机匹配过程,判断所述输入数据包与所述链表头部节点是否重复;
路由匹配过程执行子模块,用于若不相同,则执行路由匹配过程,判断所述输入数据包与所述链表头部节点是否重复。
可选地,所述待匹配字段还包括第一生存时间值ttl和输入数据包的源ip地址字段,所述冲突字段还包括第二ttl和链表头部节点的源ip地址字段,所述交换机匹配过程执行子模块包括:
第一源ip地址比对单元,用于若所述待匹配mac地址字段和所述冲突mac地址字段相同,则比对所述输入数据包的源ip地址字段和所述链表头部节点的源ip地址字段是否相同;
ttl比较单元,用于若相同,则比较所述第一ttl和所述第二ttl是否相等;
第一传输参数判断单元,用于当所述第一ttl和所述第二ttl相等时,判断所述输入数据包的第一传输协议参数与所述链表头部节点的第二传输协议参数是否相同;
第一重复判定单元,用于若所述输入数据包的第一传输协议参数与所述链表头部节点的第二传输协议参数相同,则判定所述输入数据包和所述链表头部节点重复。
可选地,所述待匹配字段还包括所述输入数据包的源ip地址字段,所述冲突字段还包括链表头部节点的源ip地址字段,所述路由匹配过程执行子模块包括:
第二源ip地址比对单元,用于若所述待匹配mac地址字段和所述冲突mac地址字段相同,则比对所述输入数据包的源ip地址字段和所述链表头部节点的源ip地址字段是否相同;
第二传输参数判断单元,用于当所述输入数据包的源ip地址字段和所述链表头部节点的源ip地址字段相同时,判断所述输入数据包的第一传输协议参数与所述链表头部节点的第二传输协议参数是否相同;
第二重复判定单元,用于若所述输入数据包的第一传输协议参数与所述链表头部节点的第二传输协议参数相同,则判定所述输入数据包和所述链表头部节点重复。
可选地,所述路由匹配过程执行子模块还包括:
场景检测单元,用于当所述输入数据包的源ip地址字段和所述链表头部节点的源ip地址字段不相同时,检测所述输入数据包的源ip地址字段是否处于源地址转换场景;
第三传输参数判断单元,用于若是,则判断所述输入数据包的第一传输协议参数与所述链表头部节点的第二传输协议参数是否相同;
第三重复判定单元,用于若所述输入数据包的第一传输协议参数与所述链表头部节点的第二传输协议参数相同,则判定所述输入数据包和所述链表头部节点重复。
可选地,所述装置还包括:
重选模块,用于当所述输入数据包和所述链表头部节点不重复时,从所述数据包链表中选择新的链表头部节点;
返回模块,用于返回所述从所述输入数据包中提取待匹配字段,从所述链表头部节点中提取与所述待匹配字段的类型对应的冲突字段的步骤;
第一添加模块,用于若判定所述输入数据包与所述数据包链表中的全部冲突数据包均不重复,则将所述输入数据包添加到所述数据包链表中。
可选地,所述数据包接收模块801包括:
以太网数据包接收子模块,用于接收采用以太网协议的输入数据包。
可选地,所述装置还包括:
冲突包删除模块,用于当所述输入数据包的时间戳与所述链表头部节点的时间戳之差大于所述预设时间窗口时,从所述数据包链表中删除所述链表头部节点;
第二添加模块,用于将所述输入数据包添加到所述数据包链表中。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
1.一种流量去重方法,其特征在于,应用于ovs虚拟交换机,包括:
接收输入数据包;
计算所述输入数据包中的所有字段对应的总哈希值;
检测预置的冲突哈希表中是否存在与所述总哈希值相等的冲突哈希值;
若存在,则从所述冲突哈希值对应的数据包链表按预设链表顺序选取链表头部节点;
从所述输入数据包中提取待匹配字段,从所述链表头部节点中提取与所述待匹配字段的类型对应的冲突字段;
根据所述待匹配字段和所述冲突字段的比对结果,判断所述输入数据包与所述链表头部节点是否重复;
若判定所述输入数据包与所述链表头部节点重复,则删除所述链表头部节点。
2.根据权利要求1所述的流量去重方法,其特征在于,所述从所述输入数据包中提取待匹配字段,从所述链表头部节点中提取与所述待匹配字段的类型对应的冲突字段的步骤,包括:
判断所述输入数据包的时间戳与所述链表头部节点的时间戳之差是否大于预设时间窗口;
若否,从所述输入数据包中提取待匹配字段,从所述链表头部节点中提取与所述待匹配字段的类型对应的冲突字段。
3.根据权利要求2所述的流量去重方法,其特征在于,所述待匹配字段包括待匹配负载字段和待匹配mac地址字段,所述冲突字段包括冲突负载字段和冲突mac地址字段,所述根据所述待匹配字段和所述冲突字段的比对结果,判断所述输入数据包与所述链表头部节点是否重复的步骤,包括:
比对所述待匹配负载字段和所述冲突负载字段;
当所述待匹配负载字段和所述冲突负载字段相同时,比对所述待匹配mac地址字段和所述冲突mac地址字段是否相同;
若相同,则执行交换机匹配过程,判断所述输入数据包与所述链表头部节点是否重复;
若不相同,则执行路由匹配过程,判断所述输入数据包与所述链表头部节点是否重复。
4.根据权利要求3所述的流量去重方法,其特征在于,所述待匹配字段还包括第一生存时间值ttl和输入数据包的源ip地址字段,所述冲突字段还包括第二ttl和链表头部节点的源ip地址字段,所述若相同,则执行交换机匹配过程,判断所述输入数据包与所述链表头部节点是否重复的步骤,包括:
若所述待匹配mac地址字段和所述冲突mac地址字段相同,则比对所述输入数据包的源ip地址字段和所述链表头部节点的源ip地址字段是否相同;
若相同,则比较所述第一ttl和所述第二ttl是否相等;
当所述第一ttl和所述第二ttl相等时,判断所述输入数据包的第一传输协议参数与所述链表头部节点的第二传输协议参数是否相同;
若所述输入数据包的第一传输协议参数与所述链表头部节点的第二传输协议参数相同,则判定所述输入数据包和所述链表头部节点重复。
5.根据权利要求3所述的流量去重方法,其特征在于,所述待匹配字段还包括所述输入数据包的源ip地址字段,所述冲突字段还包括链表头部节点的源ip地址字段,所述若不相同,则执行路由匹配过程,判断所述输入数据包与所述链表头部节点是否重复的步骤,包括:
若所述待匹配mac地址字段和所述冲突mac地址字段相同,则比对所述输入数据包的源ip地址字段和所述链表头部节点的源ip地址字段是否相同;
当所述输入数据包的源ip地址字段和所述链表头部节点的源ip地址字段相同时,判断所述输入数据包的第一传输协议参数与所述链表头部节点的第二传输协议参数是否相同;
若所述输入数据包的第一传输协议参数与所述链表头部节点的第二传输协议参数相同,则判定所述输入数据包和所述链表头部节点重复。
6.根据权利要求5所述的流量去重方法,其特征在于,所述方法还包括:
当所述输入数据包的源ip地址字段和所述链表头部节点的源ip地址字段不相同时,检测所述输入数据包的源ip地址字段是否处于源地址转换场景;
若是,则判断所述输入数据包的第一传输协议参数与所述链表头部节点的第二传输协议参数是否相同;
若所述输入数据包的第一传输协议参数与所述链表头部节点的第二传输协议参数相同,则判定所述输入数据包和所述链表头部节点重复。
7.根据权利要求4或5或6所述的流量去重方法,其特征在于,所述方法还包括:
当所述输入数据包和所述链表头部节点不重复时,从所述数据包链表中选择新的链表头部节点;
返回所述从所述输入数据包中提取待匹配字段,从所述链表头部节点中提取与所述待匹配字段的类型对应的冲突字段的步骤;
若判定所述输入数据包与所述数据包链表中的全部冲突数据包均不重复,则将所述输入数据包添加到所述数据包链表中。
8.根据权利要求1所述的流量去重方法,其特征在于,所述接收输入数据包的步骤,包括:
接收采用以太网协议的输入数据包。
9.根据权利要求2所述的流量去重方法,其特征在于,所述方法还包括:
当所述输入数据包的时间戳与所述链表头部节点的时间戳之差大于所述预设时间窗口时,从所述数据包链表中删除所述链表头部节点;
将所述输入数据包添加到所述数据包链表中。
10.一种流量去重装置,其特征在于,应用于ovs虚拟交换机,包括:
数据包接收模块,用于接收输入数据包;
总哈希值提取模块,用于计算所述输入数据包中的所有字段对应的总哈希值;
冲突哈希值检测模块,用于检测预置的冲突哈希表中是否存在与所述总哈希值相等的冲突哈希值;
链表头部节点选择模块,用于若存在,则从所述冲突哈希值对应的数据包链表按预设链表顺序选取链表头部节点
字段提取模块,用于从所述输入数据包中提取待匹配字段,从所述链表头部节点中提取与所述待匹配字段的类型对应的冲突字段;
重复比对模块,用于根据所述待匹配字段和所述冲突字段的比对结果,判断所述输入数据包与所述链表头部节点是否重复;
节点删除模块,用于若判定所述输入数据包与所述链表头部节点重复,则删除所述链表头部节点。
技术总结