1.一种基于FPGA的网络流量字符串自动匹配方法,其特征在于,所述FPGA包括RAM存储单元和多个字节比较器,所述方法包括:将待匹配的完整网络报文封装成私有消息报文,并发送给所述FPGA;基于FPGA对接收到的私有消息报文进行解封装,将所述私有消息报文中的字符串存储于RAM存储单元中;判断待匹配的完整网络报文是否需要分段匹配,若是,则将待匹配的完整网络报文分为若干个报文段,并将每一个报文段发送给对应的字节比较器,基于每一个字节比较器将报文段中的字符串与状态机中的模式串集进行匹配,输出匹配结果;FPGA根据每一个字节比较器输出的匹配结果,封装成私有消息返回;所述将待匹配的完整网络报文封装成私有消息报文,并发送给所述FPGA,包括:对待匹配的完整网络报文进行预处理,计算所述待匹配的完整网络报文的长度信息L,如果L≤MAX×R的乘积,则所述待匹配的完整网络报文不需要进行分段并行匹配;否则所述待匹配的完整网络报文需要进行分段并行匹配;其中,MAX表示模式串集中最长模式串的长度,R表示模式串集中模式串的个数;封装私有消息报文,所述私有消息报文包括私有消息头字段、消息类型type字段、并行匹配action字段、数据部分长度len字段和数据部分字段,所述并行匹配action字段为0表示不需要分段并行匹配,为1表示需要分段并行匹配。
2.根据权利要求1所述的基于FPGA的网络流量字符串自动匹配方法,其特征在于,所述将待匹配的完整网络报文封装成私有消息报文,并发送给所述FPGA,之前还包括:读取xml格式的模式串集配置文件,记录模式串集中最长模式串长度MAX和模式串个数R;根据模式串集生成状态信息表,将所述状态信息表存储在FPGA中的RAM存储单元,根据所述状态信息表生成状态机,同时将所述状态信息表备份存储在外部SSD中,所述状态信息表中存储所述模式串集中每一个模式串中的每一个字符的跳转状态,所述状态信息表包括goto状态信息表、fail状态信息表和out状态信息表。
3.根据权利要求1所述的网络流量字符串自动匹配方法,其特征在于,所述对接收到的私有消息报文进行解封装,将所述私有消息报文中的字符串存储于RAM中,包括:对接收到的私有消息报文进行解封装,读取其中并行匹配action字段的值,以及从数据部分字段提取待匹配报文,将待匹配报文中的字符转化为ASCII码值存储在FPGA的RAM存储单元中。
4.根据权利要求3所述的网络流量字符串自动匹配方法,其特征在于,所述判断待匹配的完整网络报文是否需要分段匹配,若是,则将待匹配的完整网络报文分为若干段,得到多个报文段,并将每一个报文段发送给对应的字节比较器,包括:当根据提取的并行匹配action字段确定待匹配报文需要分段并行匹配时,将待匹配报文均等划分为n个报文段,每一个报文段的长度为len/n,len为整个待匹配报文的长度,n为正整数;将第一个报文段起始地址即RAM存储单元中完整网络报文的起始地址和报文段长度传给第一个字节比较器,将RAM存储单元中完整网络报文起始地址向后偏移len/n长度的地址和报文段长度传给第二个字节比较器,以此类推,将每一个报文段的起始地址和报文段长度传给对应的字节比较器;每一个字节比较器将报文段中的字符逐一与状态机中的模式串集进行匹配,并输出匹配结果。
5.根据权利要求4所述的网络流量字符串自动匹配方法,其特征在于,还包括:当根据提取的并行匹配action字段确定待匹配报文不需要分段并行匹配时,将整个报文长度len和完整网络报文在RAM存储单元中的起始地址传给第一个字节比较器;第一个字节比较器将报文中的字符逐一与状态机中的模式串集进行匹配,并输出匹配结果。
6.根据权利要求4所述的网络流量字符串自动匹配方法,其特征在于,所述基于每一个字节比较器将报文段中的字符串与状态机中的模式串集进行匹配,输出匹配结果,还包括当每一个字节比较器比较到报文分段点时,继续越过分段点进行增量检测:在到达分段点时,FPGA初始化两个计数器S和T,S记录越过分段点的长度,每检测一个字符,S增加1个长度,计数器T负责记录分段点处的状态深度值D,假设i为分段点,则增量检测时T初始为D(i),其中,状态机中每个状态在创建时维持一个深度值D,记录当前状态与状态0的距离;在增量检测时,字节比较器每检测一个字符时将T的值增加1,比较T与当前字符在状态机中的状态深度值D,如果T与D相等则继续对下一字符进行检测;如果T与D不等,则再进一步比较D和S的大小;如果S小于D,将T的值更新为当前状态深度值D,并继续对下一个字符进行增量检测;如果S不小于D,则提前结束增量检测,输出匹配结果。
7.一种基于FPGA的网络流量字符串自动匹配装置,其特征在于,包括处理模块和FPGA,所述FPGA包括RAM存储单元和多个字节比较器;所述处理模块,用于将待匹配的完整网络报文封装成私有消息报文,并发送给所述FPGA;所述FPGA,用于对接收到的私有消息报文进行解封装,将所述私有消息报文中的字符串存储于RAM存储单元中;以及判断待匹配的完整网络报文是否需要分段匹配,若是,则将待匹配的完整网络报文分为若干个报文段,并将每一个报文段发送给对应的字节比较器;还用于根据每一个字节比较器输出的匹配结果,封装成私有消息返回;每一个字节比较器,用于将报文段中的字符串与状态机中的模式串集进行匹配,输出匹配结果;将待匹配的完整网络报文封装成私有消息报文,并发送给所述FPGA,包括:对待匹配的完整网络报文进行预处理,计算所述待匹配的完整网络报文的长度信息L,如果L≤MAX×R的乘积,则所述待匹配的完整网络报文不需要进行分段并行匹配;否则所述待匹配的完整网络报文需要进行分段并行匹配;其中,MAX表示模式串集中最长模式串的长度,R表示模式串集中模式串的个数;封装私有消息报文,所述私有消息报文包括私有消息头字段、消息类型type字段、并行匹配action字段、数据部分长度len字段和数据部分字段,所述并行匹配action字段为0表示不需要分段并行匹配,为1表示需要分段并行匹配。
8.根据权利要求7所述的网络流量字符串自动匹配装置,其特征在于,每一个字节比较器,还用于当每一个字节比较器比较到报文分段点时,继续越过分段点进行增量检测:在到达分段点时,FPGA初始化两个计数器S和T,S记录越过分段点的长度,每检测一个字符,S增加1个长度,计数器T负责记录分段点处的状态深度值D,假设i为分段点,则增量检测时T初始为D(i),其中,状态机中每个状态在创建时维持一个深度值D,记录当前状态与状态0的距离;在增量检测时,字节比较器每检测一个字符时将T的值增加1,比较T与当前字符在状态机中的状态深度值D,如果T与D不等,则再进一步比较D和S的大小;如果S小于D,将T的值更新为当前状态深度值D,并继续对下一个字符进行增量检测;如果S不小于D,则提前结束增量检测,输出匹配结果。