一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于RFC的报文分类方法、装置、计算机设备和存储介质

2022-07-13 02:59:16 来源:中国专利 TAG:

基于rfc的报文分类方法、装置、计算机设备和存储介质
技术领域
1.本技术涉及网络数据传输技术领域,特别是涉及一种基于rfc的报文分类方法、装置、计算机设备和存储介质。


背景技术:

2.随着网络的不断发展,网络数据的传输量和传输速度在不断提升。人们对网络数据传输的需求变得越来越高,使得更加复杂的协议、更加高效的算法不断被提出。包分类是高速网络环境中的一种重要技术,它存在于路由器、防火墙、交换机等多种网络设备中,实现对经过这些设备的数据包进行分类处理的功能。
3.传统方法以可以获得所有字段为前提,即使是精度有损失的近似方案,也会主动放弃某些字段而追求更高的效率,然而,字段的获取在某些场景中无法保证,在一些自主网络中,一些字段的值可能来自于某些外部设备(比如传感器、探测器),这些外部设备从外界环境、受到干扰的无线信号等不稳定的信息来源获取信息,因此它们有时无法获得有效的信息,导致某些字段值是非法的(如“undefined”或“?”)。面临只有部分字段已知的包分类问题,决策树和元组空间无法解决,因为决策树和元组空间都需要对缺失的字段进行分类讨论,并对每一种情况进行一次分类,效率将非常低下。而近年来的近似方案则是评估计算成本并通过主动放弃字段降低资源消耗,并不适用于被动的字段缺失场景。rfc(recursive flow classification,递归流)算法首先进行各个字段的单约束匹配,rfc只需要忽略缺失的字段,其工作仍然可以正常进行,直到由于字段缺失而无法继续综合结果时,rfc会停止工作。也就是说,rfc算法的工作效率不会受到字段缺失影响,它可以很快地给出一个中间输出结果。v.demianiuk等人也发现了这一问题,并于2021年发表了“pcl:packet classification with limited knowledge(基于有限知识的包分类技术)”一文。在文章中,提到字段缺失的处理方案,使用一个类似于rfc的方法来处理缺失的字段,提出通过流(flow)来猜测中间输出结果的方法。通过记录最近通过的流,来猜测一个报文可能属于哪一个流,以此利用流中其他报文的内容来恢复该报文缺失的部分。然而,pcl模型并没有给出在流的数量非常大的情况下如何进行高效的存储和查找,且他们的源码实现是实验性的,无法运用于真实的在线网络。


技术实现要素:

4.基于此,有必要针对上述技术问题,提供一种基于rfc的报文分类方法、装置、计算机设备和存储介质。
5.一种基于rfc的报文分类方法,所述方法包括:
6.获取待分类的报文序列;
7.通过rfc处理所述报文序列,得到报文序列中每个报文的位图格式的中间输出结果;
8.将所述中间输出结果输入流信息库,根据中间输出结果命中所述流信息库中流的
数量,得到所述报文序列的报文命中结果;
9.通过缓冲区对所述报文命中结果中所对应的报文进行二次分类,得到分类成功结果集合和分类失败结果集合;
10.根据所述分类成功结果集合更新所述流信息库,通过报文生成器处理所述分类失败结果集合,得到重传报文;所述重传报文的优先级大于所述报文序列中未分类的报文。
11.在其中一个实施例中,还包括:标识所述报文命中结果中未命中任何流的报文,得到第一标识报文,并存入缓冲区;当所述报文命中结果中仅命中一个流的报文在所述流中的报文序号小于阈值时,得到第二标识报文,并存入缓冲区;提取所述报文命中结果中命中多个流的报文在对应每一流中的报文序号,当报文的报文序号与对应流的最大分类序号的差值绝对值在阈值范围内时,记录所述流的流序号;将缓冲区中的报文与每一新记录的流匹配,得到所述报文序列的报文匹配结果,所述匹配结果包括匹配成功结果和匹配失败结果;通过缓冲区对所述匹配成功结果中所对应的报文进行二次分类,得到分类成功结果集合和分类失败结果集合。
12.在其中一个实施例中,还包括:当报文的报文序号与对应流的最大分类序号的差值绝对值在阈值范围内时,如果所述报文未命中任何流,则按照未命中任何流的报文处理;如果所述报文仅命中一个流,则按照仅命中一个流的报文处理;如果所述报文仍然命中多个流,则得到第一分类失败结果。
13.在其中一个实施例中,还包括:对所述匹配成功结果进行二次分类,当所述报文不曾命中流时,得到第一分类成功结果;当所述报文曾命中至少1个流时,且当其中一流所述报文序号与最大分类序号的差值绝对值在阈值范围内时,得到第二分类成功结果;当所述报文曾命中至少1个流时,且当其中一流所述报文序号与最大分类序号的差值绝对值不在阈值范围内时,得到第二分类失败结果。
14.在其中一个实施例中,还包括:对所述匹配失败结果进行二次分类,设定最长等待时间,当所述最长等待时间达到最长流等待数时,且当所述报文不曾命中流时,得到第三分类失败结果;当所述最长等待时间达到最长流等待数时,且当所述报文曾命中唯一一个流时,得到第三分类成功结果;当所述最长等待时间达到最大报文等待数时,且当所述报文不曾命中流时,得到第四分类失败结果;当所述最长等待时间达到最大报文等待数时,且当所述报文曾命中流时,且当其中一流所述报文序号与最大分类序号的差值绝对值在阈值范围内时,得到第五分类成功结果;当所述最长等待时间达到最大报文等待数时,且当所述报文曾命中流时,且当其中一流所述报文序号与最大分类序号的差值绝对值不在阈值范围内时,得到第五分类失败结果。
15.在其中一个实施例中,还包括:当所述中间输出结果中1的数量小于0的数量时,将中间输出结果输入流信息库中的树模型,所述树模型的每一层对应中间输出结果位图中的一位;根据所述树模型搜索所述中间输出结果,每当访问到一个第l层的子节点时,读取叶子结点中记录的流信息,所述流信息包括流序号和所述流的最大分类序号,其中,l为中间输出结果位图的长度;如果没有读取任何流信息,则得到未命中任何流的报文,如果有一条流被命中,得到仅命中一个流的报文,如果有多条流被命中,得到命中多个流的报文。
16.在其中一个实施例中,还包括:当所述中间输出结果中1的数量大于0的数量时,将中间输出结果输入流信息库中的表模型;所述表模型是包括多个列表的数组,总列表数为
中间输出结果位图的长度l,每一个列表对应所述位图中的一位;构建长度为当前已记录流的总数的命中标记位图,初始化所述命中标记位图中的每一位为1;搜索所述命中标记位图,记录所述命中标记位图中的0位,访问0位对应于表模型中的列表,得到所述列表中的流序号,并将每一所述流序号对应于所述命中标记结果的位置更新为0位;查看更新后的命中标记位图中1的个数,如果全部是0,得到未命中任何流的报文,如果有一个1,得到仅命中一个流的报文,如果有多个1,得到命中多个流的报文。
17.一种基于rfc的报文分类装置,所述装置包括:
18.报文序列获取模块,用于获取待分类的报文序列;
19.rfc处理模块,用于通过rfc处理所述报文序列,得到报文序列中每个报文的位图格式的中间输出结果;
20.报文命中模块,用于将所述中间输出结果输入流信息库,根据中间输出结果命中所述流信息库中流的数量,得到所述报文序列的报文命中结果;
21.二次分类模块,用于通过缓冲区对所述报文命中结果中所对应的报文进行二次分类,得到分类成功结果集合和分类失败结果集合;
22.报文重传模块,用于根据所述分类成功结果集合更新所述流信息库,通过报文生成器处理所述分类失败结果集合,得到重传报文;所述重传报文的优先级大于所述报文序列中未分类的报文。
23.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
24.获取待分类的报文序列;
25.通过rfc处理所述报文序列,得到报文序列中每个报文的位图格式的中间输出结果;
26.将所述中间输出结果输入流信息库,根据中间输出结果命中所述流信息库中流的数量,得到所述报文序列的报文命中结果;
27.通过缓冲区对所述报文命中结果中所对应的报文进行二次分类,得到分类成功结果集合和分类失败结果集合;
28.根据所述分类成功结果集合更新所述流信息库,通过报文生成器处理所述分类失败结果集合,得到重传报文;所述重传报文的优先级大于所述报文序列中未分类的报文。
29.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
30.获取待分类的报文序列;
31.通过rfc处理所述报文序列,得到报文序列中每个报文的位图格式的中间输出结果;
32.将所述中间输出结果输入流信息库,根据中间输出结果命中所述流信息库中流的数量,得到所述报文序列的报文命中结果;
33.通过缓冲区对所述报文命中结果中所对应的报文进行二次分类,得到分类成功结果集合和分类失败结果集合;
34.根据所述分类成功结果集合更新所述流信息库,通过报文生成器处理所述分类失败结果集合,得到重传报文;所述重传报文的优先级大于所述报文序列中未分类的报文。
35.上述基于rfc的报文分类方法、装置、计算机设备和存储介质,通过获取待分类的报文序列,并通过rfc处理报文序列,可以得到报文序列中每个报文的位图格式的中间输出结果,就可以通过位图来表征流,可以提高流的存储和匹配效率,将中间输出结果输入流信息库,根据中间输出结果命中流信息库中流的数量,得到报文序列的报文命中结果,通过缓冲区对报文命中结果中所对应的报文进行二次分类,就可以通过流信息库结合缓冲机制对缺失字段的报文进行恢复并输出匹配结果,进而得到分类成功结果集合和分类失败结果集合,根据分类成功结果集合更新流信息库,通过报文生成器处理分类失败结果集合,完成对报文序列的分类。本发明实施例,能够接收包含任何可能已知字段组合的报文,并尝试在有效时间内,输出一个最佳的匹配结果,并且能够在允许重传的网络中高效地工作。
附图说明
36.图1为一个实施例中基于rfc的报文分类方法的流程示意图;
37.图2为一个具体实施例中基于rfc的报文分类方法的流程示意图;
38.图3为一个实施例中树模型的结构示意图;
39.图4为一个实施例中表模型的结构示意图;
40.图5为另一个实施例中基于rfc的报文分类方法的结构示意图;
41.图6为一个实施例中重传机制的工作流程示意图;
42.图7为一个实施例中实验测试的结果示意图;
43.图8为一个实施例中基于rfc的报文分类装置的结构框图;
44.图9为一个实施例中计算机设备的内部结构图。
具体实施方式
45.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。
46.在一个实施例中,如图1所示,提供了一种基于rfc的报文分类方法,包括以下步骤:
47.步骤102,获取待分类的报文序列。
48.通过rfc处理所述报文序列,得到报文序列中每个报文的位图格式的中间输出结果。待分类的报文序列包括缺失字段的报文。通过将缺失字段的报文输入rfc,得到以bitmap表示的中间输出结果,再将该中间输出结果输入流信息库,结合缓冲机制对缺失字段的报文进行恢复并输出匹配结果。另一方面,所有正常的报文将会按照rfc的正常流程进行分类,其分类结果将作为流信息输入流信息库,对其进行更新,用于后续报文的分类。
49.步骤104,通过rfc处理报文序列,得到报文序列中每个报文的位图格式的中间输出结果。
50.rfc能够读入报文中的任意字段组合,并输出一个表征其可能命中哪些规则的位图(bitmap),将rfc算法的接受接口增加一个判断:当输入某个单字段处理模块的值不在合理范围内时,该处理模块将直接给出“缺失”并传递至下一层,各字段合理范围为:ip字段的各节为0-2
16
,port字段各为1-2
16
,协议字段为0-256。对于所有合理字段,将按照rfc算法的
正常流程进行。在应用本发明方法的实施例中,共有ip_src_low、ip_src_high、ip_dst_low、ip_dst_high、port_src、port_dst、proto 7个字段,每一字段对应一个单约束匹配流程,只要输入中包含至少一个缺失的字段,rfc就无法得出最终结果,而是得到多个(至少2个)中间结果后就停止,具体与中间结果的数量和输出位置与缺失的字段组合有关,将这些中间结果bitmap按位做与,得到rfc的中间输出结果。由于将所有已知信息都合并到了一起,所以能够最大程度地利用已知信息,该中间输出结果有以下特点:当中间结果某一位是“1”时,说明该报文可能命中某条规则,由于约束不完整,并不能确定其实际是否能命中,但该中间结果某一位是“0”时,则一定不能命中对应的规则。
51.步骤106,将中间输出结果输入流信息库,根据中间输出结果命中流信息库中流的数量,得到报文序列的报文命中结果。
52.流信息库包括位图存储搜索模型,位图存储搜索模型包括树模型和表模型,利用bitmap来表征流,并通过观察bitmap特征,提出了两个高效处理流信息的模型——树模型和表模型,分别用于处理不同特征的bitmap信息,就可以提高流的存储和匹配效率。流信息库能够存储流信息,同一个流(flow)中的报文将拥有相同的ip、端口、协议分类信息,其中任何一个报文的分类信息将可以代表整条流的报文分类信息,一旦获取到一个正常的报文,就可以依据其中的分类信息记录它所在的流,通过记录最近通过的流,来猜测一个报文可能属于哪一个流,以此利用流中其他报文的内容来恢复该报文缺失的部分。
53.步骤108,通过缓冲区对报文命中结果中所对应的报文进行二次分类,得到分类成功结果集合和分类失败结果集合。
54.不命中任何流或命中多个流的报文将被视为恢复失败,但事实上,这一部分报文仍然有成功分类的机会,不命中任何流的报文通常是一个流当中的初始报文,其对应的流目前还没有正常报文出现,导致该流还没有被记录,同时,命中多个流的报文有可能是因为约束不足而导致缺失部分无法进一步分类,但可以通过其在流中的报文序号和其命中的流的最大分类序号的差值来猜测其是否可能属于该流,比如,一个报文是某个流中的第30个报文,而流a中目前已知的最大序号的报文是5,流b中目前已知最大序号的报文是120,则认为当前报文属于这两个流的几率很小,因此,通过缓冲区(buffer)存储报文进行二次分类,可以进一步提升准确率。
55.步骤110,根据分类成功结果集合更新流信息库,通过报文生成器处理分类失败结果集合,得到重传报文。
56.重传报文的优先级大于报文序列中未分类的报文。为了使本发明方法的准确率接近于100%,并且无论报文包含怎样的字段组合都能够高效地给出一个结果(即使结果是“分类失败”)。对于所有分类失败的报文,使用报文生成器来重新生成,然后将其放置到待处理报文队列的最前面,优先处理。另一方面,部分协议允许发送方重传丢失的报文,本发明方法能够合理地接受并处理重传报文,满足真实的在线网络需求,能够在允许重传的网络中高效地工作。
57.上述基于rfc的报文分类方法中,通过获取待分类的报文序列,并通过rfc处理报文序列,可以得到报文序列中每个报文的位图格式的中间输出结果,就可以通过位图来表征流,可以提高流的存储和匹配效率,将中间输出结果输入流信息库,根据中间输出结果命中流信息库中流的数量,得到报文序列的报文命中结果,通过缓冲区对报文命中结果中所
对应的报文进行二次分类,就可以通过流信息库结合缓冲机制对缺失字段的报文进行恢复并输出匹配结果,进而得到分类成功结果集合和分类失败结果集合,根据分类成功结果集合更新流信息库,通过报文生成器处理分类失败结果集合,完成对报文序列的分类。本发明实施例,能够接收包含任何可能已知字段组合的报文,在有效时间内,输出一个最佳的匹配结果,并且能够在允许重传的网络中高效地工作。
58.在一个具体实施例中,如图2所示,提供了一种基于rfc的报文分类方法的流程示意图,流程包括:
59.s1:通过rfc处理可能存在的字段缺失,区分缺失字段报文和正常报文,并分别对应给出中间输出结果和准确分类结果。
60.具体地,对正常报文的处理过程为:将ip_src_low、ip_src_high、ip_dst_low、ip_dst_high四个字段的bitmap形式的单约束匹配结果按位与得到ip_src_dst,再将port_src、port_dst的bitmap形式的单约束匹配结果按位与得到port_src_dst,然后将port_src_dst这一中间结果与proto的bitmap形式的单约束匹配结果按位与得到port_proto,最后再将ip_src_dst和port_proto的两个中间结果按位与得到正常报文的准确分类结果。rfc算法首先可以方便的实现并行化,并且能够通过硬件并行进行加速,能够大大提升报文字段的处理时间,在本发明中,rfc处理不受字段缺失的影响,其性能得到保证。
61.s2:构建流信息库,初始化bitmap存储搜索模型,并利用正常报文的准确分类结果和成功恢复的报文的分类结果进行更新。
62.具体步骤包括:
63.s2.1将正常报文的分类信息{field}、报文序号seq
pkt
以及其匹配的bitmap结果送到流信息库,其中,seq
pkt
表示该报文在流中的序号。
64.s2.2流信息库将准确分类bitmap结果输入树模型更新二叉树。
65.s2.2.1从树的root节点开始,访问准确分类bitmap的每一位,如果是0,则访问左子树,如果是1,则访问右子树。如果子树不存在,则创建子树。
66.s2.2.2当树的高度达到准确分类bitmap总长,也就是规则表的总长时,将最后一层的节点称为叶子节点,如果这是一个新的流,则将该流的分类信息{field}写到该叶子节点处,并记录seq
max
=seq
pkt
,如果这不是一个新的流,在原有的分类信息下更新记录seq
max
=max(seq
pkt
,seq
max
),其中,seq
max
表示流的最大分类序号,同一个叶子结点下可能有多个流,说明这些流命中的规则是一样的,能够通过分类信息{field}的区别来区分它们。
67.s2.3流信息库将准确分类bitmap结果输入表模型更新二维表。
68.s2.3.1如果二维表尚未申请,则初始化为一个新的list(列表),该list的长度为bitmap的长度,其中的每一项为一个空的list。
69.s2.3.2遍历准确分类bitmap中的每一位,如果这一位是1,记录这一位对应的位置pos以及当前流的序号seq
flow
,并访问二维表的第pos项,其中,seq
flow
表示当前流的序号,即当前流是第几个被记录的流。
70.s2.3.3查找一个list中是否含有seq
flow
,如果没有,则添加seq
flow
到该list中,表明命中第pos个规则的流中包括第seq
flow
个流。
71.s2.4将键值对存入流记录表,键值对包括当前流的seq
flow
和当前流经过rfc分类后的bitmap结果,以供之后恢复缺失字段的报文时使用。
72.s3:通过流信息库,将缺失字段的报文归类到已被记录的流中,以此恢复缺失字段的报文。
73.s4;通过缓冲区对暂时无法分类或存疑的报文进行暂时存储,在一定的时间内再次分类。
74.s5:对于所有分类失败的报文,基于同样的原始报文数据,通过报文生成器随机生成一个重传报文并立刻处理。
75.s6:通过计算并监测准确率和负载比,根据需求调整分类器中所使用的阈值。
76.在一个实施例中,将中间输出结果输入流信息库,根据中间输出结果命中流信息库中流的数量,得到报文序列的报文命中结果包括:当中间输出结果中1的数量小于0的数量时,将中间输出结果输入流信息库中的树模型,树模型的每一层对应中间输出结果位图中的一位;根据树模型搜索中间输出结果,每当访问到一个第l层的子节点时,读取叶子结点中记录的流信息,流信息包括流序号和流的最大分类序号,其中,l为中间输出结果位图的长度;如果没有读取任何流信息,则得到未命中任何流的报文,如果有一条流被命中,得到仅命中一个流的报文,如果有多条流被命中,得到命中多个流的报文。
77.具体地,如图3所示,将bitmap输入树模型,并首先访问root节点。树模型的每一层对应bitmap中的一位,构建一个先入先出的队列,从root节点(第一层)和bitmap的第一位开始,对于bitmap中的每一位,如果该位是0,则将当前节点的左子节点加入队列,如果该位是1,则将当前节点的左右子节点同时加入队列,如果当前节点没有左子节点或右子节点,则对应子节点不需要加入队列,如此循环,每当访问到一个第l层的子节点时,读取该叶子结点中记录的流信息,流信息包括流序号seq
flow
以及其最大分类序号seq
max
,直到队列中没有需要访问的子节点,其中,l为bitmap的长度。如果没有读取任何流信息,则表明当前报文一定无法命中目前应记录的任何一条流,得到未命中任何流的报文。
78.在一个实施例中,将中间输出结果输入流信息库,根据中间输出结果命中流信息库中流的数量,得到报文序列的报文命中结果还包括:当中间输出结果中1的数量大于0的数量时,将中间输出结果输入流信息库中的表模型;表模型是包括多个列表的数组,总列表数为中间输出结果位图的长度l,每一个列表对应位图中的一位;构建长度为当前已记录流的总数的命中标记位图,初始化命中标记位图中的每一位为1;搜索命中标记位图,记录命中标记位图中的0位,访问0位对应于表模型中的列表,得到列表中的流序号,并将每一流序号对应于命中标记结果的位置更新为0位;查看更新后的命中标记位图中1的个数,如果全部是0,得到未命中任何流的报文,如果有一个1,得到仅命中一个流的报文,如果有多个1,得到命中多个流的报文。
79.在本实施例中,表模型如图4所示,搜索过程具体为:从命中标记位图的第一位开始,对于命中标记位图中的每一位,如果这一位是0,则记录该位所在的位置pos*,并访问第pos*个list(列表),对于访问的list,其中可能包含若干个seq
flow
,对于每一个seq
flow
,将命中标记中的第seq
flow
位置记为0。由于当前报文的中间结果不命中此规则,所以对应命中此规则的流,一定不可能匹配当前报文,所有值为0的位对应的list都访问后,查看命中标记位图中1的个数。通过设计两个bitmap存储搜索模型,大大提升了将报文匹配到流这一过程的速度,也提升了记录一个流并更新bitmap存储搜索模型的效率,本发明在bitmap的处理和流恢复流程中,能够更快且使用消耗更少的存储空间。
80.在另一个实施例中,如图5所示,提供一种基于rfc的报文分类方法的结构示意图,rfc区分正常报文和缺失字段的报文,并进行处理分别对应得到准确分类结果和中间输出结果,流记录器和流更新器用于结合树模型和表模型对记录和更新流信息,通过正常报文更新流信息库中的树模型和表模型,流信息库包括树模型和表模型,用于结合缓冲区恢复缺失字段的报文,得到分类结果,缓冲区用于存储在第一次分类中分类失败或存疑的报文,等待更好的时机进行重新分类。
81.在一个实施例中,通过缓冲区对报文命中结果中所对应的报文进行二次分类,得到分类成功结果集合和分类失败结果集合包括:标识报文命中结果中未命中任何流的报文,得到第一标识报文,并存入缓冲区;当报文命中结果中仅命中一个流的报文在流中的报文序号小于阈值时,得到第二标识报文,并存入缓冲区;提取报文命中结果中命中多个流的报文在对应每一流中的报文序号,当报文的报文序号与对应流的最大分类序号的差值绝对值在阈值范围内时,记录流的流序号;将缓冲区中的报文与每一新记录的流匹配,得到报文序列的报文匹配结果,匹配结果包括匹配成功结果和匹配失败结果;通过缓冲区对匹配成功结果中所对应的报文进行二次分类,得到分类成功结果集合和分类失败结果集合。
82.在本实施例中,第一标识报文标识为“未命中”,对于仅命中一个流的报文,在传统方法中,唯一命中一个流的报文可以被视为成功分类,但存在一种不可预知的分类错误:即当前报文可以同时属于流c和流d,然而,目前只有流c被记录,流d还没有被记录,此时,若认为分类成功,则报文会被分类至流c,但是,如果d才是正确的流,则会出现分类错误,正确的流d没有被记录,这一情况通常也是出现在一个流的初始时期,所以当seq
pkt
小于一个阈值le时,我们将该报文存入buffer,并标识“该报文命中流d”。
83.在一个实施例中,提取命中多个流的报文在对应每一流中的报文序号,当报文的报文序号与对应流的最大分类序号的差值绝对值在阈值范围内时,记录流的流序号包括:当报文的报文序号与对应流的最大分类序号的差值绝对值在阈值范围内时,如果报文未命中任何流,则按照未命中任何流的报文处理;如果报文仅命中一个流,则按照仅命中一个流的报文处理;如果报文仍然命中多个流,则得到第一分类失败结果。
84.对于所有进入buffer的报文,在其加入buffer时添加两个计数器,分别是wt
flow
(流计数器)和wt
pkt
(报文计数器),表明他们进入buffer后,有多少个新的流被记录以及有多少个新的报文被处理,在buffer中这些报文有两种匹配方式,第一种匹配方式针对匹配成功的报文,第二种匹配方式针对匹配失败的报文。
85.在一个实施例中,通过缓冲区对匹配成功结果中所对应的报文进行二次分类,得到分类成功结果集合和分类失败结果集合包括:对匹配成功结果进行二次分类,当报文不曾命中流时,得到第一分类成功结果;当报文曾命中至少1个流时,且当其中一流报文序号与最大分类序号的差值绝对值在阈值范围内时,得到第二分类成功结果;当报文曾命中至少1个流时,且当其中一流报文序号与最大分类序号的差值绝对值不在阈值范围内时,得到第二分类失败结果。
86.在本实施例中,如果不曾命中流,则认为是正确的流d被记录,通过缓冲区机制,我们能够使未命中任何流的报文等待片刻后进行匹配,而不是像传统的方法中匹配失败后立刻放弃此报文,我们也能够使命中多个流的报文用序号差的方法进行进一步的匹配,一个报文匹配失败则意味着必须重传报文,并且从字段提取开始重新操作,这将是非常耗时的,
本发明方法在进一步提升了准确率的情况下,也提升了分类器处理字段缺失报文的工作效率。
87.在一个实施例中,通过缓冲区对匹配失败结果中所对应的报文进行二次分类,得到分类成功结果集合和分类失败结果集合包括:对匹配失败结果进行二次分类,设定最长等待时间,当最长等待时间达到最长流等待数时,且当报文不曾命中流时,得到第三分类失败结果;当最长等待时间达到最长流等待数时,且当报文曾命中唯一一个流时,得到第三分类成功结果;当最长等待时间达到最大报文等待数时,且当报文不曾命中流时,得到第四分类失败结果;当最长等待时间达到最大报文等待数时,且当报文曾命中流时,且当其中一流报文序号与最大分类序号的差值绝对值在阈值范围内时,得到第五分类成功结果;当最长等待时间达到最大报文等待数时,且当报文曾命中流时,且当其中一流报文序号与最大分类序号的差值绝对值不在阈值范围内时,得到第五分类失败结果。
88.在本实施中,根据最长等待时间达到最大报文等待数和根据最长等待时间达到最长流等待数的区别在于,如果某个seq
pkt
较小的报文命中某一个流之后的数个流被记录仍然没有出现其他可能正确的流,则该唯一命中的流极大概率是正确的,但如果只是其后的若干个报文中没有出现正确的流,并不能保证正确的流不会再出现,因为一个对话流的报文可能被另一个对话流的报文所穿插。
89.在一个具体实施例中,如图6所示,提供了一种重传机制的工作流程示意图,对于所有分类失败的报文,使用报文生成器来重新生成,然后将其放置到待处理报文队列的最前面,优先处理,rfc模块接收待处理报文序列和重传报文,并进行rfc处理,分类器用于对rfc输出的中间输出结果进行分类,执行器接收分类成功的报文,输出至rfc模块。具体步骤包括:
90.s60:提取分类失败报文序号seq
pkt
,并读取其在数据库中未缺失字段时的完整字段{field}。
91.s61:根据设定的字段缺失概率,随机对每一个字段进行擦除。
92.s62:给重新生成的报文写上同样的报文序号seq
pkt
,并记录一次重传次数。
93.s63:将重新生成的报文送回rfc优先处理。
94.在一个具体实施例中,如图7所示,提供了一种实验测试的结果示意图,在所有报文分类完毕后,通过实验结果反馈调整阈值,具体步骤包括:
95.s70:统计在分类过程中,被记录为“分类失败”的数量和重传次数。
96.s71:对于所有成功分类的报文,提取其报文序号seq
pkt
和分类结果bitmap。在本发明实施例中,使用classbench的五元组数据集,由于在classbench提供的数据集中,默认将规则表按照优先级从高到低的顺序排列,所以将分类结果bitmap中第一个1的位置记录为命中结果re
pkt

