信息识别方法与只读内存转让专利

申请号 : CN202011056070.0

文献号 : CN112187935B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 高运

申请人 : 杭州迪普科技股份有限公司

摘要 :

本公开提供一种信息识别方法与只读内存。信息识别方法包括:获取第一信息,所述第一信息包括N个顺次排列的第二信息,N≥1;获取每个所述第二信息对应的识别标识符,所述识别标识符包括n位数据,第m位数据用于指示所述第二信息是否为预设信息序列中的第m个预设信息,1≤m≤n;根据所述第一信息对应的N个识别标识符的值及排序确定所述第一信息是否包括目标信息。本公开提供的信息识别方法可以在提高报文识别速度的同时降低内存资源消耗。

权利要求 :

1.一种信息识别方法,其特征在于,基于FPGA实现,包括:

获取作为第一信息的HTTP请求报文,所述第一信息包括N个顺次排列的第二信息,所述第二信息为一个字节的数据,N≥1;

获取每个所述第二信息对应的识别标识符,所述识别标识符包括n位数据,第m位数据用于指示所述第二信息是否为作为预设ASCII码的预设信息序列中的第m个预设信息,1≤m≤n;

根据所述第一信息对应的N个识别标识符的值及排序确定所述第一信息是否包括目标信息,所述目标信息为报文Host字段开始位置或报文Host字段结束位置。

2.如权利要求1所述的信息识别方法,其特征在于,n=7,所述预设信息序列包括“\r”、“\n”、“H”、“o”、“s”、“t”、“:”。

3.如权利要求1所述的信息识别方法,其特征在于,所述第二信息包括M位数据,所述获取每个所述第二信息对应的识别标识符包括:根据与所述第二信息对应的只读内存确定所述第二信息对应的识别标识符,所述识别标识符为所述只读内存的输出数据;

其中,所述只读内存包括2M个存储地址,每个所述存储地址用于映射一个ASCII码,所述只读内存在所述第二信息对应的映射结果为所述预设信息序列中的第m个预设ASCII码时,将所述识别标识符中的第m位数据输出为第一值。

4.如权利要求3所述的信息识别方法,其特征在于,一个只读内存按处理时间先后分别对应两个第二信息。

5.如权利要求1所述的信息识别方法,其特征在于,所述根据所述第一信息对应的N个识别标识符的值及排序确定所述第一信息是否包括目标信息包括:所述第一信息对应的所述N个识别标识符输入预设级联电路阵列,所述预设级联电路阵列包括级联的n个判断电路,第i个所述判断电路用于在输入的第j+i个标识符为第i预设值时输出第一值,其中,一个所述第一信息具有唯一的j值,1≤i≤N,j≥0;

在所述n个判断电路的输出均为所述第一值时,所述预设级联电路阵列确定所述第一信息包括所述目标信息。

6.如权利要求5所述的信息识别方法,其特征在于,所述预设级联电路阵列对应一个正则表达式,所述n个判断电路对应的n个预设值按照所述n个判断电路的级联顺序构成一个正则表达式。

7.如权利要求6所述的信息识别方法,其特征在于,k个字段相同的多个正则表达式对应的多个预设级联电路阵列共用级联的k个所述判断电路,k≥1。

8.如权利要求7所述的信息识别方法,其特征在于,在所述预设值为非值时,所述判断电路的输入级或者输出级包括取反电路。

9.一种只读内存,其特征在于,通过FPGA实现,用于执行如权利要求1 8任一项所述的~信息识别方法。

说明书 :

信息识别方法与只读内存

技术领域

[0001] 本公开涉及电子电路技术领域,具体而言,涉及一种基于FPGA实现的信息识别方法与用于执行该信息识别方法的只读内存。

背景技术

[0002] 随着网络技术的不断发展,针对服务器的攻击也日益严重。针对流行的洪水攻击,防护设备通常通过对HTTP(Hyper Text Transfer Protocol,超文本传输协议)请求报文的
头部Host字段进行识别和源认证来进行防护。由于Host字段的内容、位置、长度不固定,如
何高效准确提取Host字段,是实现防护HTTP洪水攻击的关键问题。
[0003] 现有的提取Host字段的方案通常通过基于DFA(Deterministic Finite Automaton,确定有限状态机)或NFA(Nondeterministic Finite Automaton,非确定有限状
态机)的正则表达式匹配,实现时需要执行正则表达式→NFA→DFA的转换步骤。基于DFA的
匹配有较高的处理速度,但是需要消耗较大的内存空间。基于NFA的匹配逻辑简单,如果设
计时基于通用处理器架构,则匹配速度较慢,远远达不到网络数据流量所需的识别速度要
求,对于报文单周期处理多字节的性能需求无法实现;如果使用FPGA(Field‑Programmable Gate Array,现场可编程门阵列)方式实现NFA方案,由于FPGA对时序、资源的要求严格,设
计时容易造成存储空间膨胀和逻辑级数过高的问题。
[0004] 因此,需要一种能够同时满足提取HTTP头部Host字段时较高处理速度的性能需求和较低的存储空间需求的信息识别方法。
[0005] 需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。

发明内容

[0006] 本公开的目的在于提供一种基于FPGA实现的信息识别方法与只读内存,用于至少在一定程度上克服由于相关技术的限制和缺陷而导致的报文Host字段识别电路的识别效
率低或者存储资源需求多的问题。
[0007] 根据本公开实施例的第一方面,提供一种信息识别方法,包括:获取第一信息,所述第一信息包括N个顺次排列的第二信息,N≥1;获取每个所述第二信息对应的识别标识
符,所述识别标识符包括n位数据,第m位数据用于指示所述第二信息是否为预设信息序列
中的第m个预设信息,1≤m≤n;根据所述第一信息对应的N个识别标识符的值及排序确定所
述第一信息是否包括目标信息。
[0008] 在本公开的一种示例性实施例中,所述第一信息为HTTP请求报文,所述第二信息为一个字节的数据,所述预设信息为预设ASCII码,所述目标信息为报文Host字段开始位置
或报文Host字段结束位置,N=8。
[0009] 在本公开的一种示例性实施例中,n=7,所述预设信息序列包括“\r”、“\n”、“H”、“o”、“s”、“t”、“:”。
[0010] 在本公开的一种示例性实施例中,所述第二信息包括M位数据,所述获取每个所述第二信息对应的识别标识符包括:
[0011] 根据与所述第二信息对应的只读内存确定所述第二信息对应的识别标识符,所述识别标识符为所述只读内存的输出数据;
[0012] 其中,所述只读内存包括2M个存储地址,每个所述存储地址用于映射一个ASCII码,所述只读内存在所述第二信息对应的映射结果为所述预设信息序列中的第m个预设
ASCII码时,将所述识别标识符中的第m位数据输出为第一值。
[0013] 在本公开的一种示例性实施例中,一个只读内存按处理时间先后分别对应两个第二信息。
[0014] 在本公开的一种示例性实施例中,所述根据所述第一信息对应的N个识别标识符的值及排序确定所述第一信息是否包括目标信息包括:
[0015] 所述第一信息对应的所述N个标识符输入预设级联电路阵列,所述预设级联电路阵列包括级联的n个判断电路,第i个所述判断电路用于在输入的第j+i个标识符为第i预设
值时输出第一值,其中,一个所述第一信息具有唯一的j值,1≤i≤N,j≥0;
[0016] 在所述n个判断电路的输出均为所述第一值时,所述预设级联电路阵列确定所述第一信息包括所述目标信息。
[0017] 在本公开的一种示例性实施例中,所述预设级联电路阵列对应一个正则表达式,所述n个判断电路对应的n个预设值按照所述n个判断电路的级联顺序构成一个正则表达
式。
[0018] 在本公开的一种示例性实施例中,k个字段相同的多个正则表达式对应的多个预设级联电路阵列共用级联的k个所述判断电路,k≥1。
[0019] 在本公开的一种示例性实施例中,在所述预设值为非值时,所述判断电路的输入级或者输出级包括取反电路。
[0020] 根据本公开的第二方面,提供一种只读内存,基于FPGA实现,用于执行如上述任意一项所述的信息识别方法。
[0021] 本公开实施例通过获取第一信息对应的N个第二信息对应的N个n位的识别标识符,可以判断第二信息是否为预设信息序列中的预设信息,进而根据第一信息对应的N个识
别标识符的值和顺序确定第一信息是否包括目标信息,可以利用较少的存储资源(N×n位
的识别标识符信息)和逻辑级数实现对第一信息的识别,在通过FPGA实现信息识别时,可以
在提高信息识别速率的同时,有效节省存储资源。
[0022] 应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

附图说明

[0023] 此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开
的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据
这些附图获得其他的附图。
[0024] 图1是本公开示例性实施例中信息识别方法的流程图。
[0025] 图2是本公开一个实施例中利用双口ROM电路实现双字节数据ASCII码识别的示意图。
[0026] 图3是本公开一个实施例中识别报文中Host字段位置的示意图。
[0027] 图4是本公开一个实施例中对级联的判断电路进行复用的示意图。
[0028] 图5是本公开提供的一种只读内存的示意图。
[0029] 图6是示出根据示例性实施例的数据处理装置的示意性框图。

具体实施方式

[0030] 现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加
全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结
构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许
多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可
以实践本公开的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方
法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知技术方案以避免喧宾夺主而使得本公开的各方面变得模糊。
[0031] 此外,附图仅为本公开的示意性图解,图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物
理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个
硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器
装置中实现这些功能实体。
[0032] 为了解决提取HTTP头部字段时单周期多字节并行处理的性能需求,同时尽量减少FPGA设计中资源消耗,本公开基于FPGA平台提供了一种NFA提取正则表达式的资源优化方
案。
[0033] 下面结合附图对本公开示例实施方式进行详细说明。
[0034] 图1示意性示出本公开示例性实施例中信息识别方法的流程图。
[0035] 参考图1,信息识别方法100可以包括:
[0036] 步骤S1,获取第一信息,所述第一信息包括N个顺次排列的第二信息,N≥1;
[0037] 步骤S2,获取每个所述第二信息对应的识别标识符,所述识别标识符包括n位数据,第m位数据用于指示所述第二信息是否为预设信息序列中的第m个预设信息,1≤m≤n;
[0038] 步骤S3,根据所述第一信息对应的N个识别标识符的值及排序确定所述第一信息是否包括目标信息。
[0039] 本公开实施例通过获取第一信息对应的N个第二信息对应的N个n位的识别标识符,可以判断第二信息是否为预设信息序列中的预设信息,进而根据第一信息对应的N个识
别标识符的值和顺序确定第一信息是否包括目标信息,可以利用较少的存储资源(N×n位
的识别标识符信息)和逻辑级数实现对第一信息的识别,在通过FPGA实现信息识别时,可以
在提高信息识别速率的同时,有效节省存储资源。
[0040] 下面,对信息识别方法100的各实施例进行详细说明。
[0041] 在本公开的一个实施例中,第一信息为HTTP请求报文,第二信息为一个字节的数据。目标信息为Host字段的开始标识或者Host字段的结束标识,以确定Host字段的内容。
即,在该实施例中,确定每个HTTP请求报文中是否包括Host字段的开始信息和Host字段的
结束信息,以便于后续确定Host字段的内容。当处理单周期HTTP请求报文时,N=8。
[0042] 在本公开的一个实施例中,预设信息为ASCII码,可以识别HTTP请求报文中每个字节对应的ASCII码,并将该ASCII码映射在一个识别标识符中,以指示该字节的数据是否为
需要进行下一步处理的预设ASCII码。该识别标识符具有n位,第m位数据用于指示该第二信
息是否为预设信息序列中的第m个预设信息,1≤m≤n。
[0043] 例如,当本公开实施例用于识别HTTP请求报文中Host字段的开始位置时,需要识别的Host字段的开始标识为“\r\nHost:”,n=7,预设信息序列包括“\r”、“\n”、“H”、“o”、“s”、“t”、“:”。每个字节的数据对应的识别标识符包括7位,第1位在当前字节数据为“\r”时等于1,在当前字节数据不为“\r”时等于0;第2位在当前字节数据为“\n”时等于1,在当前字节数据不为“\n”时等于0,以此类推。如果一个字节数据的ASCII码识别结果为“s”,则该字节对应的识别标识符为“0000100”;如果一个字节的数据的ASCII码识别结果为“\n”,则该字节对应的识别标识符为“0100000”。
[0044] 为了识别出每个字节的数据对应的ASCII码,本公开实施例设置通过ROM(只读内存)的多个存储地址对一个字节的数据进行映射。即,根据与第二信息对应的只读内存确定
第二信息对应的识别标识符,识别标识符为只读内存的输出数据;其中,只读内存包括2M个
存储地址,每个存储地址用于映射一个ASCII码,只读内存在第二信息对应的映射结果为预
设信息序列中的第m个预设ASCII码时,将识别标识符中的第m位数据输出为第一值。
[0045] 当一个字节的数据包括8位(8bit)时,该字节的值可能为28=256种ASCII码中的一个。因此,可以在一个只读内存中设置256个存储地址,每个存储地址对应一个ASCII码。
当该字节的数据输入只读内存时,只读内存将该字节的数据映射到这个256个存储地址中,
以确定该字节的数据的值(ASCII码)。确定一个字节的数据的ASCII码后,该只读内存通过
匹配该ASCII码是否为预设ASCII码(例如前文的“\r”、“\n”、“H”、“o”、“s”、“t”、“:”中的任意一个)输出识别标识符,识别标识符每个位的设置请参见上述示例。当一个字节的数据对
应一个只读内存(ROM)时,8个字节的数据总共需要占用8*256*7=14kb的ROM存储资源(存
储空间)。
[0046] 在本公开实施例中,通过FPGA实现上述ROM,以提供更高的处理速度。FPGA具有更大的并行度,可以实现多个模块之间同时独立进行计算,在不同逻辑功能之间进行并行运
算,进而实现对报文信息的高速处理。由以上分析可知,本公开实施例提供的方法仅需占用
较少的存储资源,避免了相关技术通过FPGA实现信息识别时对存储资源的大量占用,有效
在利用FPGA的高速处理性能的同时降低了对存储资源的消耗。
[0047] 在本公开的另一个实施例中,通过FPGA实现上述ROM还可以进一步节约存储资源。
[0048] 图2是本公开一个实施例中利用双口ROM电路实现双字节数据ASCII码识别的示意图。
[0049] 参考图2,由于FPGA可以实现双口ROM的特性,即一个只读内存(ROM)可以具有两个输入端和两组输出端,因此,一个通过FPGA实现的双口ROM电路,可以用于按处理时间先后
分别处理两个字节的数据(这两个字节的数据分别使用不同的输入端,但是共用256个存储
地址),每个字节对应一个7位的识别标识符,此时该两个字节的数据的识别仅需要占用
256*7=7kb的ROM存储资源。
[0050] 通过利用FPGA实现字节数据的ASCII码识别,不但能够利用FPGA的高速并行处理特性,还可以有效降低对存储资源的需求。当设置4个双口ROM电路时,即可在单周期实现对
8个字节的识别,进而在时钟频率达到160MHz时,实现10Gb/s的识别速率。
[0051] 对报文中每个字节对应的ASCII码进行识别,并通过识别标识符进行标识后,需要进一步对该HTTP请求报文是否包括预设信息序列进行识别,即进行正则表达式的识别。在
Host字段识别实施例中,由于Host字段的开始位置不确定,预设信息序列“\r\nHost:”中的第一个字符“\r”可以出现在HTTP请求报文的任一个字节,因此,需要对报文的全部字节对
应的识别标识符进行序列识别。
[0052] 在一个实施例中,可以将第一信息对应的N个标识符输入预设级联电路阵列,预设级联电路阵列包括级联的n个判断电路,第i个判断电路用于在输入的第j+i个标识符为第i
预设值时输出第一值,其中,一个第一信息具有唯一的j值,1≤i≤N,j≥0;然后,在n个判断电路的输出均为第一值时,预设级联电路阵列确定第一信息包括目标信息。
[0053] 在本公开实施例中,预设级联电路阵列对应一个正则表达式,n个判断电路对应的n个预设值按照n个判断电路的级联顺序构成一个正则表达式。
[0054] 例如,对于识别Host字段开始位置的实施例,可以设置级联的7个判断电路,第1个判断电路用于识别一个代表“\r”的识别标识符,第2个判断电路用于识别一个代表“\n”的识别标识符,以此类推,第7个判断电路用于识别一个代表“:”的识别标识符。
[0055] 当j=1,即级联电路中第1个判断电路识别出HTTP请求报文中的第1个字节对应的识别标识符代表该字节数据的ASCII码对应“\r”时,第2个判断电路对HTTP请求报文中的第
2字节对应的识别标识符进行识别,如果识别到代表“\n”的识别标识符,则第3个判断电路
对HTTP请求报文中的第3字节对应的识别标识符进行识别。以此类推,直至第7个判断电路
识别出报文中第7个字节对应的识别标识符代表“:”,则确定该部分报文中包括Host字段的
开始位置。
[0056] 当j=2,即即级联电路中第1个判断电路识别出HTTP请求报文中的第2个字节对应的识别标识符代表该字节数据的ASCII码对应“\r”时,第2个判断电路对HTTP请求报文中的
第3字节对应的识别标识符进行识别,如果识别到代表“\n”的识别标识符,则第3个判断电
路对HTTP请求报文中的第4字节对应的识别标识符进行识别。以此类推,直至第7个判断电
路识别出报文中第8个字节对应的识别标识符代表“:”,则确定该部分报文中包括代表Host
字段的开始位置的正则表达式(或者称为字符串)“\r\nHost:”。
[0057] j值可以为多种,本公开于此不再赘述。
[0058] 图3是本公开一个实施例中识别报文中Host字段位置的示意图。
[0059] 参考图3,为了识别报文中的Host字段位置,首先可以在ASCII码识别模块31对报文中的每个字节进行持续的ASCII码识别,将每个字节对应的识别标识符顺次同时输入第
一预设级联电路阵列32和第二预设级联电路阵列33,以实现对Host字段开始标识“\r\
nHost:”的识别和Host字段结束标识“\r\nHost:[^\r]*\r\n”的识别。在第一预设级联电路阵列32和第二预设级联电路阵列33均输出代表识别到正则表达式对应的字符串的输出结
果时,判断模块34判断识别到Host字段的位置并根据该位置并输出识别结果,以在后续处
理模块中提取出Host字段的内容并进行验证,防范洪水攻击等网络攻击。
[0060] 在本公开实施例中,各判断电路相互独立,每个判断电路均用于识别不同的ASCII码,将多个ASCII码对应的判断电路级联,即可实现对基于ASCII码的正则表达式的识别。由
于各判断电路均可以识别独立的ASCII码,通过不同的连接方式,可以实现“*”(子表达式出现一次或多次)或者“+”(子表达式出现零次或多次)的正则表达式判断设置,对于复杂的正
则表达式仅需要较少的判断电路即可实现。在一些实施例中,每个判断电路在判断输入的
识别标识符为预设值时,输出第一值(例如1),并向同一个预设级联电路阵列中级联的下一
级判断电路传递下一个识别标识符,此时,可以在全部判断电路的输出均为该第一值时确
定这些识别标识符对应的字节为目标信息;在判断输入的识别标识符不为该判断电路对应
的预设值时,既可以输出第二值(例如0)并向下一级判断电路传递下一个识别标识符,也可
以直接将该下一个识别标识符传递到预设级联电路阵列的第一级判断电路进行识别。利用
级联的判断电路对报文对应的识别标识符进行正则表达式识别的方式可以有多种,本公开
不以此为限。
[0061] 本公开中判断电路也可以称为查找电路,即查找该识别标识符对应的预设值的电路。此外,本公开实施例中的判断电路既可以通过FPGA实现,也可以通过其他独立电路实
现,本公开对此不作特殊限制。
[0062] 通过设置独立的判断电路并对判断电路进行级联以识别正则表达式,当需要识别多个正则表达式,且这些正则表达式中的部分字符及其顺序相同时,可以共用级联的部分
判断电路。
[0063] 图4是本公开一个实施例中对级联的判断电路进行复用的示意图。
[0064] 参考图4,如需识别(\r\nHost:)、(\r\nHost:[^\r]*\r\n)、(\r\nCookie:)、(\r\nCookie:[^\r]*\r\n)四个正则表达式,这四个任务可以复用级联的“\r”对应的判断电路
和“\n”对应的判断电路,同时,第一个任务和第二个任务可以复用级联的“\r”、“\n”、“H”、“o”、“s”、“t”、“:”判断电路,第三个和第四个任务可以复用级联的“C”、“o”、“o”、“k”、“i”、“e”、“:”判断电路。
[0065] 不复用判断电路时,上述四个正则表达式共需要使用38份判断电路来判断38个字符的先后顺序,在复用级联后的判断电路时,只需要设置20个判断电路即可,可以明显减少
资源消耗。
[0066] 需要说明的是,在识别如[^\r]这种取非的表达式(即一个判断电路用于判断输入数据不为“\r”)时,仅需要对[\r]的识别结果取反即可,例如可以在对应[\r]的判断电路的输入级或者输出级设置取反电路即可,以进一步节约存储资源。
[0067] 通过上述设置,在FPGA中仅需要使用1级逻辑级数即可实现对报文中每个字节数据的ASCII码识别,进而可以通过可复用的级联的判断电路实现对报文的正则表达式识别,
以确定报文中是否存在预设信息,例如HOST字段的开始位置和结束位置、Cookie字段的开
始位置和结束位置等。
[0068] 图5是本公开提供的一种只读内存的示意图。
[0069] 参考图5,只读内存500可以通过FPGA实现,用于执行如上所述的信息识别方法。
[0070] 图6是示出根据示例性实施例的数据处理装置的示意性框图。如图6中所示,根据示例性实施例的数据处理装置可以包括接收单元110、表达式构造单元130和识别单元150。
[0071] 根据示例性实施例的数据处理装置可以被实现为能够与外部(例如,互联网)通信并能够对来自外部(例如,互联网)的数据进行处理的专用的处理单元,例如,现场可编程门
阵列FPGA(field programmable gate array),或者,可以被实现为例如中央处理单元CPU
的通用的处理单元。下文中,将以FPGA作为数据处理装置的示例性实施例进行描述。在这样
的示例性实施例中,接收单元110、表达式构造单元130和识别单元150以及将要描述的数据
出合理装置可以包括的其他单元和元件可以是FPGA中的实现相应的功能或操作的模块,或
者可以是连接到FPGA的实现相应功能或操作的独立的硬件。此外,与其他类型的处理单元
相比,普通的FPGA能够提供的资源可能有限,例如,可能具有内部存储容量相对较小、运行
时钟频率相对较低、单个处理周期处理性能相对较小等特点。
[0072] 接收单元110可以接收来自诸如互联网的外部的数据,例如超文本传送协议HTTP请求信息,以作为待处理数据。
[0073] 将接收单元110接收了待处理数据时,可以对待处理数据进行处理,以确定目标信息在待处理数据中所处的位置,进而能够提取目标信息。为此,表达式构造单元130可以使
用目标信息的开始位置识别码、类型识别码、结束位置识别码来构造识别表达式,然后位置
识别单元150可以根据构造的识别表达式来识别目标信息在待处理数据中的位置。为了能
够区分接收的待处理数据,例如HTTP请求是否为进行洪水攻击的请求,目标信息可以为包
括在HTTP请求的头部处的host字段和/或cookie字段。下文中,将以HTTP请求作为待处理数
据,host字段和cookie字段为目标信息为例进行详细描述。
[0074] 具体地,用于识别host字段在HTTP请求中的位置的表达式,例如,正则表达式可以包括用于识别host字段在HTTP请求中的开始位置的开始位置识别表达式和用于识别host
字段在HTTP请求中的结束位置的结束位置识别表达式:
[0075] host字段开始位置识别表达式:\r\nHost:;
[0076] host字段结束位置识别表达式:\r\nHost:[^\r]*\r\n。
[0077] 类似地,用于识别cookie字段在HTTP请求中的位置的表达式,例如,正则表达式可以包括用于识别cookie字段在HTTP请求中的开始位置的开始位置识别表达式和用于识别
cookie字段在HTTP请求中的结束位置的结束位置识别表达式:
[0078] cookie字段开始位置识别表达式:\r\nCookie:;
[0079] cookie字段结束位置识别表达式:\r\nCookie:[^\r]*\r\n。
[0080] 为了构造这样的正则表达式,表达式构造单元130可以使用开始位置子表达式、类型子表达式和结束位置子表达式。这里,子表达式也可以称为识别码。例如,可以将host字
段开始位置识别表达式、host字段结束位置识别表达式、cookie字段开始位置识别表达式、
cookie字段结束位置识别表达式中的相同的部分定义为子表达式,例如:
[0081] 第一(开始位置)子表达式:\r\n;
[0082] 第二(host类型)子表达式:Host:;
[0083] 第三(cookie类型)子表达式:Cookie:;
[0084] 第四(结束位置)子表达式:[^\r]*\r\n。
[0085] 表达式构造单元130可以使用第一(开始位置)子表达式和第二(host类型)子表达式来构造host字段开始位置识别表达式、使用第一(开始位置)子表达式、第二(host类型)
子表达式和第四(结束位置)子表达式来构造host字段结束位置识别表达式、使用第一(开
始位置)子表达式和第三(cookie类型)子表达式来构造cookie字段开始位置识别表达式、
使用第一(开始位置)子表达式、第三(cookie类型)子表达式和第四(结束位置)子表达式来
构造cookie字段结束位置识别表达式。然而,也可以以其他方式来定义子表达式,例如,第
四(结束位置)子表达式也可以被构造为\r\n…[^\r]*\r\n。
[0086] 为了减少对诸如FPGA的数据处理装置的资源的占用并提高数据处理装置的效率,表达式构造单元130可以复用子表达式。例如,因为用于构造host字段开始位置识别表达式
的第一(开始位置)子表达式与用于构造cookie字段开始位置识别表达式的第一(开始位
置)子表达式相同,所以当表达式构造单元130在利用第一(开始位置)子表达式和第二
(host类型)子表达式构造了host字段开始位置识别表达式之后构造cookie字段开始位置
识别表达式时,表达式构造单元130可以重复使用已经在之前构造host字段开始位置识别
表达式时使用的第一(开始位置)子表达式和新的第三(cookie类型)子表达式,从而可以不
需要将第一(开始位置)子表达式重新读取到例如从诸如FPGA的数据处理装置的内部存储
器(例如缓存)ROM中,或者可以不需要从诸如FPGA的数据处理装置的内部存储器(例如缓
存)ROM中重新读取第一(开始位置)子表达式。
[0087] 根据示例性实施例,可以将用于构成正则表达式和/或子表达式的字符,例如ASCII码字符,存储在例如FPGA的数据处理装置的内部存储器和/或缓存中。为此,数据处理
装置可以包括字符识别单元170。字符识别单元可以根据期望处理或提取的目标信息确定
目标信息的开始位置识别码/子表达式、类型识别码/子表达式、结束位置识别码/子表达
式。例如,当目标数据为host字段时,字符识别单元170可以确定用于host字段的开始位置
子表达式\r\n、host类型子表达式Host:、结束位置子表达式:[^\r]*\r\n。这里,字符识别单元170可以根据用于确定host字段在HTTP请求中的位置的正则表达式\r\nHost:和\r\
nHost:[^\r]*\r\n,确定这样的正则表达式中可以复用的部分,然后将可以复用的部分和
不可复用的部分分别确定为上述子表达式。存储地址对应输入报文的需要识别内容的
ASCII码。当基于报文要识别的内容的ASCII码对应上ROM的ASCII码地址编码时,这个ROM的
ASCII码地址编码对应的比特就会输出一个识别标志,例如“1”,意味着识别成功,从而下一阶段就利用该识别标识。从本质上而言,技术交底书中的ROM是一个筛子,对报文需要识别
的内容逐一筛一遍,这样按照报文识别内容ASCII码去查找ROM的ASCII编码地址,对应上,
就输出对应编码中存储的识别标识,从而实现访问或读取到即对应识别的过程。例如,字符
识别单元170可以将这些子表达式中的相同的字符识别出来,如果一个字节数据的ASCII码
识别结果为“s”,则该字节对应的识别标识符为“0000100”;如果一个字节的数据的ASCII码识别结果为“\n”,则该字节对应的识别标识符为“0100000”。基于报文中要识别的内容的ASCII码去访问ROM,对应上ASCII码编码地址,则输出ASSCII编码地址下存储识别标识,那
些没有对应的编码地址下的比特位就不输出信号。如此,可以整合相同的ASCII码,从而节
约FPGA的内部存储空间,以使得存储ASCII码所占用的空间不会过度膨胀。此外,这样的存
储方式可以获得单周期处理8字节的性能,对于时钟频率160M系统即可实现10Gb/s识别速
率,识别速率高。同时,FPGA实现时逻辑级数最多仅1级,即使更高的时钟频率都能满足时序约束要求。
[0088] 然后,为了使用存储的字符构造子表达式,根据示例性实施例的数据处理装置还可以包括识别码构造单元190。例如在上面的示例中,识别码构造单元190可以利用存储在
例如FPGA的内部存储器/缓存ROM中的字符\r、\n、H、o、s、t、:来构造host字段的开始位置子表达式\r\n、host类型子表达式Host:、结束位置子表达式:[^\r]*\r\n。
[0089] 然后,虽然在图6中没有示出,但是示例性实施例的数据处理装置还可以包括目标信息提取单元。目标信息提取单元可以根据识别单元150识别的目标信息在待处理数据中
的位置从待处理数据中提取目标信息。
[0090] 如此,通过字符整合存储以及复用正则表达式中的相同的子表达式,可以减少FPGA的资源消耗。例如,当识别host字段和cookie字段的位置时,可以在不影响查找结果的
情况下,通过上述的字符整合和子表达式复用而仅后仅消耗20份查找电路来创建正则表达
式。相较于不进行复用的方式所消耗的38份查找电路,根据示例性实施例的数据处理装置
明显减少资源消耗。
[0091] 可选择地,根据本公开的一种数据处理装置包括:接收单元,被构造为接收来自外部的待处理数据;表达式构造单元,被构造为使用目标信息的开始位置识别码、类型识别
码、结束位置识别码来构造识别表达式;位置识别单元,被构造为根据构造的识别表达式来
识别目标信息在待处理数据中的位置。所述表达式构造单元被构造为确定构造当前的识别
表达式所将使用的开始位置识别码、类型识别码、结束位置识别码中的至少一种与在构造
当前的识别表达式之前构造之前的识别表达式所使用的开始位置识别码、类型识别码、结
束位置识别码中的至少一种是否相同,并在确定构造当前的识别表达式所将使用的开始位
置识别码、类型识别码、结束位置识别码中的至少一种与在构造当前的识别表达式之前构
造之前的识别表达式所使用的开始位置识别码、类型识别码、结束位置识别码中的至少一
种相同时,使用确定相同的构造之前的识别表达式所使用的开始位置识别码、类型识别码、
结束位置识别码中的至少一种构造当前的识别表达式。识别表达式包括用于识别目标信息
在待处理数据中的开始位置的开始位置识别表达式和用于识别目标信息在待处理数据中
的结束位置的结束位置识别表达式,其中,表达式构造单元被构造为使用确定相同的构造
之前的识别表达式所使用的开始位置识别码和类型识别码构造开始位置识别表达式,并使
用确定相同的构造之前的识别表达式所使用的结束位置识别码和类型识别码构造结束位
置识别表达式。目标信息包括host字段和cookie字段,表达式构造单元被构造为使用开始
位置识别码\r\n、类型识别码Host:、Cookie:和结束位置识别码[^\r]*\r\n来构造host字
段的开始位置识别表达式\r\nHost:和host字段的结束位置识别表达式\r\nHost:[^\r]*\
r\n、以及cookie字段的开始位置表达式\r\Cookie:和cookie字段的结束位置识别表达式\
r\nCookie:[^\r]*\r\n。所述数据处理装置包括:字符识别单元,被构造为根据目标信息确
定目标信息的开始位置识别码、类型识别码、结束位置识别码,识别确定的开始位置识别
码、类型识别码、结束位置识别码中包括的字符,并将识别的字符存储在所述数据处理装置
的内部存储器中。字符识别单元被构造为确定当前识别的字符与在识别当前的字符之前识
别的之前的字符或者与对在识别当前的字符之前识别的之前的字符进行取反操作所得的
结果是否相同,并在确定当前识别的字符与在识别当前的字符之前识别的之前的字符或者
与对在识别当前的字符之前识别的之前的字符进行取反操作所得的结果相同时,不将当前
识别的字符存储在所述数据处理装置的内部存储器中。所述数据处理装置包括:识别码构
造单元,被构造为在表达式构造单元进行构造时,根据存储在所述数据处理装置的内部存
储器中的字符构造开始位置识别码、类型识别码、结束位置识别码。接收单元被构造为接收
来自外部的超文本传送协议HTTP请求信息,以作为待处理数据。所述数据处理装置包括提
取单元,被构造为根据识别的目标信息在待处理数据中的位置从待处理数据中提取目标信
息。所述数据处理装置包括现场可编程门阵列FPGA。
[0092] 根据本公开的一种数据处理方法包括:接收来自外部的待处理数据;使用目标信息的开始位置识别码、类型识别码、结束位置识别码来构造识别表达式;根据构造的识别表
达式来识别目标信息在待处理数据中的位置。构造识别表达式的步骤包括:确定构造当前
的识别表达式所将使用的开始位置识别码、类型识别码、结束位置识别码中的至少一种与
在构造当前的识别表达式之前构造之前的识别表达式所使用的开始位置识别码、类型识别
码、结束位置识别码中的至少一种是否相同,并在确定构造当前的识别表达式所将使用的
开始位置识别码、类型识别码、结束位置识别码中的至少一种与在构造当前的识别表达式
之前构造之前的识别表达式所使用的开始位置识别码、类型识别码、结束位置识别码中的
至少一种相同时,使用确定相同的构造之前的识别表达式所使用的开始位置识别码、类型
识别码、结束位置识别码中的至少一种构造当前的识别表达式。识别表达式包括用于识别
目标信息在待处理数据中的开始位置的开始位置识别表达式和用于识别目标信息在待处
理数据中的结束位置的结束位置识别表达式,构造识别表达式的步骤包括:使用确定相同
的构造之前的识别表达式所使用的开始位置识别码和类型识别码构造开始位置识别表达
式,并使用确定相同的构造之前的识别表达式所使用的结束位置识别码和类型识别码构造
结束位置识别表达式。目标信息包括host字段和cookie字段,其中,构造表达式的步骤包
括:使用开始位置识别码\r\n、类型识别码Host:、Cookie:和结束位置识别码[^\r]*\r\n来
构造host字段的开始位置识别表达式\r\nHost:和host字段的结束位置识别表达式\r\
nHost:[^\r]*\r\n、以及cookie字段的开始位置表达式\r\Cookie:和cookie字段的结束位
置识别表达式\r\nCookie:[^\r]*\r\n。所述方法包括识别根据目标信息确定的目标信息
的开始位置识别码、类型识别码、结束位置识别码中包括的字符,以存储识别的字符。识别
字符的步骤包括:确定当前识别的字符与在识别当前的字符之前识别的之前的字符或者与
对在识别当前的字符之前识别的之前的字符进行取反操作所得的结果是否相同,并在确定
当前识别的字符与在识别当前的字符之前识别的之前的字符或者与对在识别当前的字符
之前识别的之前的字符进行取反操作所得的结果相同时,不存储将当前识别的字符。所述
方法包括根据存储的字符构造开始位置识别码、类型识别码、结束位置识别码。接收的步骤
包括接收来自外部的超文本传送协议HTTP请求信息以作为待处理数据。所述方法包括根据
识别的目标信息在待处理数据中的位置从待处理数据中提取目标信息。
[0093] 概括而言,ASCII码识别,对于单周期八字节输入报文进行识别。对于host需要识别ASCII码(\r\nHost:),本方案采用内部存储进行ASCII码识别,存储地址对应输入报文的
ASCII码,存储数据对应host的7个ASCII码的识别标志,所以所需的存储容量为八个256x7b
内部ROM,即14kb存储空间,同时利用FPGA内部双口ROM的特性,实际仅需7kb的空间。随后,通过正则表达式识别,利用ASCII码识别输出,对数据中存在的正则表达式进行识别,输出
host开始及结束位置。通过查找表可以实现正则表达式单个ASCII码匹配,通过不同的连接
方式可以实现*(子表达式一次或多次)或+(子表达式零次或多次)操作,以满足报文提取的
需要。如图3所示,提取时可以通过正则表达式(\r\nHost:)识别host开始位置,使用(\r\
nHost:[^\r]*\r\n)识别host结束位置,即可得到报文host字段所在的位置。而且按复用的
思路,在识别host和cookie的位置时可,将开头公共部分(\r\n)的复用;在识别开始/结束
位置时,将中间Host/Cookie复用,在不影响查找结果的情况下,复用后仅消耗20份查找电
路。相较于复用前38份查找电路明显减少资源消耗。
[0094] 综上所述,本公开实施例通过使用FPGA实现内部缓存(ROM),通过映射对报文中各字节的ASCII码识别,可以进一步对符合正则表达式的字符串进行识别,至少具有以下技术
效果:
[0095] 1.在利用FPGA实现高速并行处理的同时,降低内部存储资源的消耗;
[0096] 2.在正则表达式拓展时,对相同ASCII码的识别资源和结果可以整合,节省内部存储资源(即在识别位于预设信息序列的不同位置的两个“o”时,仅需要输出一种识别标识符
即可);
[0097] 3.对[^\s]的识别可复用[\s]识别结果取反即可,从而可以避免占用的存储空间过度膨胀(其中[\s]可以被替换为任意字符);
[0098] 4.通过FPGA实现上述方法时逻辑级数最多仅1级,即使更高的时钟频率都能满足时序约束要求(即处理速度快,可以在较短的时钟周期内完成数据识别);
[0099] 5.通过复用正则表达式对应的判断电路可以使用较少的资源实现对多个复杂的正则表达式的判别,进一步减少信息识别所需的资源消耗。
[0100] 应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多
模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模
块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
[0101] 所属技术领域的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统
称为“电路”、“模块”或“系统”。
[0102] 此外,上述附图仅是根据本发明示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺
序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
[0103] 本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或
者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识
或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和构思由权利要
求指出。