CN116366478B - 一种基于fpga的数据包对比去重方法 - Google Patents
一种基于fpga的数据包对比去重方法 Download PDFInfo
- Publication number
- CN116366478B CN116366478B CN202310640501.5A CN202310640501A CN116366478B CN 116366478 B CN116366478 B CN 116366478B CN 202310640501 A CN202310640501 A CN 202310640501A CN 116366478 B CN116366478 B CN 116366478B
- Authority
- CN
- China
- Prior art keywords
- message
- processed
- data packet
- messages
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 37
- 238000012546 transfer Methods 0.000 claims abstract description 4
- 239000008186 active pharmaceutical agent Substances 0.000 claims description 38
- 238000004422 calculation algorithm Methods 0.000 claims description 11
- 230000007704 transition Effects 0.000 claims description 8
- 239000000284 extract Substances 0.000 claims description 6
- 238000003491 array Methods 0.000 claims description 5
- 230000005540 biological transmission Effects 0.000 claims description 5
- 238000004891 communication Methods 0.000 claims description 3
- 125000004122 cyclic group Chemical group 0.000 claims description 2
- 230000006870 function Effects 0.000 description 20
- 238000010586 diagram Methods 0.000 description 11
- 230000008569 process Effects 0.000 description 10
- 238000004364 calculation method Methods 0.000 description 9
- 238000004590 computer program Methods 0.000 description 7
- 238000012545 processing Methods 0.000 description 7
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 230000004075 alteration Effects 0.000 description 2
- 230000008030 elimination Effects 0.000 description 2
- 238000003379 elimination reaction Methods 0.000 description 2
- 101100217298 Mus musculus Aspm gene Proteins 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008094 contradictory effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/02—Capturing of monitoring data
- H04L43/028—Capturing of monitoring data by filtering
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/08—Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
- H04L43/0876—Network utilisation, e.g. volume of load or congestion level
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Environmental & Geological Engineering (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提供一种基于FPGA的数据包对比去重方法,包括:FPGA模块计算两个待处理数据包中的当前两个报文载荷的哈希值,比较两个哈希值是否相同,返回比较结果;PC端根据比较结果和状态转移方程,计算当前两个报文的RML值和属性信息,遍历两个待处理数据包中的所有报文;基于递归函数计算出相同报文和不同报文分别在两个待处理数据包中的位置信息,并提取相同报文和不同报文,存储到新数据包中。本发明针对不同设备的数据包对比去重需求,提出了一种创新性解决方案,由于不同设备的数据包头部信息可能不同,数据包的对比去重具有很大的难度,本发明提出针对数据包的荷载部分做对比以判断报文是否相同,完成数据包的对比去重工作。
Description
技术领域
本发明涉及信息安全领域,更具体地,涉及一种基于FPGA的数据包对比去重方法。
背景技术
随着大数据和计算机网络的发展,网络中的数据流量变得越来越多,网络中不同节点的设备也越来越来,基于网络安全和数据包转发的要求,对数据包的处理流程变得越来越多,数据包经过越多的设备,产生的额外信息就越来越多,有可能产生额外的数据包,而这些额外数据包中通常包含设备对于接收转发数据包的处理信息,这些处理信息对于我们分析设备功能,了解设备运行状态有重要作用。通常这些额外数据包的数量非常少,在数据流中的位置可能不固定,如果数据包的数量过多,会给我们定位和分析数据包带来很大的难度,人工检索的难度太高,而现有的数据包分析软件如wireshark等,有单个数据包解析和筛选功能,可以根据数据包五元组,关键字等检索单个数据包,却没有两个数据包对比去重功能。同时经过不同设备的数据包的头部信息可能有所改变,如转发工作需要修改ip地址等,所以不能以整个报文的内容判断两个报文是否相同。
发明内容
本发明针对现有技术中存在的技术问题,提供一种基于FPGA的数据包对比去重方法,包括:
在PC端获取两个待处理数据包的长度,分别循环调用算法从两个待处理数据包中获取一个报文,发送给FPGA模块;
FPGA模块计算两个报文载荷的哈希值,比较两个哈希值是否相同,向所述PC端返回比较结果;
PC端根据所述比较结果和动态规划的状态转移方程,计算当前两个报文的RML值,并将当前两个报文的属性信息保存于数组DS中,遍历两个待处理数据包中的所有报文,获得所有报文的RML值和属性信息,所述RML值表示到当前两个报文的位置处,两个待处理数据包的重复报文长度;
根据数组DS和两个待处理数据包的长度,基于递归函数计算出相同报文和不同报文分别在两个待处理数据包中的位置信息;
以所述位置信息为索引,分别从两个待处理数据包中提取相同报文和不同报文,存储到新数据包中。
本发明提供的一种基于FPGA的数据包对比去重方法,针对不同设备的数据包对比去重需求,提出了一种创新性解决方案,由于不同设备的数据包头部信息可能不同,数据包的对比去重具有很大的难度,本发明提出针对数据包的荷载部分做对比以判断报文是否相同,完成数据包的对比去重工作。
附图说明
图1为本发明提供的一种基于FPGA的数据包对比去重方法流程图;
图2为FPGA模块对两个报文的比较过程示意图;
图3为MRD包对应的TLP包的结构示意图;
图4为MWR包对应的TLP包的结构示意图;
图5为计算两个报文之间的RML值和属性信息的过程示意图;
图6为获取相同报文和不同报文位置信息的过程示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。另外,本发明提供的各个实施例或单个实施例中的技术特征可以相互任意结合,以形成可行的技术方案,这种结合不受步骤先后次序和/或结构组成模式的约束,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时,应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
图1为本发明提供的一种基于FPGA的数据包对比去重方法流程图,如图1所示,方法包括:
S1,在PC端获取两个待处理数据包的长度,分别循环调用算法从两个待处理数据包中获取一个报文,发送给FPGA模块。
作为实施例,所述获取两个待处理数据包的长度,分别循环调用算法从两个待处理数据包中获取一个报文,发送给FPGA(Field-Programmable Gate Array,现场可编程逻辑门阵列)模块,包括:构建一个二维数组RML[i][j],用于保存第一个待处理数据包中从第一个报文到第i个报文和第二个待处理数据包中从第一个报文到第j个报文之间的重复报文长度,且对RML[i][j]初始化;基于两层循环调用的方式分别从第一个待处理数据包和第二个待处理数据包中提取一个报文,且将提取的两个报文发送给FPGA模块;所述两层循环调用方式是指先提取P1和Q1、Q2、....、Qj、....、Qn,然后提取P2和Q1、Q2、....、Qj、....、Qn,再提取Pi和Q1、Q2、....、Qj、....、Qn,以此类推,直到提取Pm和Q1、Q2、....、Qj、....、Qn,进行两个报文的比较,其中,Pi为第一个待处理数据包的第i个报文,Qj为第二个待处理数据包的第j个报文,m为第一个待处理数据包的长度,n为第二个待处理数据包的长度。
可理解的是,在PC端进行软件初始化参数,获取第一个待处理数据包P和第二个待处理数据包Q的长度m、n,然后新建二维数组RML[i][j](0≤i<m,0≤j<n),RML[0][j]和RML[i][0]全部初始化为0,然后再通过一个二次循环,遍历两个数据包中的任意两个报文Pi和Qj,计算RML[i][j],其中,RML[i][j]表示第一个待处理数据包P中前i个报文和第二个待处理数据包Q中前j个报文中相同报文的最大数量,初始时先比较一个报文,将两个数据包中的第一个报文发送到FPGA模块中。
在比较过程中,PC端通过两层循环的方式分别从第一个待处理数据包中提取一个报文和从第二个待处理数据包中提取一个报文。即先比较P1和第二个待处理数据包中的每一个报文,然后比较P2和第二个待处理数据包中的每一个报文,以此类推,比较Pm和第二个待处理数据包中的每一个报文,形成两层循环。PC端将分别从第一个待处理数据包中提取的报文和从第二个待处理数据包中提取的报文发送给FPGA模块。
S2,FPGA模块计算两个报文载荷的哈希值,比较两个哈希值是否相同,向所述PC端返回比较结果。
作为实施例,所述FPGA模块计算两个报文载荷的哈希值,比较两个哈希值是否相同,返回比较结果,包括:FPGA模块接收到报文数据时,检查所述报文数据中是否包含两个报文,如果是,则提取两个报文中的载荷部分,使用摘要算法分别计算两个载荷部分的哈希值,在本地保存第一个报文的哈希值,所述第一个报文为第一个待处理数据包中的报文;比较两个哈希值是否相同,将比较结果返回;如果所述报文数据中仅包括一个报文,该报文为第二个待处理数据包中的报文,则在本地中查找所述第一个报文的哈希值,若查找到,则计算所述报文数据中的报文的哈希值,与所述第一个报文的哈希值进行比较,并返回比较结果;若未查找到,则返回错误信息,以提醒重新发送所述第一个报文。
可理解的是,参见图2,为两个报文的比较过程示意图,FPGA模块在收到报文数据后,检查报文数据中是否有两个报文,若是两个报文,这两个报文发别是第一个待处理数据包中的报文和第二个待处理数据包中的报文,提取两个报文的荷载部分,通过摘要算法如MD5、SM3等,计算两个报文的哈希值,保存第一个报文的哈希值,即保存第一个待处理数据包中的报文的哈希值,并将两个哈希值的比较结果返回到软件的调用过程中。如果FPGA模块收到的是一个报文,则该报文为第二个待处理数据包中的报文,则将此报文的哈希值和前面保存的第一个待处理数据包中的报文的哈希值做对比,返回比较结果。
比如,当第一个待处理数据包中的报文P1和第二个待处理数据包中的报文Q1进行比较后,当第一个待处理数据包中的报文P1和第二个待处理数据包中的报文Q2、...、Qn进行比较时,PC端只需要向FPGA模块传输报文Q2、...、Qn即可,无需在传输报文P1,报文P1的哈希值在上一次比较时已经存储在本地了。那么当第一个待处理数据包中的报文P2和第二个待处理数据包中的报文Q1进行比较时,需要向FPGA模块传输报文P1和报文Q1,并在后续分别计算两个报文的载荷部分的哈希值。
其中,FPGA模块的函数有两个输入参数,分别输入两个报文,报文通过PCIE总线以DMA(Direct Memory Access,成组数据传送方式)的方式传给FPGA模块,PCIE(PCI-Express,通用总线)总线的通信方式是以TLP包的形式传输的,荷载部分可以是一个或者多个数据包,本发明设置可以同时传输两个数据包,对应FPGA函数的两个参数,从PC端到FPGA模块的传输需要组织MRD(读地址内数据)包,对应的TLP包结构如图3所示。其中TLP Data字段包含两部分内容,一字节的SF(Second Flag)字段表示是否有第二个数据包,FPGA模块在检查接收到的报文数据中是否包含两个报文时,就是通过SF字段进行检查的。Packet字段表示一个完整的数据包,因为TLP Data的最大长度为2048字节,而网络中的通用MTU(数据链路层)是1500,所以一个TLP包不能同时发送两个数据包,SF字段为1表示有第二个数据包,SF字段为0表示没有第二个数据包。然后两个参数都可以为空,输出为两个报文是否相同的对比结果,若相同返回1,若不同返回0,若出错返回错误信息。
FPGA模块接收到PC端发送的报文后,先检查输入参数,用四字节FSN(FirstSequence Number)为第一个参数,表示报文在待处理数据包中的位置序号,如果第一个参数为空,则直接返回错误信息-1,否则FSN加一。
用四字节SSN(Second Sequence Number)为第二个参数,表示报文在待处理数据包中的位置序号,如果第二个参数为空,表明PC端向FPGA模块仅传输了一个报文,该报文为第二个待处理数据包中的报文,此时则检查FPGA模块中是否有保存的第一个待处理数据包中报文的哈希值,如果没有保存的哈希值,直接返回错误信息-2,否则,SSN加一,同时FSN归1重新计数。
如果有保存的哈希值,则用摘要算法(如MD5、SM3、SHA1等)计算第一个报文荷载的哈希值,这里以MD5算法为例,计算的哈希值为16字节即128bits,数据长度最短,比较速度最快,然后比较保存哈希值和第一个报文荷载的哈希值是否相等,若相等返回1,不等返回0。
如果两个参数都有效,表明PC端向FPGA模块传输了两个报文,包括第一个待处理数据包中的报文和第二个待处理数据包中的报文,则用摘要算法计算两个报文荷载的哈希值,比较两个哈希值是否相等,若相等返回1,不等返回0。
FPGA模块向PC端返回比较结果同样使用PCIE总线以DMA的方式进行,而此时TLP包的类型是MWR(向地址写数据)包,由于PC只需要知道两个数据包的对比结果,所以不需要返回数据包的原始内容只需要返回包的序号和对比结果就行,同时返回结果用一字节CR表示,CR为1表示报文相等,CR为0表示报文不等。MWR包的结构如图4所示。
S3,PC端根据所述比较结果和动态规划的状态转移方程,计算当前两个报文的RML值,并将当前两个报文的属性信息保存于数组DS中,遍历两个待处理数据包中的所有报文,获得所有报文的RML值和属性信息,所述RML值表示到当前两个报文的位置处,两个待处理数据包的重复报文长度。
可理解的是,得到两个报文Pi和Qj的荷载部分的哈希值的对比结果,就可以根据对比结果和RML值的状态转移方程计算RML[i][j]的值了。
确定RML[i][j]的状态转移方程,问题的本质是求解第一个待处理数据包和第二个待处理数据包的最长公共子序列LCS,也就是两个数据包的重复报文,如果,则只需要知道求解/>和/>的LCS,在加上/>即可。如果/>,则需要求解和/>的LCS与/>和/>的LCS,两个LCS中较长的LCS即为第一个待处理数据包P和第二个待处理数据包Q的LCS,即重复报文。由此可得出状态转移方程如下:
其中,RML[i][j]为第一个待处理数据包的第i个报文与第二个待处理数据包的第j个报文之间的RML值,RML[i-1][j-1]为第一个待处理数据包的第i-1个报文与第二个待处理数据包的第j-1个报文之间的RML值,RML[i][j-1]为第一个待处理数据包的第i个报文与第二个待处理数据包的第j-1个报文之间的RML值,RML[i-1][j]为第一个待处理数据包的第i-1个报文与第二个待处理数据包的第j个报文之间的RML值。
作为实施例,根据所述比较结果和动态规划的状态转移方程,计算当前两个报文的RML值,并将当前两个报文的属性信息保存于数组DS中,包括:
若,则/>,DS[i][j]=0;
若,且/>,/>,DS[i][j]=-1;
若,且/>,/>,DS[i][j]=1;
其中,DS[i][j]为第一个待处理数据包的第i个报文和第二个待处理数据包的第j个报文之间的报文属性信息。
具体的,可参见图5,根据两个报文的比较结果和状态转移方程,计算两个报文的RML值和属性信息。得到状态转移方程后,根据状态转移方程和两个报文的哈希值对比结果,可以计算出当前两个报文的RML[i][j]的值,由于采用的动态规划的方法,外层循环Pi(0<i≤m)表示第一个待处理数据包P中的第i个报文,内层循环Qj(0<j≤n)表示第二个待处理数据包Q中的第j个报文,两个数据包都是从第一条报文遍历到最后一条报文,自底向上的计算中间结果,并保存在二维数据RML[i][j]中,因此整个计算过程具有无后效性,节省计算时间,RML[i][j]的值由其子问题的结果确定,并将此时的两个报文的属性信息存入二维数组DS[i][j]中,如果,则RML[i][j]=RML[i-1][j-1]+1,DS[i][j]=0;如果,则RML[i][j]=max(RML[i][j-1],RML[i-1][j]);如果RML[i][j]=RML[i-1][j],DS[i][j]=1;如果RML[i][j]=RML[i][j-1],DS[i][j]=-1。计算RML[i][j]时,RML[i-1][j-1]、RML[i-1][j]、RML[i][j-1]都是已知的,则RML[i][j]值很好求解,而由于初始化了RML[0][j]、RML[i][0],所以遍历时的第一个值RML[1][1]前面的三个值RML[0][0]、 RML[0][1]、RML[1][0]也是已知的,至此便可以遍历出所有的值,直到求出RML[m][n],Pi=Qj的判断则是通过FPGA返回的信息确定的,FSN和SSN分别表示两个报文的下标j、i,而CR表示两个报文是否相同。
S4,根据数组DS和两个待处理数据包的长度,基于递归函数计算出相同报文和不同报文分别在两个待处理数据包中的位置信息。
可理解的是,参见图6,为基于递归函数找到相同报文和不同报文分别在两个待处理数据包中的位置信息的示意图,所述递归函数包括三个输入参数,第一个参数为DS[i][j],第二个参数为第一个待处理数据包的长度m,第三个参数为第二个待处理数据包的长度n。作为实施例,根据数组DS和两个待处理数据包的长度,基于递归函数计算出相同报文和不同报文分别在两个待处理数据包中的位置信息,包括:
递归函数判断DS[m][n]的值,如果DS[m][n]=0,表示是重复报文,则将Pm和Qn的位置信息存入一维数组SM1和SM2中,并且调用递归函数,输入参数为(DS[m-1][n-1],m-1,n-1);
如果DS[m][n]=1,表示,且Pm是第一个待处理数据包中独有的数据包,则将Pm的位置信息存入数组DM1中,并且调用递归函数,输入参数为(DS[m-1][n-1],m-1,n);
如果DS[m][n]=-1,表示,且Qn是第二个待处理数据包中的独有的数据包,则将Qn的位置信息存入数组DM2中,并且调用递归函数,输入参数为(DS[m-1][n-1],m,n-1;
当递归调用完成后,得到所有相同报文和不同报文在两个待处理数据包中的位置信息,将第一个待处理数据包中重复报文的位置信息记录于一维数组SM1[]、第二个待处理数据包中重复报文的位置信息记录于SM2[]、第一个待处理数据包中独有报文的位置信息记录于DM1[]以及第二个待处理数据包中独有报文的位置信息记录于DM2[]。
S5,以所述位置信息为索引,分别从两个待处理数据包中提取相同报文和不同报文,存储到新数据包中。
可理解的是,因为递归函数的调用是自顶向下的运行方式,所以四个数组中的位置信息是从大到小保存的,影响提取报文的效率,因此,本发明首先将四个数组中的值按从小到大的方式完成排序。
然后以排序后的数组中的值为索引,提取相应数据包中的报文,根据DM1和DM2中的值,将第一个待处理数据包P和第二个待处理数据包Q中独有的报文存入新的数据包DP1和DP2中;根据SM1和SM2中的值,将第一个待处理数据包P和第二个待处理数据包Q中的相同报文存入新的数据包SP1和SP2中,其中,由于第一个待处理数据包P和第二个待处理数据包Q中的相同报文是指荷载部分相同的报文,报文头部的信息可能不同,所以有必要将两个数据包中的相同报文存入两个不同的数据包SP1和SP2中,至此完成两个数据包的对比去重工作。
本发明提供的一种基于FPGA的数据包对比去重方法,具有以下有益效果:
1、本发明针对不同设备的数据包对比去重需求,提出了一种创新性解决方案,因为不同设备的数据包头部信息可能不同,所以给数据包的对比去重带来了很大的难度,本发明提出针对数据包的荷载部分做对比以判断报文是否相同。
2、对于大量数据包的对比工作,本发明引入了动态规划的方法,问题的本质是求两个数据包的最长公共子序列,使用动态规划的方法可以有效降低计算复杂度,提升计算速度。
3、对于两个报文的对比工作,本发明提出了用摘要算法计算哈希值,并比较哈希值是否相等的方法,相较于两个报文荷载直接比较的方法,如果荷载内容较大,那么直接比较的方式会比较慢,比较哈希值的方法比较的值长度是确定,可以降低比较时间。
4、本发明采用FPGA来完成报文的对比工作,FPGA完成报文荷载的哈希值计算,并完成比较返回比较结果,利用FPGA高效的计算能力,可以大大缩短两个报文比较的计算时间,同时采用存储的方式,保存其中一个报文的哈希值,避免了报文哈希值的重复计算。
5、本发明采用两个数组保存动态规划的计算结果,一个是最长公共子序列的长度信息,一个是报文的属性信息,根据这两个数组可以还原出相同报文和不同报文在两个数据包中的位置信息,并根据位置信息将两个数据包的相同报文和不同报文存入新的数据包,完成对比去重工作。
6、本发明的FPGA通信部分,返回值没有返回原始报文,而只是返回两个报文的下标和报文荷载对别结果,有效的降低了数据量,提高了传输速率。
需要说明的是,在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详细描述的部分,可以参见其它实施例的相关描述。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式计算机或者其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包括这些改动和变型在内。
Claims (8)
1.一种基于FPGA的数据包对比去重方法,其特征在于,包括:
在PC端获取两个待处理数据包的长度,分别循环调用算法从两个待处理数据包中获取一个报文,发送给FPGA模块;
FPGA模块计算两个报文载荷的哈希值,比较两个哈希值是否相同,向所述PC端返回比较结果;
PC端根据所述比较结果和动态规划的状态转移方程,计算当前两个报文的RML值,并将当前两个报文的属性信息保存于数组DS中,遍历两个待处理数据包中的所有报文,获得所有报文的RML值和属性信息,所述RML值表示到当前两个报文的位置处,两个待处理数据包的重复报文长度;
根据数组DS和两个待处理数据包的长度,基于递归函数计算出相同报文和不同报文分别在两个待处理数据包中的位置信息;
以所述位置信息为索引,分别从两个待处理数据包中提取相同报文和不同报文,存储到新数据包中。
2.根据权利要求1所述的数据包对比去重方法,其特征在于,所述获取两个待处理数据包的长度,分别循环调用算法从两个待处理数据包中获取一个报文,发送给FPGA模块,包括:
构建一个二维数组RML[i][j],用于保存第一个待处理数据包中从第一个报文到第i个报文和第二个待处理数据包中从第一个报文到第j个报文之间的重复报文长度,且对RML[i][j]初始化,i、j为正整数;
基于两层循环调用的方式分别从第一个待处理数据包和第二个待处理数据包中提取一个报文,且将提取的两个报文发送给FPGA模块;
所述两层循环调用方式是指先提取P1和Q1、Q2、....、Qj、....、Qn,然后提取P2和Q1、Q2、....、Qj、....、Qn,再提取Pi和Q1、Q2、....、Qj、....、Qn,以此类推,直到提取Pm和Q1、Q2、....、Qj、....、Qn,进行两个报文的比较,其中,Pi为第一个待处理数据包的第i个报文,Qj为第二个待处理数据包的第j个报文,m为第一个待处理数据包的长度,n为第二个待处理数据包的长度。
3.根据权利要求1所述的数据包对比去重方法,其特征在于,所述PC端通过PCIE总线以DMA的方式将两个报文传输给FPGA模块,所述PCIE总线的通信方式是以TLP包的形式传输的;
其中,从PC端到FPGA模块的传输需要组织MRD包,对应的TLP包结构为:TLP Data字段包含两部分内容,一字节的SF字段表示是否有第二个数据包,Packet字段表示一个完整的数据包,SF字段为1表示有第二个数据包,SF字段为0表示没有第二个数据包;
从FPGA模块到PC端的传输需要组织MWR包,对应的TLP包结构为:四字节FSN字段表示第一个报文在第一个待处理数据包的位置序号,四字节SSN字段表示第二个报文在第二个待处理数据包的位置序号,字节CR表示两个报文的比较结果,CR为1表示两个报文相等,CR为0表示两个报文不等。
4.根据权利要求3所述的数据包对比去重方法,其特征在于,所述FPGA模块计算两个报文载荷的哈希值,比较两个哈希值是否相同,返回比较结果,包括:
FPGA模块接收到报文数据时,根据所述SF字段检查所述报文数据中是否包含两个报文,如果是,则提取两个报文中的载荷部分,使用摘要算法分别计算两个载荷部分的哈希值,在本地保存第一个报文的哈希值,所述第一个报文为第一个待处理数据包中的报文;
比较两个哈希值是否相同,将比较结果返回;
如果所述报文数据中仅包括一个报文,该报文为第二个待处理数据包中的报文,则在本地中查找所述第一个报文的哈希值,若查找到,则计算所述报文数据中的报文的哈希值,与所述第一个报文的哈希值进行比较,并返回比较结果;
若未查找到,则返回错误信息,以提醒重新发送所述第一个报文。
5.根据权利要求2所述的数据包对比去重方法,其特征在于,所述状态转移方程为:
;
其中,RML[i][j]为第一个待处理数据包的第i个报文与第二个待处理数据包的第j个报文之间的RML值,RML[i-1][j-1]为第一个待处理数据包的第i-1个报文与第二个待处理数据包的第j-1个报文之间的RML值,RML[i][j-1]为第一个待处理数据包的第i个报文与第二个待处理数据包的第j-1个报文之间的RML值,RML[i-1][j]为第一个待处理数据包的第i-1个报文与第二个待处理数据包的第j个报文之间的RML值。
6.根据权利要求5所述的数据包对比去重方法,其特征在于,所述根据所述比较结果和动态规划的状态转移方程,计算当前两个报文的RML值,并将当前两个报文的属性信息保存于数组DS中,包括:
若,则/>,DS[i][j]=0;
若,且/>,/>,DS[i][j]=-1;
若,且/>,/>,DS[i][j]=1;
其中,DS[i][j]为第一个待处理数据包的第i个报文和第二个待处理数据包的第j个报文之间的报文属性信息。
7.根据权利要求1所述的数据包对比去重方法,其特征在于,所述递归函数包括三个输入参数,第一个参数为DS[i][j],第二个参数为第一个待处理数据包的长度m,第三个参数为第二个待处理数据包的长度n,所述根据数组DS和两个待处理数据包的长度,基于递归函数计算出相同报文和不同报文分别在两个待处理数据包中的位置信息,包括:
递归函数判断DS[m][n]的值,如果DS[m][n]=0,表示是重复报文,则将/>和的位置信息存入一维数组SM1和SM2中,并且调用递归函数,输入参数为(DS[m-1][n-1],m-1,n-1);
如果DS[m][n]=1,表示,且/>是第一个待处理数据包中独有的数据包,则将的位置信息存入数组DM1中,并且调用递归函数,输入参数为(DS[m-1][n-1],m-1,n);
如果DS[m][n]=-1,表示,且/>是第二个待处理数据包中的独有的数据包,则将/>的位置信息存入数组DM2中,并且调用递归函数,输入参数为(DS[m-1][n-1],m,n-1);
当递归调用完成后,得到所有相同报文和不同报文在两个待处理数据包中的位置信息,将第一个待处理数据包中重复报文的位置信息记录于一维数组SM1[]、第二个待处理数据包中重复报文的位置信息记录于SM2[]、第一个待处理数据包中独有报文的位置信息记录于DM1[]以及第二个待处理数据包中独有报文的位置信息记录于DM2[]。
8.根据权利要求7所述的数据包对比去重方法,其特征在于,所述以所述位置信息为索引,分别从两个待处理数据包中提取相同报文和不同报文,存储到新数据包中,包括:
将四个一维数组SM1[]、SM2[]、DM1[]和DM2[]的值从小到大重新排序;
以数组中的值为索引,根据DM1[]和DM2[]中的值,提取第一个待处理数据包和第二个待处理数据包相应位置的独有的报文,且将独有的报文分别存入新数据包DP1和DP2中;
根据SM1[]和SM2[]中的值,提取第一个待处理数据包和第二个待处理数据包中相同的报文,分别存入新数据包SP1和SP2中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310640501.5A CN116366478B (zh) | 2023-06-01 | 2023-06-01 | 一种基于fpga的数据包对比去重方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310640501.5A CN116366478B (zh) | 2023-06-01 | 2023-06-01 | 一种基于fpga的数据包对比去重方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116366478A CN116366478A (zh) | 2023-06-30 |
CN116366478B true CN116366478B (zh) | 2023-08-15 |
Family
ID=86905473
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310640501.5A Active CN116366478B (zh) | 2023-06-01 | 2023-06-01 | 一种基于fpga的数据包对比去重方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116366478B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1079567A2 (en) * | 1999-08-24 | 2001-02-28 | EDSL Networks Limited | A method for selective data-communications duplication |
CN108228763A (zh) * | 2017-12-25 | 2018-06-29 | 深圳市海派通讯科技有限公司 | 一种基于智能终端自媒体冗余数据处理的方法 |
CN111770023A (zh) * | 2020-06-28 | 2020-10-13 | 湖南有马信息技术有限公司 | 基于fpga的报文去重方法、装置及fpga芯片 |
CN113055127A (zh) * | 2021-03-17 | 2021-06-29 | 网宿科技股份有限公司 | 数据报文去重与传输方法、电子设备及存储介质 |
CN113810337A (zh) * | 2020-06-12 | 2021-12-17 | 中国电信股份有限公司 | 用于网络报文去重的方法、装置、以及存储介质 |
WO2022067791A1 (zh) * | 2020-09-30 | 2022-04-07 | 华为技术有限公司 | 一种数据处理、传输方法及相关设备 |
KR20220148025A (ko) * | 2021-04-28 | 2022-11-04 | 한국전자통신연구원 | 중복 패킷 판별 방법 및 장치 |
-
2023
- 2023-06-01 CN CN202310640501.5A patent/CN116366478B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1079567A2 (en) * | 1999-08-24 | 2001-02-28 | EDSL Networks Limited | A method for selective data-communications duplication |
CN108228763A (zh) * | 2017-12-25 | 2018-06-29 | 深圳市海派通讯科技有限公司 | 一种基于智能终端自媒体冗余数据处理的方法 |
CN113810337A (zh) * | 2020-06-12 | 2021-12-17 | 中国电信股份有限公司 | 用于网络报文去重的方法、装置、以及存储介质 |
CN111770023A (zh) * | 2020-06-28 | 2020-10-13 | 湖南有马信息技术有限公司 | 基于fpga的报文去重方法、装置及fpga芯片 |
WO2022067791A1 (zh) * | 2020-09-30 | 2022-04-07 | 华为技术有限公司 | 一种数据处理、传输方法及相关设备 |
CN113055127A (zh) * | 2021-03-17 | 2021-06-29 | 网宿科技股份有限公司 | 数据报文去重与传输方法、电子设备及存储介质 |
WO2022193447A1 (zh) * | 2021-03-17 | 2022-09-22 | 网宿科技股份有限公司 | 数据报文去重与传输方法、电子设备及存储介质 |
KR20220148025A (ko) * | 2021-04-28 | 2022-11-04 | 한국전자통신연구원 | 중복 패킷 판별 방법 및 장치 |
Non-Patent Citations (1)
Title |
---|
一种以太网重复报文网络风暴处理方法;宋一丁;王振华;田巧红;宋彦锋;朱付强;;电子设计工程(第12期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN116366478A (zh) | 2023-06-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101868720B1 (ko) | 정규 표현식들에 대한 컴파일러 | |
CN109145158B (zh) | 一种布隆过滤器中数据的处理方法以及布隆过滤器 | |
CN104904167B (zh) | 通信网络中对于分组处理的高性能基于哈希的查找 | |
WO2014094441A1 (zh) | 病毒检测方法及设备 | |
US8239341B2 (en) | Method and apparatus for pattern matching | |
CN104579974B (zh) | 面向ndn中名字查找的哈希布鲁姆过滤器及数据转发方法 | |
CN111262868B (zh) | 一种基于智能网卡的消息发送方法以及接收方法 | |
CN106534059A (zh) | 内容中心网络中的网络命名分段 | |
JP2004172917A (ja) | パケット検索装置及びそれに用いるパケット処理検索方法並びにそのプログラム | |
KR20070122045A (ko) | 실시간 상태 기반 패킷 검사 방법 및 이를 위한 장치 | |
CN112532642B (zh) | 一种基于改进Suricata引擎的工控系统网络入侵检测方法 | |
CN101316232B (zh) | 基于网络协议版本6的分片重组方法 | |
JP2015005980A (ja) | 構文解析木において経路を一意的に列挙する装置および方法 | |
CN102420771B (zh) | 高速网络环境中提高tcp并发连接速度的方法 | |
CN103581331A (zh) | 虚拟机在线迁移方法与系统 | |
CN106062740B (zh) | 生成多个索引数据字段的方法和装置 | |
CN104915717A (zh) | 数据处理方法、知识库推理方法及相关装置 | |
CN108460030B (zh) | 一种基于改进的布隆过滤器的集合元素判断方法 | |
Wang et al. | Using CNN-based representation learning method for malicious traffic identification | |
CN113810337B (zh) | 用于网络报文去重的方法、装置、以及存储介质 | |
WO2021196463A1 (zh) | 一种区块链数据的同步方法、装置及电子设备、存储介质 | |
US10567399B2 (en) | Fragmented malware hash lookup in cloud repository | |
CN116366478B (zh) | 一种基于fpga的数据包对比去重方法 | |
RU2613034C2 (ru) | Быстрое установление соответствия при адресации по содержанию (контенту) | |
CN112187743B (zh) | 一种基于ip地址最长前缀的网络策略匹配方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |