首页> 中国专利> 基于FPGA和CPU协同工作的高速关键字过滤方法

基于FPGA和CPU协同工作的高速关键字过滤方法

摘要

本发明公开了一种基于FPGA和CPU协同工作的高速关键字过滤方法,在CPU中,数据发送线程和数据接收线程是两个线程,所述的数据发送线程中包括:关键字设置、关键字下发及缓存、关键字过滤、级联关系判断及结果处理、关键字过滤的结果上报。所述的数据接收线程一直在等待FPGA端是否有上报的关键字过滤结果的数据包;如果有则通过对外接口将过滤的结果发送给数据源端。本发明采用CPU和FPGA共同实现关键字过滤,针对多会话同时过滤需要维护不同会话的过滤现场,做到不同会话现场快速切换。已达到多会话、多关键字的快速过滤。利用CPU和FPGA协同工作,充分利用其各自特点,是过滤性能达到5.6Gbps。具有多会话,多关键字过滤速度快、过滤精准等优点。

著录项

  • 公开/公告号CN114968872A

    专利类型发明专利

  • 公开/公告日2022-08-30

    原文格式PDF

  • 申请/专利号CN202210509758.2

  • 发明设计人 毕顺利;吴淑艳;

    申请日2022-05-11

  • 分类号G06F13/38(2006.01);G06F13/42(2006.01);G06F15/163(2006.01);G06F15/78(2006.01);

  • 代理机构天津市北洋有限责任专利代理事务所 12201;

  • 代理人李丽萍

  • 地址 300202 天津市河西区泰山路6号

  • 入库时间 2023-06-19 16:36:32

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2023-05-30

    著录事项变更 IPC(主分类):G06F13/38 专利申请号:2022105097582 变更事项:申请人 变更前:天津光电聚能通信股份有限公司 变更后:天津光电聚能通信股份有限公司 变更事项:地址 变更前:300392 天津市滨海新区滨海高新区神州大道139号1层4号厂房 变更后:300392 天津市滨海新区滨海高新区神舟大道139号1层4号厂房

    著录事项变更

  • 2023-02-17

    著录事项变更 IPC(主分类):G06F13/38 专利申请号:2022105097582 变更事项:申请人 变更前:天津光电聚能专用通信设备有限公司 变更后:天津光电聚能通信股份有限公司 变更事项:地址 变更前:300202 天津市河西区泰山路6号 变更后:300392 天津市滨海新区滨海高新区神州大道139号1层4号厂房

    著录事项变更

  • 2022-09-16

    实质审查的生效 IPC(主分类):G06F13/38 专利申请号:2022105097582 申请日:20220511

    实质审查的生效

说明书

技术领域

本发明属于数据信息安全应用领域,采用FPGA和CPU协同工作,涉及一种高速数据流关键字过滤的实现方法。

背景技术

目前的关键字过滤多采用高性能的CPU实现,通过软件实现的方法,对数据报文进行查找。采用CPU实现速率慢,不能够满足高速的数据传输性能;内存占用率高,影响设备的整体性能和功耗。现有的查找技术,多局限于当前数据包报文的过滤,很难做到多数据包连接进行关键字过滤,当过滤线程多,CPU的能力明显的不足。

随着数据通信业务类型越来越多,信息安全问题日益突出。在通信过程中一些敏感信息、词汇可能会夹杂在正文中进行传输,造成安全信息泄露。为了防止此类事情的发生需要对通信过程中的数据报文内容进行过滤,看是否存在关键字。当前的关键字过滤技术主要采用CPU来实现,CPU对通信过程中的关键字进行过滤,但是CPU在处理此类事件的时候速率较慢,严重影响了数据通信速率。

发明内容

针对上述现有技术,本发明提出了一种高速数据流关键字过滤实现方法,采用CPU和FPGA共同实现关键字过滤,其中,充分发挥FPGA可以用于处理速率较高场合的特点进行关键字过滤,同时采用CPU处理一些事务型管理。

为了解决上述技术问题,本发明提出的一种基于FPGA和CPU协同工作的高速关键字过滤方法,在CPU中,数据发送线程和数据接收线程是两个线程,所述的数据发送线程中包括以下步骤:

1)关键字设置:每个会话设置1-8组关键字,每组关键字长度为1-32byte,FPGA内部缓存中每个会话关键字配置空间为256byte,每组所述关键字均配置有对应会话号,FPGA内部缓存中最多支持64个会话;接收电脑通过串口配置的关键字,该关键字的长度记为L;判断L的大小,

