信息识别方法与只读内存转让专利
申请号 : CN202011056070.0
文献号 : CN112187935B
文献日 : 2023-02-07
发明人 : 高运
申请人 : 杭州迪普科技股份有限公司
摘要 :
权利要求 :
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任一项所述的~信息识别方法。
说明书 :
信息识别方法与只读内存
技术领域
背景技术
头部Host字段进行识别和源认证来进行防护。由于Host字段的内容、位置、长度不固定,如
何高效准确提取Host字段,是实现防护HTTP洪水攻击的关键问题。
态机)的正则表达式匹配,实现时需要执行正则表达式→NFA→DFA的转换步骤。基于DFA的
匹配有较高的处理速度,但是需要消耗较大的内存空间。基于NFA的匹配逻辑简单,如果设
计时基于通用处理器架构,则匹配速度较慢,远远达不到网络数据流量所需的识别速度要
求,对于报文单周期处理多字节的性能需求无法实现;如果使用FPGA(Field‑Programmable Gate Array,现场可编程门阵列)方式实现NFA方案,由于FPGA对时序、资源的要求严格,设
计时容易造成存储空间膨胀和逻辑级数过高的问题。
发明内容
率低或者存储资源需求多的问题。
符,所述识别标识符包括n位数据,第m位数据用于指示所述第二信息是否为预设信息序列
中的第m个预设信息,1≤m≤n;根据所述第一信息对应的N个识别标识符的值及排序确定所
述第一信息是否包括目标信息。
或报文Host字段结束位置,N=8。
ASCII码时,将所述识别标识符中的第m位数据输出为第一值。
值时输出第一值,其中,一个所述第一信息具有唯一的j值,1≤i≤N,j≥0;
式。
别标识符的值和顺序确定第一信息是否包括目标信息,可以利用较少的存储资源(N×n位
的识别标识符信息)和逻辑级数实现对第一信息的识别,在通过FPGA实现信息识别时,可以
在提高信息识别速率的同时,有效节省存储资源。
附图说明
的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据
这些附图获得其他的附图。
具体实施方式
全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结
构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许
多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可
以实践本公开的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方
法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知技术方案以避免喧宾夺主而使得本公开的各方面变得模糊。
理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个
硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器
装置中实现这些功能实体。
案。
别标识符的值和顺序确定第一信息是否包括目标信息,可以利用较少的存储资源(N×n位
的识别标识符信息)和逻辑级数实现对第一信息的识别,在通过FPGA实现信息识别时,可以
在提高信息识别速率的同时,有效节省存储资源。
即,在该实施例中,确定每个HTTP请求报文中是否包括Host字段的开始信息和Host字段的
结束信息,以便于后续确定Host字段的内容。当处理单周期HTTP请求报文时,N=8。
需要进行下一步处理的预设ASCII码。该识别标识符具有n位,第m位数据用于指示该第二信
息是否为预设信息序列中的第m个预设信息,1≤m≤n。
第二信息对应的识别标识符,识别标识符为只读内存的输出数据;其中,只读内存包括2M个
存储地址,每个存储地址用于映射一个ASCII码,只读内存在第二信息对应的映射结果为预
设信息序列中的第m个预设ASCII码时,将识别标识符中的第m位数据输出为第一值。
当该字节的数据输入只读内存时,只读内存将该字节的数据映射到这个256个存储地址中,
以确定该字节的数据的值(ASCII码)。确定一个字节的数据的ASCII码后,该只读内存通过
匹配该ASCII码是否为预设ASCII码(例如前文的“\r”、“\n”、“H”、“o”、“s”、“t”、“:”中的任意一个)输出识别标识符,识别标识符每个位的设置请参见上述示例。当一个字节的数据对
应一个只读内存(ROM)时,8个字节的数据总共需要占用8*256*7=14kb的ROM存储资源(存
储空间)。
算,进而实现对报文信息的高速处理。由以上分析可知,本公开实施例提供的方法仅需占用
较少的存储资源,避免了相关技术通过FPGA实现信息识别时对存储资源的大量占用,有效
在利用FPGA的高速处理性能的同时降低了对存储资源的消耗。
分别处理两个字节的数据(这两个字节的数据分别使用不同的输入端,但是共用256个存储
地址),每个字节对应一个7位的识别标识符,此时该两个字节的数据的识别仅需要占用
256*7=7kb的ROM存储资源。
8个字节的识别,进而在时钟频率达到160MHz时,实现10Gb/s的识别速率。
Host字段识别实施例中,由于Host字段的开始位置不确定,预设信息序列“\r\nHost:”中的第一个字符“\r”可以出现在HTTP请求报文的任一个字节,因此,需要对报文的全部字节对
应的识别标识符进行序列识别。
预设值时输出第一值,其中,一个第一信息具有唯一的j值,1≤i≤N,j≥0;然后,在n个判断电路的输出均为第一值时,预设级联电路阵列确定第一信息包括目标信息。
2字节对应的识别标识符进行识别,如果识别到代表“\n”的识别标识符,则第3个判断电路
对HTTP请求报文中的第3字节对应的识别标识符进行识别。以此类推,直至第7个判断电路
识别出报文中第7个字节对应的识别标识符代表“:”,则确定该部分报文中包括Host字段的
开始位置。
第3字节对应的识别标识符进行识别,如果识别到代表“\n”的识别标识符,则第3个判断电
路对HTTP请求报文中的第4字节对应的识别标识符进行识别。以此类推,直至第7个判断电
路识别出报文中第8个字节对应的识别标识符代表“:”,则确定该部分报文中包括代表Host
字段的开始位置的正则表达式(或者称为字符串)“\r\nHost:”。
一预设级联电路阵列32和第二预设级联电路阵列33,以实现对Host字段开始标识“\r\
nHost:”的识别和Host字段结束标识“\r\nHost:[^\r]*\r\n”的识别。在第一预设级联电路阵列32和第二预设级联电路阵列33均输出代表识别到正则表达式对应的字符串的输出结
果时,判断模块34判断识别到Host字段的位置并根据该位置并输出识别结果,以在后续处
理模块中提取出Host字段的内容并进行验证,防范洪水攻击等网络攻击。
于各判断电路均可以识别独立的ASCII码,通过不同的连接方式,可以实现“*”(子表达式出现一次或多次)或者“+”(子表达式出现零次或多次)的正则表达式判断设置,对于复杂的正
则表达式仅需要较少的判断电路即可实现。在一些实施例中,每个判断电路在判断输入的
识别标识符为预设值时,输出第一值(例如1),并向同一个预设级联电路阵列中级联的下一
级判断电路传递下一个识别标识符,此时,可以在全部判断电路的输出均为该第一值时确
定这些识别标识符对应的字节为目标信息;在判断输入的识别标识符不为该判断电路对应
的预设值时,既可以输出第二值(例如0)并向下一级判断电路传递下一个识别标识符,也可
以直接将该下一个识别标识符传递到预设级联电路阵列的第一级判断电路进行识别。利用
级联的判断电路对报文对应的识别标识符进行正则表达式识别的方式可以有多种,本公开
不以此为限。
现,本公开对此不作特殊限制。
判断电路。
和“\n”对应的判断电路,同时,第一个任务和第二个任务可以复用级联的“\r”、“\n”、“H”、“o”、“s”、“t”、“:”判断电路,第三个和第四个任务可以复用级联的“C”、“o”、“o”、“k”、“i”、“e”、“:”判断电路。
资源消耗。
以确定报文中是否存在预设信息,例如HOST字段的开始位置和结束位置、Cookie字段的开
始位置和结束位置等。
阵列FPGA(field programmable gate array),或者,可以被实现为例如中央处理单元CPU
的通用的处理单元。下文中,将以FPGA作为数据处理装置的示例性实施例进行描述。在这样
的示例性实施例中,接收单元110、表达式构造单元130和识别单元150以及将要描述的数据
出合理装置可以包括的其他单元和元件可以是FPGA中的实现相应的功能或操作的模块,或
者可以是连接到FPGA的实现相应功能或操作的独立的硬件。此外,与其他类型的处理单元
相比,普通的FPGA能够提供的资源可能有限,例如,可能具有内部存储容量相对较小、运行
时钟频率相对较低、单个处理周期处理性能相对较小等特点。
用目标信息的开始位置识别码、类型识别码、结束位置识别码来构造识别表达式,然后位置
识别单元150可以根据构造的识别表达式来识别目标信息在待处理数据中的位置。为了能
够区分接收的待处理数据,例如HTTP请求是否为进行洪水攻击的请求,目标信息可以为包
括在HTTP请求的头部处的host字段和/或cookie字段。下文中,将以HTTP请求作为待处理数
据,host字段和cookie字段为目标信息为例进行详细描述。
字段在HTTP请求中的结束位置的结束位置识别表达式:
cookie字段在HTTP请求中的结束位置的结束位置识别表达式:
段开始位置识别表达式、host字段结束位置识别表达式、cookie字段开始位置识别表达式、
cookie字段结束位置识别表达式中的相同的部分定义为子表达式,例如:
子表达式和第四(结束位置)子表达式来构造host字段结束位置识别表达式、使用第一(开
始位置)子表达式和第三(cookie类型)子表达式来构造cookie字段开始位置识别表达式、
使用第一(开始位置)子表达式、第三(cookie类型)子表达式和第四(结束位置)子表达式来
构造cookie字段结束位置识别表达式。然而,也可以以其他方式来定义子表达式,例如,第
四(结束位置)子表达式也可以被构造为\r\n…[^\r]*\r\n。
的第一(开始位置)子表达式与用于构造cookie字段开始位置识别表达式的第一(开始位
置)子表达式相同,所以当表达式构造单元130在利用第一(开始位置)子表达式和第二
(host类型)子表达式构造了host字段开始位置识别表达式之后构造cookie字段开始位置
识别表达式时,表达式构造单元130可以重复使用已经在之前构造host字段开始位置识别
表达式时使用的第一(开始位置)子表达式和新的第三(cookie类型)子表达式,从而可以不
需要将第一(开始位置)子表达式重新读取到例如从诸如FPGA的数据处理装置的内部存储
器(例如缓存)ROM中,或者可以不需要从诸如FPGA的数据处理装置的内部存储器(例如缓
存)ROM中重新读取第一(开始位置)子表达式。
装置可以包括字符识别单元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级,即使更高的时钟频率都能满足时序约束要求。
例如FPGA的内部存储器/缓存ROM中的字符\r、\n、H、o、s、t、:来构造host字段的开始位置子表达式\r\n、host类型子表达式Host:、结束位置子表达式:[^\r]*\r\n。
的位置从待处理数据中提取目标信息。
情况下,通过上述的字符整合和子表达式复用而仅后仅消耗20份查找电路来创建正则表达
式。相较于不进行复用的方式所消耗的38份查找电路,根据示例性实施例的数据处理装置
明显减少资源消耗。
码、结束位置识别码来构造识别表达式;位置识别单元,被构造为根据构造的识别表达式来
识别目标信息在待处理数据中的位置。所述表达式构造单元被构造为确定构造当前的识别
表达式所将使用的开始位置识别码、类型识别码、结束位置识别码中的至少一种与在构造
当前的识别表达式之前构造之前的识别表达式所使用的开始位置识别码、类型识别码、结
束位置识别码中的至少一种是否相同,并在确定构造当前的识别表达式所将使用的开始位
置识别码、类型识别码、结束位置识别码中的至少一种与在构造当前的识别表达式之前构
造之前的识别表达式所使用的开始位置识别码、类型识别码、结束位置识别码中的至少一
种相同时,使用确定相同的构造之前的识别表达式所使用的开始位置识别码、类型识别码、
结束位置识别码中的至少一种构造当前的识别表达式。识别表达式包括用于识别目标信息
在待处理数据中的开始位置的开始位置识别表达式和用于识别目标信息在待处理数据中
的结束位置的结束位置识别表达式,其中,表达式构造单元被构造为使用确定相同的构造
之前的识别表达式所使用的开始位置识别码和类型识别码构造开始位置识别表达式,并使
用确定相同的构造之前的识别表达式所使用的结束位置识别码和类型识别码构造结束位
置识别表达式。目标信息包括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。
达式来识别目标信息在待处理数据中的位置。构造识别表达式的步骤包括:确定构造当前
的识别表达式所将使用的开始位置识别码、类型识别码、结束位置识别码中的至少一种与
在构造当前的识别表达式之前构造之前的识别表达式所使用的开始位置识别码、类型识别
码、结束位置识别码中的至少一种是否相同,并在确定构造当前的识别表达式所将使用的
开始位置识别码、类型识别码、结束位置识别码中的至少一种与在构造当前的识别表达式
之前构造之前的识别表达式所使用的开始位置识别码、类型识别码、结束位置识别码中的
至少一种相同时,使用确定相同的构造之前的识别表达式所使用的开始位置识别码、类型
识别码、结束位置识别码中的至少一种构造当前的识别表达式。识别表达式包括用于识别
目标信息在待处理数据中的开始位置的开始位置识别表达式和用于识别目标信息在待处
理数据中的结束位置的结束位置识别表达式,构造识别表达式的步骤包括:使用确定相同
的构造之前的识别表达式所使用的开始位置识别码和类型识别码构造开始位置识别表达
式,并使用确定相同的构造之前的识别表达式所使用的结束位置识别码和类型识别码构造
结束位置识别表达式。目标信息包括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请求信息以作为待处理数据。所述方法包括根据
识别的目标信息在待处理数据中的位置从待处理数据中提取目标信息。
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份查找电路明显减少资源消耗。
效果:
即可);
模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模
块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
称为“电路”、“模块”或“系统”。
序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识
或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和构思由权利要
求指出。