一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于FPGA的协同网络协议解析方法和装置与流程

2022-06-02 15:26:38 来源:中国专利 TAG:

一种基于fpga的协同网络协议解析方法和装置
技术领域
1.本发明涉及一种网络解析技术领域,尤其涉及一种基于fpga的协同网络协议解析方法和装置。


背景技术:

2.随着网络速率的不断提高,无论在服务端还是客户端,对网络协议解析的计算压力也日益严峻。虽然通过硬件加速等方式有效提高了网络解析性能,但也存在如下2个缺点:1、通过fpga或asic实现硬件加速一般需要hdl或dsl语言设计完整的网络解析功能,开发效率低于常见软件高级语言;2、硬件加速虽然能完成协议解析功能,但从实际应用角度而言,解析功能是整体网络功能的一个子集,亟需提高网络解析模块化整合能力。
3.为此,我们设计了一种基于fpga的协同网络协议解析方法和装置以此解决上述技术问题。


技术实现要素:

4.本发明的目的在于提供一种基于fpga的协同网络协议解析方法和装置,解决了现有技术中网络协议解析效率低,实际应用中网络解析模块化整合能力低的问题。
5.本发明采用的技术方案如下:一种基于fpga的协同网络协议解析方法,包括以下步骤:步骤s1、根据解析需求确定网络需求状态;步骤s2、通过所述网络需求状态包含的网络数据包包头构建网络协议结构图,所述网络协议结构图中包含网络结点和网络结点跳转两种型态;步骤s3、利用所述网络协议结构图中的网络结点跳转查找网络结点,并对所述网络结点添加根结点变量;步骤s4、利用所述网络协议结构图中的网络结点跳转查找网络结点,并结合所述根结点变量,对所述网络结点添加下一结点变量;步骤s5、遍历所有添加所述根结点变量和所述下一结点变量的所述网络结点,对所述网络结点添加结点标识;步骤s6、根据所述结点标识生成全协议表,并在所述全协议表中添加解析域段信息;步骤s7、通过fpga对所述全协议表进行存储和网络协议解析。
6.进一步地,所述步骤s1中,所述网络需求状态为在特定解析需求范围内网络协议的动态组合:不在所述解析需求范围内的所述网络协议不包含在对应的所述网络需求状态中,并且随着场景的完善和应用功能增加,所述解析需求范围也增大,所述解析需求范围包含的所述网络协议更新和丰富,所述网络需求状态具有动态特性。
7.进一步地,所述步骤s2过程如下:所述网络协议与所述网络数据包包头一一对应,一完整所述网络数据包包头确定
一所述网络协议;所述网络数据包包头通过包头字段拼接组合构成,不同的所述网络协议对应不同的所述网络数据包包头,即不同的包头字段组合;利用所述包头字段构建所述网络协议结构图中的所述网络结点,所述包头字段的组合通过所述网络协议结构图中的跳转实现;当不同的所述网络协议中存在相同的所述包头字段时,在所述网络协议结构图中为共享代表所述包头字段的所述网络结点。
8.进一步地,所述步骤s3过程如下:利用所述网络协议结构图中的所述网络结点跳转查找网络结点,查找方式基于遍历所述网络协议结构图中所有所述网络结点实现;设定所述网络数据包包头的第一个所述包头字段在所述网络协议结构图中对应的所述网络结点设置根结点变量为1;在解析需求范围内,所述网络协议结构图中至少1个带有所述根结点变量为1的所述网络结点,且所述根结点变量为1的所述网络结点为根结点,其余在所述网络协议结构图中的所述网络数据包包头非第一个所述包头字段在所述网络协议结构图中对应的所述网络结点设置根结点变量为0。
9.进一步地,所述步骤s4过程如下:为每个所述网络结点添加下一结点变量,所述下一结点变量为所述网络结点跳转至下一所述网络结点的依据,跳转对应所述包头字段拼接下一所述包头字段的过程;所述网络结点跳转为从所述根结点变量为1的所述网络结点对应的所述包头字段开始,所述包头字段拼接的下一所述包头字段对应的所述网络结点即为所述根结点变量为1的所述网络结点的下一结点变量;依此对每个所述包头字段链接有下一所述包头字段的对应所述网络结点添加下一结点变量,在所述网络数据包包头中最后一个所述包头字段对应所述网络结点无下一结点变量,设置所述网络结点的下一结点变量为0,且所述下一结点变量为0的所述网络结点为端节点。
10.进一步地,所述步骤s5过程如下:从所述根结点变量为1的所述网络结点开始对每个所述网络结点添加结点标识,所述结点标识的数值为所述网络结点与所述根结点的距离;所述根结点自身的所述结点标识确定结点标识归属,所述结点标识归属的结点为从所述根结点跳转的下一结点,直至端结点;若存在多个不同所述网络结点的所述下一结点变量指向同一个所述网络结点,即所述网络结点距离所述根结点有多个距离,则以第一次遍历到的距离为所述结点标识中的距离;当同一个所述网络结点被多个不同的所述根结点共享,则所述结点标识为标识集合。
11.进一步地,所述步骤s6过程如下:通过所述根结点起始,根据所述网络结点下一结点变量对每个所述网络结点进行遍历,遍历完成后依次将每个所述网络结点设置为新的遍历结点,并遍历所述新的遍历结点下的所有下一结点变量,循环上述过程直到遍历至下一结点变量值为0的端结点;完成遍历后从所述根结点至所述端结点的每一条分支均对应特定解析需求范围
内一种网络协议,将从所述根结点至所述端结点路径所经过结点的标识组合为协议号,每一条路径对应的所述协议号为所述全协议表中一条表项。
12.进一步地,所述全协议表包含结点标识和fpga解析域段信息。
13.进一步地,所述fpga解析域段信息包括fpga解析字段和fpga处理字段,所述fpga解析字段为1个,所述fpga处理字段为1个或多个。
14.进一步地,所述步骤s7过程如下: fpga通过包括高速串行总线、网口、串口的自定义接口获取所述全协议表,fpga片内存储单元维护格式为关键词、数据和索引的组合,其中关键词和数据分别对应所述全协议表中独立地址空间,索引为功能接口扩展,用于整合后续模块包处理功能,处理数据包括解析域中的字段内容。
15.本发明还提供一种基于fpga的协同网络协议解析装置,包括存储器和一个或多个处理器,所述存储器中存储有可执行代码,所述一个或多个处理器执行所述可执行代码时,用于实现上述任一项所述的一种基于fpga的协同网络协议解析方法。
16.本发明还提供一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时,实现上述任一项所述的一种基于fpga的协同网络协议解析方法。
17.本发明的有益效果是:1、一种基于fpga的协同网络协议解析方法完全通过软件完成,fpga资源集中协议解析和字段处理功能,能有效提高网络包解析速率;2、fpga内部主要功能实现通过片内存储资源完成,实现逻辑清晰简单,接口易于扩展,逻辑易于通过hdl语言完成设计。
附图说明
18.图1为本发明一种基于fpga的协同网络协议解析方法的结点变量添加流程图;图2为本发明一种基于fpga的协同网络协议解析方法的结点遍历流程图;图3为本发明一种基于fpga的协同网络协议解析方法的网络协议结构图;图4为本发明一种基于fpga的协同网络协议解析方法的网络协议结构图结点属性图;图5为本发明一种基于fpga的协同网络协议解析方法的网络协议结构协议id;图6为本发明一种基于fpga的协同网络协议解析方法的网络协议结构图生成全协议表;图7为本发明一种基于fpga的协同网络协议解析方法的fpga片内ram框架;图8为本发明一种基于fpga的协同网络协议解析装置的结构图。
具体实施方式
19.以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
20.见图1-图7,一种基于fpga的协同网络协议解析方法,包括:步骤s1、根据解析需求确定网络需求状态;解析需求范围限制为本发明解析方法和装置的应用场景。所述网络需求状态为在
特定解析需求范围内网络协议的动态组合:不在所述解析需求范围内的所述网络协议不包含在对应的所述网络需求状态中,并且随着场景的完善和应用功能增加,所述解析需求范围也增大,所述解析需求范围包含的所述网络协议更新和丰富,所述网络需求状态具有动态特性。
21.不同的场景具有不同的解析需求。如在特定工业应用场景下,解析需求为该特定工业应用场景相关网络协议,而与该特定工业应用场景不相关的网络协议不在该解析需求的范围内。随着应用场景的完善和应用功能增加,解析需求范围可随之增大,即网络协议可更新和丰富,具有动态特性。
22.步骤s2、通过所述网络需求状态包含的网络数据包包头构建网络协议结构图,所述网络协议结构图中包含网络结点和网络结点跳转两种型态;根据所述网络数据包包头hdrs组成所述网络需求状态,所述网络协议与所述网络数据包包头一一对应,一完整网络数据包包头hdrs可以确定一网络协议;网络数据包包头hdrs通过一个或多个包头字段hdr拼接组合构成。不同的网络协议对应不同的网络数据包包头hdrs,即不同的包头字段组合:hdrs=[hdr《0》,hdr《1》,hdr《2》,

,hdr《n》]( [ ]表示组合,且区分先后顺序,下同;《 》表示下标,下同)。以包头字段构建网络协议结构图g=(v)中的网络结点v,包头字段的组合以网络协议结构图中的跳转实现:hdrs=[hdr《0》,hdr《1》,hdr《2》,

,hdr《n》]的组合对应网络协议结构图中的v《0》
ꢀ‑
》 v《1》
ꢀ‑
》 v《2》
ꢀ‑

ꢀ…ꢀ‑
》 v《n》 (-》表示跳转,下同),其中各网络结点{v《0》, v《1》, v《2》,
ꢀ…
, v《n》}∈v({ }表示组合,不区分先后顺序,下同)。所述网络数据包包头通过包头字段拼接组合构成,不同的所述网络协议对应不同的所述网络数据包包头,即不同的包头字段组合;利用所述包头字段构建所述网络协议结构图中的所述网络结点,所述包头字段的组合通过所述网络协议结构图中的跳转实现;若在不同的网络协议中存在相同的包头字段时,则在网络结构图中共享代表该包头字段的网络结点。一个网络协议有完整的协议格式和数据内容,具体为包括一个网络数据包包头hdrs和1个负载payload的组合,该组合可描述为组合包package=[hdr《0》, hdr《1》,
ꢀ…ꢀ
, hdr《n》, payload]。
[0023]
步骤s3、利用所述网络协议结构图中的网络结点跳转查找网络结点,并对所述网络结点添加根结点变量;查找方式基于遍历网络协议结构图g=(v)中所有网络结点v∈v实现。设定网络数据包包头hdrs第一个包头字段hdr《0》在所述网络协议结构图g=(v)中对应的网络结点v设置其根结点变量为1,即v.root=1;在解析需求范围内,所述网络协议结构图g=(v)中可以有1个或多个带有根结点变量v.root=1的所述网络结点。且所述根结点变量v.root=1的网络结点为根结点。对于常见的以太网包,其1个网络结点v的根结点变量v.root=1为以太网mac网络数据包头;大于1个网络结点v的根结点变量v.root=1可见于多模态网络包,不同的模态有不同的第一包头字段hdr《0》。其余在所述网络协议结构图g=(v)中的网络数据包包头非第一个包头字段对应的网络结点v∈{v《1》, v《2》,
ꢀ…
, v《n》}在所述网络协议结构图g=(v)中,设置网络结点根结点变量v.root=0。
[0024]
步骤s4、利用所述网络协议结构图中的网络结点跳转查找网络结点,并结合所述根结点变量,对所述网络结点添加下一结点变量;为每个所述网络结点添加下一结点变量v.next。其中所述下一结点变量v.next为
所述网络结点跳转依据。跳转对应包头字段拼接下一包头字段的过程:[

, hdr《i》, hdr《i 1》,
ꢀ…
]对应的网络结点跳转为v《i》
ꢀ‑
》 v《i 1》。所述网络结点跳转为从根结点变量v.root=1的网络结点即根结点对应的包头字段开始,包头字段拼接的下一包头字段对应的网络结点即为所述根结点变量v.root=1的网络结点的下一结点变量,即v《i》的下一结点变量v.next=v《i 1》,也可以描述为v《i》.next=v《i 1》。依此对每个包头字段链接有下一包头字段的对应网络结点添加下一结点变量v.next,在网络数据包包头中最后一个包头字段hdr《n》对应网络结点无下一结点变量,设置该网络结点的下一结点变量v.next=0,且所述下一结点变量v.next=0的网络结点为端节点。
[0025]
步骤s5、遍历所有添加所述根结点变量和所述下一结点变量的所述网络结点,对所述网络结点添加结点标识;从所述根结点变量为1的所述网络结点开始对每个所述网络结点添加结点标识,所述结点标识的数值为所述网络结点与所述根结点的距离;所述根结点自身的所述结点标识确定结点标识归属,所述结点标识归属的结点为从所述根结点跳转的下一结点,直至端结点;若存在多个不同所述网络结点的所述下一结点变量指向同一个所述网络结点,即所述网络结点距离所述根结点有多个距离,则以第一次遍历到的距离为所述结点标识中的距离;当同一个所述网络结点被多个不同的所述根结点共享,则所述结点标识为标识集合。
[0026]
遍历所有添加根结点变量v.root和下一结点变量v.next的所述网络结点v∈v,对所述网络结点v添加结点标识t。所述根结点变量为v.root=1的网络结点为根结点,对于可能出现的网络结点存在大于1个结点根变量v.root=1的情况,对每个根结点进行编号,描述为结点标识t中的根编号r∈n,其中n为自然数集。每个根结点可展开为一个结点分支,设置根结点的结点标识t为 (r《i》,0),其中i表示该结点属于根结点的第i个分支,0表示为该结点距离根节点的距离为0,即该网络结点本身为根结点。结点标识中的根编号v确定结点标识归属。
[0027]
在完成对根结点添加标识t操作后,以根结点开始对属于该根结点分支下的每个结点进行添加标识操作,对距离为l(l∈n)的结点设置标识t为(r《i》,l,j),其中r《i》表示该结点归属于编号为r《i》的根结点,编号为(r《i》,0)。l表示该结点与根结点的距离,j(j∈n)表示在结点距离为l下搜索到的第j个结点。若在(r《i》,0)分支下存在多个不同网络结点的下一结点变量v.next为同一个值,即该下一结点变量指向的网络结点距离根结点可能有多个距离,则以第一次遍历到的距离为所述网络结点结点标识t中的距离l;若同一个网络结点被多个不同的根结点共享,即所述网络结点具有多个根结点编号r,则该结点维护标识集合t={t《i》,t《j》,

t《k》},t为各个结点标识t的组合,i、j、k代表具体的结点标识。
[0028]
步骤s6、根据所述结点标识生成全协议表,并在所述全协议表中添加解析域段信息;通过所述根结点起始,根据所述网络结点下一结点变量对每个所述网络结点进行遍历,遍历完成后依次将每个所述网络结点设置为新的遍历结点,并遍历所述新的遍历结点下的所有下一结点变量,循环上述过程直到遍历至下一结点变量值为0的端结点;完成遍历后从所述根结点至所述端结点的每一条分支均对应特定解析需求范围内一种网络协议,每一条网络协议可描述为协议号id=[t《0》,t《1》,

,t《n》],将从所述根
结点至所述端结点路径所经过结点的标识组合为协议号,每一条路径对应的所述协议号为所述全协议表中一条表项,所述全协议表包含结点标识和fpga解析域段信息。
[0029]
所述全协议表每条表项内容一一对应解析范围内的一种网络协议,即一个协议号id对应一种网络协议。在所述网络协议下的网络数据包,fpga用于解析和处理的网络包描述为fpga域:f=[fk,[fa《0》,fa《1》,

,fa《n》]],其中fk作为fpga解析字段,包含该包头协议protocol和下一个fpga域f指针next_f_ptr,fpga解析字段fk组合描述为fk=[protocol,next_f_ptr],用作fpga解析参数。fa为fpga有效处理字段,为包头在后续功能中需要被处理的标识。在一个fpga域f中仅有1个fpga解析字段fk,可以有1个或多个fpga有效处理字段fa。一个协议号id中可以有多个fpga域f组合,形成fpga解析域段fd=[f《0》,f《1》,

,f《n》]。
[0030]
生成全协议表l,全协议表l为协议号id和fpga解析域段fd组合(id,fd)的集合,l=[(id,fd)《0》,(id,fd)《1》,

,(id,fd)《n》]。
[0031]
步骤s7、通过fpga对所述全协议表进行存储和网络协议解析。
[0032]
所述fpga解析域段信息包括fpga解析字段和fpga处理字段,所述fpga解析字段为1个,所述fpga处理字段为1个或多个。
[0033]
fpga通过自定义接口,包括但不限于高速串行总线、网口、串口等获取生成的全协议表l。
[0034]
fpga片内ram维护格式为[key, data, index],其中key和data分别对应全协议表l中的协议号id和解析域段fd,index为功能接口扩展,用于整合fpga后续模块包处理功能,所述包处理功能对应的处理数据包括但不限于解析域段fd中的[fa《0》,fa《1》,

,fa《n》]字段内容。
[0035]
以实际应用环境出发,将软件fpga协同的网络解析设备支持的所有协议配置网络协议结构图。图3为示例网络所有分支的网络协议结构图,其中(0,0)-》(0,1,0)-》(0,1,1)-》(0,1,2)是其中某一完整分支,对应实际的网络数据包类似为[ethernet, vlan, ipv4, tcp];(1,0)-》(1,1,2)为另一完整分支,对应实际的网路数据包类似为[(自定义网路头), udp],其它分支类同。
[0036]
依据图1所示的流程图,为图3中各个网络结点添加结点根变量v.root和下一结点变量v.next值。添加流程如图1所示:为两个根结点(0,0)和(1,0)设置根结点变量v.root=1。其中根结点(0,0)的下一网络结点有(0,1,0)、(0,1,1)和(0,1,2),设置这些网络结点为该根结点的v.next变量。其余网络结点设置类同。根结点变量和下一结点变量的设置结果如图4所示。
[0037]
完成根结点变量和下一结点变量后依照图2流程设置结点标识t。在图3中有两个网络结点的根结点变量v.root=1,设置结点标识t分别为(0,0)和(1,0)。其中括号内左边值代表根结点编号,本例中有2个根结点,所以有两个编号0和1。括号内右边值代表与根结点的距离,若为0,则代表该结点即为根结点。
[0038]
与根结点(0,0)距离为1的网络结点分别设置为(0,1,0)、(0,1,1)和(0,1,2)。其中(0,1,0)和(0,1,2)都有两个父结点。(0,1,0)两个父结点都属于根结点(0,0),故(0,1,0)结点只有一个结点标识t,(0,1,2)两个父结点分别属于根结点(0,0)和(1,0),故其有另一结点标识t为(1,1,0),两个结点标识组合为{(0,1,2),(1,1,0)}。
[0039]
图5左列为从根结点(0,0)遍历得到的协议号id,右侧为从根结点(1,0)遍历得到的协议号id,每次遍历至每个端结点结束。
[0040]
图6中的网络协议结构图生成为图6中的全协议表l,全协议表l由一组(id,fd)组成。其中协议号id=[t《0》,t《1》,

,t《n》],fpga解析域段fd=[f《0》,f《1》,

,f《n》]。fpga解析域段fd由一系列fpga域f组成,f=[fk,[fa《0》,fa《1》,

,fa《n》]]。其中fk作为fpga解析字段,包含该包头协议标识和下一个fpga域指针next_f_ptr。。在图6中f0.fk.next_f_ptr-》f1,fpga解析字段fk组合描述为 fk=[protocol,next_f_ptr],用作fpga解析参数。fa为处理字段,为包头在后续功能中需要被处理的标识。
[0041]
fpga获取表的格式可以通过低速接口也可以通过高速接口,因表的配置下发完成后fpga才开始实时解析任务,且当fpga开始解析后,任务过程中仅与fpga内部表数据交互,不与软件侧进行数据命令交互。节省交互开销,加快协议解析速度。
[0042]
图7为fpga片内ram框架,其中key和data分别对应全协议表l中的协议号id和fpga解析域fd,index为功能接口扩展,用于整合后续模块包处理功能,可处理数据包括fpga解析域fd中的[fa《0》,fa《1》,

,fa《n》]字段内容,也可以通过软件自定义字段添加至fpga解析域fd中。
[0043]
与前述一种基于fpga的协同网络协议解析方法的实施例相对应,本发明还提供了一种基于fpga的协同网络协议解析装置的实施例。
[0044]
参见图8,本发明实施例提供的一种基于fpga的协同网络协议解析装置,包括存储器和一个或多个处理器,所述存储器中存储有可执行代码,所述一个或多个处理器执行所述可执行代码时,用于实现上述实施例中的一种基于fpga的协同网络协议解析方法。
[0045]
本发明一种基于fpga的协同网络协议解析装置的实施例可以应用在任意具备数据处理能力的设备上,该任意具备数据处理能力的设备可以为诸如计算机等设备或装置。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在任意具备数据处理能力的设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图4所示,为本发明一种基于fpga的协同网络协议解析装置所在任意具备数据处理能力的设备的一种硬件结构图,除了图8所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的任意具备数据处理能力的设备通常根据该任意具备数据处理能力的设备的实际功能,还可以包括其他硬件,对此不再赘述。
[0046]
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
[0047]
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0048]
本发明实施例还提供一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时,实现上述实施例中的一种基于fpga的协同网络协议解析方法。
[0049]
所述计算机可读存储介质可以是前述任一实施例所述的任意具备数据处理能力的设备的内部存储单元,例如硬盘或内存。所述计算机可读存储介质也可以是任意具备数据处理能力的设备的外部存储设备,例如所述设备上配备的插接式硬盘、智能存储卡(smart media card,smc)、sd卡、闪存卡(flash card)等。进一步的,所述计算机可读存储介质还可以既包括任意具备数据处理能力的设备的内部存储单元也包括外部存储设备。所述计算机可读存储介质用于存储所述计算机程序以及所述任意具备数据处理能力的设备所需的其他程序和数据,还可以用于暂时地存储已经输出或者将要输出的数据。
[0050]
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献