如果L<32byte,用KEY_MASK指示关键字有效长度,生成关键字KEY及其关键字掩码KEY_MASK,执行步骤2);

如果32byte<L≤256byte,将关键字空间进行级联,生成关键字KEY及其关键字掩码KEY_MASK,并以DATA_MASK用于指示关键字之间的级联关系,执行步骤2);

如果L>256byte,向电脑发回关键字长度超长的提示;

2)关键字下发:将生成的关键字的会话号、关键字KEY、关键字掩码KEY_MASK和以DATA_MASK表示的关键字级联关系通过PCIE下发至FPGA内部缓存中;

与此同时,CPU判断当前会话的数据包的文件格式是否为纯文本数据格式,如果是纯文本数据格式,将当前会话的数据包通过PCIE下发至FPGA内部缓存中;如果不是纯文本数据格式,将当前会话的数据包进行缓存,直至当前会话的数据包接收完毕,将非文本数据格式的文件数据转换为纯文本数据格式的数据通过PCIE下发至FPGA内部缓存中;

3)关键字过滤:所述FPGA根据数据包中会话号对应的关键字信息对接收到CPU的数据包进行关键字过滤;

4)判断完成过滤的关键字是否存在级联关系DATA_MASK,如果存在,则进入级联结果处理,如果不存在,则执行步骤5);

级联结果处理:首先判断关键字1和关键字2是否存在级联关系,如果关键字1和关键字2不存在级联则输出关键字1过滤的结果进入关键字2和关键字3级联判断状态,如果关键字1和关键字2存在级联关系,则直接进入关键字2和关键字3级联判断状态,在关键字2和关键字3级联判断状态判断关键字2和关键字3的级联状态,如果关键字2和关键字3不存在级联关系,则需要输出关键字1和关键字2级联的关系以及过滤结果后进入关键3与关键字4级联判断状态。如果不存在级联关系直接进入关键3与关键字4级联判断状态以此类推,直到判断所有关键字过滤结果与级联的关系,输出级联和过滤结果,并执行步骤5);

步骤5)将关键字过滤的结果上报给CPU,上报的结果包括过滤命中的结果、会话号、关键字命中的位置,如果完成过滤的关键字存在有级联关系DATA_MASK,则还包括级联的结果;

所述的数据接收线程一直在等待FPGA端是否有上报的关键字过滤结果的数据包;如果有,则通过对外接口将过滤的结果发送给数据源端。

进一步讲,本发明所述的基于FPGA和CPU协同工作的高速关键字过滤方法,其中:

步骤2)中,将生成的关键字信息以及会话号,通过PCIE下发至FPGA内部缓存中,当有数据包来临时按照会话号读取关键字信息。用户按照会话号配置关键字过滤信息,关键字信息在FPGA中按照会话号、关键字KEY、关键字掩码KEY_MASK和关键字级联关系DATA_MASK进行存储;当数据包来临时,根据数据包中关键字的会话号在FPGA中取出当前会话的关键字信息进行更新。

步骤3)的过程如下:

3-1)按照会话号更新关键字:根据数据包中的会话号,在关键字缓存中取出当前会话号的关键字信息;

3-2)判断接收到的数据包的包序号:取出会话号对应的关键字信息后,判断接收到的数据包是否为首包,如果是首包则判断数据包长度,

如果不是首包则按照数据包的会话号出栈,堆栈中包括已经过滤的位置和未完成过滤的结果;

3-3)进行数据包长度判断,判断数据包长度是否大于32byte,如果≥32byte则执行步骤3-4)进行关键字过滤,如果<32byte则缓存当前数据包,按照当前数据包的大小左移更新缓存空间,执行步骤3-4)进行关键字过滤;

3-4)关键字过滤:根据按照会话号取出的关键字信息在数据包中进行关键字的过滤,首先,将接收到的数据包复制8份,每组关键字一份。将每份按照关键字的最大长度复制为32路,每路的偏移地址为0B,1B,2B,3B,……,30B,31B,按照不同的地址偏移进行并行关键字过滤,从而遍历数据包中所有的关键字组合;

3-5)判断过滤是否完成:如果当前数据包过滤完成则进入过滤状态入栈,如果没有完成,则需要等待关键字过滤,直至完成;

3-6)过滤状态入栈:将过滤的会话号、已经过滤的位置、未完成过滤的结果放入堆栈中,等待下一次同一会话的数据包来临再将过滤状态出栈。