97.s72:打开数据库,搜索第seq
pkt
项报文,classbench在数据集中提供了该报文应该命中的规则序号re
acc
,对比re
pkt
和re
acc
,若两者不同,则记录该报文分类错误。
98.s73:将分类错误的报文数和分类失败的报文数相加,得到总失败数n
failed

99.s74:获取报文集中总报文数n
pkt
,根据总失败数n
failed
和总报文数n
pkt
,得到失误率,根据失误率得到准确率为:
[0100][0101]
s75:根据总报文数n
pkt
和总重传次数n
ret
,得到总处理报文数n
clf
,则负载比为:
[0102][0103]
s76:根据准确率和负载比的变化情况,调整阈值。
[0104]
在实验中,通过检测准确率和负载比,衡量分类器的工作能力。在字段缺失率为0.1以下时,准确率可以达到99.5%,负载率在1.01-1.02左右,也就是说处理10000个报文只需要重传约100到200次。而当字段缺失率在3以下时,准确率也能达到95%以上,负载率在1.13到1.14之间。
[0105]
应该理解的是,虽然图1、2和6的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1、2和6中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
[0106]
在一个实施例中,如图8所示,提供了一种基于rfc的报文分类装置,包括:报文序列获取模块802、rfc处理模块804、报文命中模块806、二次分类模块808和报文重传模块810,其中:
[0107]
报文序列获取模块802,用于获取待分类的报文序列;
[0108]
rfc处理模块804,用于通过rfc处理报文序列,得到报文序列中每个报文的位图格式的中间输出结果;
[0109]
报文命中模块806,用于将中间输出结果输入流信息库,根据中间输出结果命中流信息库中流的数量,得到报文序列的报文命中结果;
[0110]
二次分类模块808,用于通过缓冲区对报文命中结果中所对应的报文进行二次分类,得到分类成功结果集合和分类失败结果集合;
[0111]
报文重传模块810,用于根据分类成功结果集合更新流信息库,通过报文生成器处理分类失败结果集合,得到重传报文;重传报文的优先级大于报文序列中未分类的报文。
[0112]
在其中一个实施例中,报文命中模块806还用于当中间输出结果中1的数量小于0的数量时,将中间输出结果输入流信息库中的树模型,树模型的每一层对应中间输出结果位图中的一位;根据树模型搜索中间输出结果,每当访问到一个第l层的子节点时,读取叶子结点中记录的流信息,流信息包括流序号和流的最大分类序号,其中,l为中间输出结果位图的长度;如果没有读取任何流信息,则得到未命中任何流的报文,如果有一条流被命中,得到仅命中一个流的报文,如果有多条流被命中,得到命中多个流的报文。
[0113]
在其中一个实施例中,报文命中模块806还用于当中间输出结果中1的数量大于0的数量时,将中间输出结果输入流信息库中的表模型;表模型是包括多个列表的数组,总列表数为中间输出结果位图的长度l,每一个列表对应位图中的一位;构建长度为当前已记录
流的总数的命中标记位图,初始化命中标记位图中的每一位为1;搜索命中标记位图,记录命中标记位图中的0位,访问0位对应于表模型中的列表,得到列表中的流序号,并将每一流序号对应于命中标记结果的位置更新为0位;查看更新后的命中标记位图中1的个数,如果全部是0,得到未命中任何流的报文,如果有一个1,得到仅命中一个流的报文,如果有多个1,得到命中多个流的报文。
[0114]
在其中一个实施例中,二次分类模块808还用于标识报文命中结果中未命中任何流的报文,得到第一标识报文,并存入缓冲区;当报文命中结果中仅命中一个流的报文在流中的报文序号小于阈值时,得到第二标识报文,并存入缓冲区;提取报文命中结果中命中多个流的报文在对应每一流中的报文序号,当报文的报文序号与对应流的最大分类序号的差值绝对值在阈值范围内时,记录流的流序号;将缓冲区中的报文与每一新记录的流匹配,得到报文序列的报文匹配结果,匹配结果包括匹配成功结果和匹配失败结果;通过缓冲区对匹配成功结果中所对应的报文进行二次分类,得到分类成功结果集合和分类失败结果集合。
[0115]
在其中一个实施例中,二次分类模块808还用于当报文的报文序号与对应流的最大分类序号的差值绝对值在阈值范围内时,如果报文未命中任何流,则按照未命中任何流的报文处理;如果报文仅命中一个流,则按照仅命中一个流的报文处理;如果报文仍然命中多个流,则得到第一分类失败结果。
[0116]
在其中一个实施例中,二次分类模块808还用于对匹配成功结果进行二次分类,当报文不曾命中流时,得到第一分类成功结果;当报文曾命中至少1个流时,且当其中一流报文序号与最大分类序号的差值绝对值在阈值范围内时,得到第二分类成功结果;当报文曾命中至少1个流时,且当其中一流报文序号与最大分类序号的差值绝对值不在阈值范围内时,得到第二分类失败结果。
[0117]
在其中一个实施例中,二次分类模块808还用于对匹配失败结果进行二次分类,设定最长等待时间,当最长等待时间达到最长流等待数时,且当报文不曾命中流时,得到第三分类失败结果;当最长等待时间达到最长流等待数时,且当报文曾命中唯一一个流时,得到第三分类成功结果;当最长等待时间达到最大报文等待数时,且当报文不曾命中流时,得到第四分类失败结果;当最长等待时间达到最大报文等待数时,且当报文曾命中流时,且当其中一流报文序号与最大分类序号的差值绝对值在阈值范围内时,得到第五分类成功结果;当最长等待时间达到最大报文等待数时,且当报文曾命中流时,且当其中一流报文序号与最大分类序号的差值绝对值不在阈值范围内时,得到第五分类失败结果。
[0118]
关于基于rfc的报文分类装置的具体限定可以参见上文中对于基于rfc的报文分类方法的限定,在此不再赘述。上述基于rfc的报文分类装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
[0119]
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图9所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程
序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种基于rfc的报文分类方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
[0120]
本领域技术人员可以理解,图9中示出的结构,仅仅是与本技术方案相关的部分结构的框图,并不构成对本技术方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
[0121]
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,该存储器存储有计算机程序,该处理器执行计算机程序时实现上述实施例中方法的步骤。
[0122]
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述实施例中方法的步骤。
[0123]
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
[0124]
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0125]
以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献