在步骤3-2)中,按照数据包的会话号出栈是:对于未完成的关键字过滤结果,将过滤的会话号、已经过滤的位置、未完成过滤的结果放入堆栈中,等当前会话的下一包数据来后,将入栈的信息出栈,和当前数据一起进行数据的过滤,以解决关键字出现在相邻数据包的情况。

本发明中,所述FPGA采用的时钟为100MHz,数据流位宽为256bit,理论速率为100MHZ*256bit≈25Gbps;采用64会话,8组关键字,以每组关键字0~32B长度进行过滤,在万兆网通信下过滤速率为5.6Gbps。

与现有技术相比,本发明的有益效果是:

本发明公开了一种基于FPGA和CPU协同工作的高速关键字过滤方法,所述方法通过对关键字检索过程中功能的划分,利用CPU高效的业务处理能力和FPGA高速的运算能力,实现了高速关键字过滤实现方法。在CPU端实现文件类型的转换,将word、excel、PPT、xml等数据包进行缓存、转换,最终得到纯文本格式的数据包。充分利用FPGA的并行工作能力,在FPGA内部实现高速的关键字过滤引擎。过滤引擎包含关键字过滤、数据包拼接过滤、数据包缓存过滤、关键字拼接过滤。充分利用FPGA内部丰富RAM资源,针对多会话同时过滤需要维护不同会话的过滤现场,做到不同会话现场快速切换。已达到多会话、多关键字的快速过滤。在过滤过程中支持多会话多关键字同时查。利用CPU和FPGA协同工作,充分利用其各自特点,是过滤性能达到5.6Gbps。具有多会话,多关键字过滤速度快、过滤精准等优点。

附图说明

图1是本发明关键字过滤全流程图关键字过滤实现框图;

图2是本发明中关键字在FPGA内部存储格式;

图3是本发明中FPGA内部关键字过滤流程图;

图4是本发明中小数据包缓存原理图;

图5是本发明中多关键字过滤FPGA实现框图;

图6是本发明中多地址偏移并行过滤示意图;

图7是本发明中关键字级联结果处理。

具体实施方式

下面结合附图及具体实施例对本发明做进一步的说明,但下述实施例绝非对本发明有任何限制。

本发明的一种基于FPGA和CPU协同工作的高速关键字过滤方法的设计思路是:基于PCIE通信,将CPU作为主设备,将FPGA作为从设备协同工作,从而实现高速数据流关键字过滤。该过滤方法可以对多会话、多关键字、多数据格式进行关键字过滤。其中,CPU对于不是纯文本数据格式的数据包进行数据格式转换,转换为纯文本数据包格式,FPGA对CPU下发的数据流进行高速关键字过滤。CPU和FPGA之间的数据接口为PCIE,CPU内部有两个线程:一个数据发送线程,用于CPU的数据通过PCIE发送给FPGA;一个是数据接收线程,用于CPU通过PCIE读取FPGA中的关键字过滤结果。参见图1,本发明过滤方法包括以下步骤:

一、所述的数据发送线程,包括以下步骤:

1、关键字设置:本发明中,每个会话支持8组关键字,每组关键字大小为1-32byte,FPGA内部缓存中支持的最大的关键字配置空间为32byte*8=256byte。设置关键字需要指明关键字的会话号,本发明中,最大可以支持64个会话。

CPU接收电脑通过串口配置的关键字,每条关键字的空间占用最小为32byte,所有的关键字占用总空间不能大于256byte。

如果关键字的长度小于32byte,则用KEY_MASK指示关键字有效长度,生成关键字KEY及其关键字掩码KEY_MASK,KEY_MASK的作用是去掉关键字中不需要过滤的部分,使关键字的过滤范围为0B~32B。

如果关键字的长度在32byte至256byte,则需要将关键字空间进行级联,生成关键字KEY及其关键字掩码KEY_MASK,并以DATA_MASK用于指示关键字之间的级联关系。在实际使用过程中,引入了DATA_MASK用于指示关键字之间的级联关系,这样的话,关键字的过滤范围最大可以达到32B*8=256B。此项应用牺牲了过滤的关键字条数来换取更长的关键字对正文进行过滤。

如果关键字的长度大于256byte,则向电脑发回关键字长度超长的提示。

2、关键字下发及缓存:将指明的关键字的会话号、关键字KEY、关键字掩码KEY_MASK和以DATA_MASK表示的关键字级联关系通过PCIE下发至FPGA内部缓存中,并以表格的方式存放在FPGA内部缓存中,存储格式如图2所示,内部最多支持64个会话。

当有数据包来临时按照会话号读取关键字信息,用户按照会话号配置关键字过滤信息,关键字信息在FPGA中按照会话号、关键字KEY、关键字掩码KEY_MASK和关键字级联关系DATA_MASK进行存储;当数据包来临时,根据数据包中关键字的会话号在FPGA中取出当前会话的关键字信息进行更新。

与此同时,CPU接收到数据上游发送的数据流,从数据包包头信息中判断接收到的数据是纯文本数据还是其他格式的数据,因为,数据上游下发的数据源可能是word、excel、PPT、xml等,这些格式的数据进行发送不能够被FPGA正确识别,需要进行格式转换后才可以被识别。如果是纯文本数据格式,将当前会话的数据包通过PCIE下发至FPGA内部缓存中;如果数据格式转换程序发现某会话数据格式不是纯文本格式的数据,需要将当前会话的数据包进行缓存,直至当前会话的文件数据包接收完成,将非文本数据格式的文件数据转换为纯文本数据格式的数据通过PCIE下发至FPGA内部缓存中。

3、关键字过滤:关键字过滤程序进行关键字过滤,所述FPGA接收到数据包后从中取出会话号,按照会话号在关键字缓存中取出关键字信息,用提取出的关键字信息对接收到CPU的数据包进行关键字过滤。如图3所示,具体过程如下:

按照会话号更新关键字:根据接收到的数据包中的会话号,在关键字缓存中取出当前会话号的关键字信息,进行关键字更新。

数据包为首包的判断:FPGA内部的关键字过滤程序接收待过滤的关键字,判断接收到的数据包的包序号,取出会话号对应的关键字信息后,判断接收到的数据包是否为首包,如果是首包则判断数据包长度,如果不是首包则按照数据包的会话号出栈,即对于未完成的关键字过滤结果,将过滤的会话号、已经过滤的位置、未完成过滤的结果放入堆栈中,等当前会话的下一包数据来后,将入栈的信息出栈,和当前数据一起进行数据的过滤,以解决关键字出现在相邻数据包的情况。

对于未完成的关键字过滤,本发明中,引入了计算机中堆栈的概念,对于未完成过滤的关键字处理程序,将过滤的会话号、已经过滤的位置、未完成过滤的结果等放入堆栈中,等当前会话的的下一包数据来后,将入栈的信息出栈,和当前数据包一起进行数据的过滤。这样能够解决关键字出现在相邻数据包的情况。如需要过滤的关键字为0x123456,一个数据包的末尾数据为0x123,同一个会话的下一包数据为0x456,第一包过滤未完成,匹配了一半的关键字,数据流中止,下一数据包可能是别的会话的数据包。所以对于未完成的过滤需要记录是哪个会话的数据包,已经匹配了一半的关键字,过滤结果未完成,将未完成过滤的结果放入堆栈中。等0x456数据包来临后,将未完成过滤的结果从堆栈中取出,恢复之前的过滤状态,则能够正确命中关键字0x123456;

判断数据包长度:判断数据包长度是否大于32byte,如果≥32byte则进行关键字过滤。如果<32byte则缓存当前数据包,按照当前数据包的大小左移更新缓存空间,然后进行关键字过滤。

在数据传输的过程中,不能够保证每个数据包的大小都能够达到32byte以上,因此,在FPGA内部对每个会话建立了32B的缓存空间(如图4所示),用于缓存数据传输过程中的小数据包。小数据包缓存采用左移拼接缓存技术,保证数据包之间能够无缝链接。

在进行关键字过滤开始前,为每个会话建立一个全零的32byte的缓存空间,对于接收到的数据包判断是否为小数据包,小数据包为数据长度小于32byte的数据包。以连续收到的小数据包为例,收到第一包小数据包则将当前数据包放置在换缓存尾部,然后将32byte的缓存空间的数据进行关键字过滤。当收到第二包数据包为小数据包,将缓存空间的数据左移当前接收数据包长度本示例为8byte,将接收到的8byte放置在左移后256byte尾部8字节。再进行关键字过滤。上述过程虽然存在重复过滤的过程,但是依赖于FPGA的高速运算能力,在小包时能够满足需求。不会影响整体链路速度。

例如:需要进行检索的关键字是0x0102030405060708;但是数据源端在发送数据时将数据包才分为0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08八个数据包向下发送,而且数据包较小利用堆栈较为复杂,因此针对此种数据包利用缓存重复过滤技术。收到第一包数据0x01数据包长度小于32,将数据包放入缓存空间进行过滤,过滤的缓存数据为0x0000000000000001;没有关键字,收到第二包继续放入缓存空间,过滤的数据为0x0000000000000102;以此类推,当全部收到0x0102030405060708则可以命中关键字。

关键字过滤:如图5和图6所示,根据按照会话号取出的关键字信息在数据包中进行关键字的过滤,本发明中有八组关键字,首先,将接收到的数据包复制8份,每组关键字一份,分发给8组关键字过滤程序,则将接收到的数据流复制8分,如图5所示。在每组关键字过滤程序需要支持32B的关键字长度,则需要按照不同的数据偏移进行关键字过滤。多地址偏移关键字过滤如图6所示,接收到的数据流复制32路进行关键字的并行过滤。每路的过滤起始偏移地址为0B,1B,2B,3,……,30B,31B,按照不同的地址偏移进行并行关键字过滤,这样可以遍历数据流中所有的关键字组合,做到不漏检。

判断过滤是否完成:FPGA流程中FPGA过滤程序外部需要等待关键字过滤是否完成,如果当前数据包过滤完成则进入过滤状态入栈,如果没有完成,则需要等待关键字过滤,直至完成。

过滤状态入栈:数据过滤过程中有32路程序进行不同的地址偏移进行关键字过滤。本会话的数据包结束,有的过滤程序并未完成关键字过滤,例如关键字32B长度,但是有的地址偏移最后剩余的关键字长度小于32B,则过滤数据不完全,因此,将过滤的会话号、已经过滤的位置、未完成过滤的结果放入堆栈中,等待下一次同一会话的数据包来临再将过滤状态出栈。做到关键字在相邻数据包也能够检索命中。

4、关键字级联判断:如图7所示,判断完成过滤的关键字是否存在级联关系DATA_MASK,如果存在,则进入级联结果处理程序,如果不存在,则进入过滤结果上报程序。

级联结果处理程序:当设置的关键字长度大于32B的时候,就需要用到关键字级联,以得到长度更长的关键字长度。关键字级联主要功能实现级联结果处理程序。首先判断关键字1和关键字2是否存在级联关系,如果关键字1和关键字2不存在级联则输出关键字1过滤的结果进入关键字2和关键字3级联判断状态。如果关键字1和关键字2存在级联关系,则直接进入关键字2和关键字3级联判断状态,在关键字2和关键字3级联判断状态判断关键字2和关键字3的级联状态,如果关键字2和关键字3不存在级联关系,则需要输出关键字1和关键字2级联的关系以及过滤结果后进入关键3与关键字4级联判断状态。如果不存在级联关系直接进入关键3与关键字4级联判断状态。以此类推,在当前状态需要判断与下一关键字级联关系,存在级联进入下一状态判断,不存在级联输出与当前状态关键字级联的关键字过滤结果,直到判断所有关键字过滤结果与级联的关系,输出级联和过滤结果,

5、过滤结果上报程序:将关键字过滤的结果上报给CPU,上报的结果包括过滤命中的结果、会话号、关键字命中的位置等。如果完成过滤的关键字存在有级联关系DATA_MASK,则还包括级联的结果。

二、所述的数据接收线程:一直在等待FPGA端是否有上报的关键字过滤结果的数据包;如果有,则通过对外接口将过滤的结果发送给数据源端。

综上,本发明提出的过滤方法采用CPU和FPGA协同工作,不同的处理器完成不同的处理任务,专事专干,提高了设备性能。充分利用CPU的事物处理能力和FPGA的并行处理能力,在FPGA实现过程中,利用面积换取速度,多程序并行运行达到高速的过滤速率,实现了多会话多关键字过滤,根据关键字设置可以准确的过滤出数据包关键字出现的位置,并上传过滤结果。本发明中,在FPGA内部采用的时钟为100MHz,数据流位宽为256bit,理论速率为100MHZ*256bit≈25Gbps能够适应大多数的应用场景,在实测过程中采用64会话,8组关键字,每组关键字0~32B长度进行过滤,能够正确过滤到关键字信息,在万兆网通信下过滤速率为5.6Gbps。

尽管上面结合附图对本发明进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨的情况下,还可以做出很多变形,这些均属于本发明的保护之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号