一种可编程网络的协议解析方法、系统和可读存储介质转让专利

申请号 : CN202210815787.1

文献号 : CN114885047B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 衣晓玉卢东辉邹涛董永吉崔鹏帅张汝云李军飞

申请人 : 之江实验室中国人民解放军战略支援部队信息工程大学

摘要 :

本发明公开了一种可编程网络的协议解析方法、系统和可读存储介质。该协议解析方法主要包括两部分:前端侧将用户基于P4语言编写的自定义协议转换成json格式的信息;后端侧从json格式的信息以及用户配置的流表信息中提取转换成UDF_SAI需要的信息,通过UDF_SAI操作ASIC交换机,最终在ASIC交换机上实现对自定义网络协议的解析。本发明可使得支持UDF_SAI的传统ASIC交换机,也能通过P4语言进行自定义协议的解析,节省了自定义协议的开发时间以及传统ASIC交换机的使用范围。

权利要求 :

1.一种可编程网络的协议解析方法,其特征在于,包括如下步骤:

(1)前端侧,对用户基于P4语言编写的自定义协议,进行前端格式检查;若用户编写的P4协议代码符合自定义域封装的交换抽象接口UDF_SAI的约束,则会转换成json格式的信息输出,若不符合则报告错误信息;包括以下子步骤:(1.1)对用户基于P4语言编写的自定义协议,进行前端格式检查,包括对头部header修改的动作检查,判断其是否在UDF_SAI支持的范围内,若符合UDF_SAI的约束,则输出P4协议代码的中间表示形式json,若不符合UDF_SAI的约束,则报告错误信息;

(1.2)前端侧输出的json信息,包括:用户自定义协议的数据包头部的结构、协议解析的逻辑关系、协议中对头部字段的修改信息;

(2)后端侧从json格式的信息和用户配置的流表信息中,提取转换成UDF_SAI需要的信息,通过UDF_SAI操作ASIC,最终在ASIC上实现对自定义网络协议的解析;包括以下子步骤:(2.1)后端侧从json格式的信息中,提取数据包头部的信息,根据数据包头部的结构以及需要修改的头部字段,确定自定义协议解析数据包的起始位和偏移量;

(2.2)后端侧从用户配置的流表信息中,提取匹配数据和匹配掩码;

(2.3)后端侧从json格式的信息中,提取对头部字段的操作动作,并从用户配置的流表信息中,提取对应动作的参数;

(2.4)将步骤(2.1)中提取的起始位、偏移量,步骤(2.2)中提取的匹配数据和匹配掩码,以及步骤(2.3)中提取的对头部字段的操作动作和动作参数,组合构成用户需要提取的UDF_SAI的全部信息;

(2.5)将步骤(2.4)中提取的UDF_SAI的全部信息,转换成UDF_SAI接口形式,并通过UDF_SAI操作ASIC,完成用户自定义的协议解析。

2.根据权利要求1所述可编程网络的协议解析方法,其特征在于,步骤(1.2)中,用户自定义协议的数据包头部结构中包括头部字段的名称、字段的长度。

3.根据权利要求1所述可编程网络的协议解析方法,其特征在于,步骤(1.2)中,协议解析的逻辑关系包括不同协议头部跳转需要的参数以及状态。

4.根据权利要求1所述可编程网络的协议解析方法,其特征在于,步骤(1.2)中,协议中对头部的修改信息包括表的名称、匹配的关键字、动作的名称、具体的动作。

5.根据权利要求1所述可编程网络的协议解析方法,其特征在于,步骤(2.2)中,用户配置的流表信息包括:表的名称、动作的名称、关键字的值、动作的参数;匹配数据为用户配置的流表信息中关键字的值。

6.根据权利要求1所述可编程网络的协议解析方法,其特征在于,匹配的类型包括精确匹配和最长前缀匹配;若匹配类型为最长前缀匹配,则在用户配置的流表信息中,增加匹配关键字掩码的长度;根据数据包匹配的关键字的值、匹配类型以及匹配关键字掩码的长度,确定数据包头部字段的匹配值;若匹配类型为精确匹配,则在用户配置的流表信息中,增加匹配关键字掩码的默认值,其中默认值的长度为关键字的位宽;最后根据数据包匹配的关键字的值、匹配类型以及匹配关键字掩码的长度,确定数据包头部字段的匹配值。

7.一种可编程网络的协议解析系统,其特征在于,包括一个或多个处理器,用于实现如权利要求1 6中任一项所述可编程网络的协议解析方法。

~

8.一种可读存储介质,其特征在于,其上存储有程序,该程序被处理器执行时,实现如权利要求1 6中任一项所述可编程网络的协议解析方法。

~

说明书 :

一种可编程网络的协议解析方法、系统和可读存储介质

技术领域

[0001] 本发明属于协议解析处理技术领域,尤其涉及一种可编程网络的协议解析方法、系统和可读存储介质。

背景技术

[0002] 随着互联网规模的不断扩大,网络协议的更新速度不断加快,这就要求网络设备能够快速适配新增的网络协议,而目前的网络设备一般采用传统的专用集成电路(Application Specific Integrated Circuits,ASIC)实现,但是ASIC通常只支持固有的协议,并不能支持灵活自定义解析网络协议,所以当遇到新的协议时,通常的做法是在相关协议规范提出后,由芯片厂家根据实际情况逐步安排推出新的芯片版本的支持,但是由于芯片固有的研发周期以及研发费用等问题,ASIC对新增网络协议的支持大约需要经过3 5~年时间,这无法满足用户对新增网络协议的时间需求,同时因为传统网络设备通常是通过更换新的芯片的方式来实现对新增网络协议的支持,这需要极高的设备投入成本。

发明内容

[0003] 本发明的目的在于针对现有技术的不足,提供一种可编程网络的协议解析方法、系统和可读存储介质。
[0004] 本发明的目的是通过以下技术方案来实现的:一种可编程网络的协议解析方法,包括如下步骤:
[0005] (1)前端侧,对用户基于P4语言编写的自定义协议,进行前端格式检查;若用户编写的P4协议代码符合自定义域封装的交换抽象接口UDF_SAI的约束,则会转换成json格式的信息输出,若不符合则报告错误信息。
[0006] (2)后端侧从json格式的信息和用户配置的流表信息中,提取转换成UDF_SAI需要的信息,通过UDF_SAI操作ASIC,最终在ASIC上实现对自定义网络协议的解析。
[0007] 进一步地,步骤(1)包括以下子步骤:
[0008] (1.1)对用户基于P4语言编写的自定义协议,进行前端格式检查,包括对头部header修改的动作检查,判断其是否在UDF_SAI支持的范围内,若符合UDF_SAI的约束,则输出P4协议代码的中间表示形式json,若不符合UDF_SAI的约束,则报告错误信息。
[0009] (1.2)前端侧输出的json信息,包括:用户自定义协议的数据包头部的结构、协议解析的逻辑关系、协议中对头部字段的修改信息。
[0010] 进一步地,步骤(1.2)中,用户自定义协议的数据包头部结构中包括头部字段的名称、字段的长度;协议解析的逻辑关系包括不同协议头部跳转需要的参数以及状态;协议中对头部的修改信息包括表的名称、匹配的关键字、动作的名称、具体的动作。
[0011] 进一步地,步骤(2)包括以下子步骤:
[0012] (2.1)后端侧从json格式的信息中,提取数据包头部的信息,根据数据包头部的结构以及需要修改的头部字段,确定自定义协议解析数据包的起始位和偏移量。
[0013] (2.2)后端侧从用户配置的流表信息中,提取匹配数据和匹配掩码。
[0014] (2.3)后端侧从json格式的信息中,提取对头部字段的操作动作,并从用户配置的流表信息中,提取对应动作的参数。
[0015] (2.4)将步骤(2.1)中提取的起始位、偏移量,步骤(2.2)中提取的匹配数据和匹配掩码,以及步骤(2.3)中提取的对头部字段的操作动作和动作参数,组合构成用户需要提取的UDF_SAI的全部信息。
[0016] (2.5)将步骤(2.4)中提取的UDF_SAI的全部信息,转换成UDF_SAI接口形式,并通过UDF_SAI操作ASIC,完成用户自定义的协议解析。
[0017] 进一步地,步骤(2.2)中,用户配置的流表信息包括:表的名称、动作的名称、关键字的值、动作的参数;匹配数据为用户配置的流表信息中关键字的值。
[0018] 匹配的类型包括精确匹配和最长前缀匹配。若匹配类型为最长前缀匹配,则在用户配置的流表信息中,增加匹配关键字掩码的长度;根据数据包匹配的关键字的值、匹配类型以及匹配关键字掩码的长度,确定数据包头部字段的匹配值。若匹配类型为精确匹配,则在用户配置的流表信息中,增加匹配关键字掩码的默认值,其中默认值的长度为关键字的位宽;最后根据数据包匹配的关键字的值、匹配类型以及匹配关键字掩码的长度,确定数据包头部字段的匹配值。
[0019] 一种可编程网络的协议解析系统,包括一个或多个处理器,用于实现上述可编程网络的协议解析方法。
[0020] 一种可读存储介质,其上存储有程序,该程序被处理器执行时,实现上述可编程网络的协议解析方法。
[0021] 本发明的有益效果是:本发明使用低成本的ASIC硬件设备,实现了网络协议的灵活、自定义解析,降低了因为网络协议更新而更换网络设备的成本,其实现方法简便,手段灵活,网络协议能够得到充分解析,并运用于实际网络环境中。

附图说明

[0022] 图1是本发明可编程网络的协议解析方法流程图;
[0023] 图2是本发明一个实施例提供的可编程网络的协议解析系统的模块框图。

具体实施方式

[0024] 下面结合附图对本发明进一步说明。
[0025] 如图1所示,本发明一种可编程网络的协议解析方法,按子功能划分包括前端侧和后端侧,包括以下步骤:
[0026] 步骤1:前端侧,对用户基于P4(Programming Protocol‑independent Packet Processors)语言编写的自定义协议,进行前端格式检查,包括对头部header修改的动作检查,判断其是否在自定义域封装的交换抽象接口UDF_SAI支持的范围内。若用户编写的P4协议代码符合UDF_SAI的规定,则输出P4协议代码的中间表示形式json;若不符合UDF_SAI的规定,则将报告错误信息。其中,UDF_SAI为自定义域(User Defined Field,UDF)封装的交换抽象接口(Switch Abstraction Interface,SAI)。
[0027] 步骤2:前端侧基于用户自定义的协议输出的对应的json信息,json信息中包含以下内容:用户自定义协议的数据包头部的结构、协议解析的逻辑关系、协议中对头部字段的修改信息。其中,用户自定义协议的数据包头部结构中包括头部字段的名称、字段的长度;协议解析的逻辑关系包括不同协议头部跳转需要的参数以及状态;协议中对头部的修改信息包括表的名称、匹配的关键字、动作的名称、具体的动作。
[0028] 步骤3:后端侧从json格式的信息中,提取数据包头部的信息,根据数据包头部的结构以及需要修改的头部字段,确定自定义协议解析数据包的起始位和偏移量。例如,修改互联网协议第4版(Internet Protocol version 4,IPv4)协议的源IP地址字段,将源IP地址10.0.0.1修改为10.0.0.2,则提取的起始位为第二层头部,偏移量为96bits。
[0029] 步骤4:后端侧从用户配置的流表信息中,提取匹配数据和匹配掩码。用户配置的流表信息应包含以下内容:表的名称、动作的名称、关键字的值、动作的参数。匹配数据即为用户配置的流表信息中关键字的值。此时提取的匹配数据为0x0A000001,掩码为0xFFFFFFFF。另外,匹配的类型包括精确匹配和最长前缀匹配。
[0030] 若匹配类型为最长前缀匹配,则在上述的4个参数之外,增加匹配关键字掩码的长度。根据数据包匹配的关键字的值、匹配类型以及匹配掩码的长度,确定数据包头部字段的匹配值。
[0031] 若匹配类型为精确匹配,则在用户配置的流表信息中,增加匹配关键字掩码的默认值,默认值为1,其中1的长度为关键字的位宽;最后根据数据包匹配的关键字的值、匹配类型以及匹配关键字掩码的长度,确定数据包头部字段的匹配值。
[0032] 步骤5:后端侧从json格式的信息中,提取对头部字段的操作动作,并从用户配置的流表信息中,提取对应动作的参数。此时提取的操作动作为源IPv4地址修改,动作的参数为0x0A000002。
[0033] 步骤6:将步骤3中提取的起始位、偏移量,步骤4中提取的匹配数据和匹配掩码,以及步骤5中提取的对头部字段的操作动作和动作参数,组合构成用户需要提取的UDF_SAI的全部信息。
[0034] 步骤7:将步骤6中提取的UDF_SAI的全部信息,转换成UDF_SAI接口形式,并通过UDF_SAI操作ASIC,完成用户自定义的协议解析。
[0035] 本发明一个实施例提供的可编程网络的协议解析方法,包括前端侧将用户基于P4语言编写的自定义协议转换成json格式的信息;后端侧从json格式的信息以及用户配置的流表信息中提取转换成UDF_SAI需要的信息,通过UDF_SAI操作ASIC交换机,最终在ASIC交换机上实现对自定义网络协议的解析。
[0036] 所述前端侧对用户基于P4语言编写的自定义协议,进行前端检查,若用户编写的P4协议代码符合UDF_SAI的规定,则输出json格式信息;若不符合UDF_SAI的规定,则将报告错误信息。
[0037] 具体地,以MobilityFirst协议为例:
[0038] 步骤1:对用户编写的P4协议的动作操作进行检查,在MobilityFirst协议中,需要根据Header中的头部字段的全局唯一身份标识(Globally Unique Identifier,GUID)进行数据流匹配,将数据流转发至目标GUID的设备。前端侧检查完成后,明确需要完成数据流的重定向操作,满足UDF_SAI的支持范围,则将P4语言的自定义协议转换为json格式的中间表示形式;如果在P4代码的实现中,前端侧检查发现,需要根据GUID完成数据流的优先级配置,而优先级功能不在UDF_SAI的支持范围,则前段侧报告错误信息。
[0039] 步骤2:前端侧基于MobilityFirst 协议输出的json信息中主要应包含以下内容:用户自定义协议的数据包头部的结构,即转发MobilityFirst的数据流需要解析的字段,包括bit<32> type,bit<32> src_guid  ,bit<32> dst_guid;协议解析的逻辑关系,即头部字段的跳转关系,当ethernet_type=0x27c0时,解析MobilityFirst头部字段;当ethernet_type=0x0800时,解析IP头部字段。协议中对头部字段的修改信息,即当数据包的hdr.mf.dst_guid=0x12345678时,将数据包转发,需保存此操作的表的名称mf_table、匹配的关键字hdr.mf.dst_guid、动作的名称mf_forward、具体的动作redirect。
[0040] 步骤3:后端侧从json格式的信息中,提取数据包头部的信息,根据数据包头部的结构以及需要修改的头部字段,确定自定义协议解析数据包的起始位和偏移量。在本实施例中因为需要提取的数据包头部信息为dst_guid,则起始位为64bits,即type字段的32bits加上src_guid的32 bits;偏移量为dst_guid的长度32 bits。
[0041] 步骤4:后端侧从用户配置的流表信息中,提取匹配数据和匹配掩码。用户配置的流表信息应包含以下内容:表的名称mf_table、动作的名称mf_forward、关键字的值0x12345678、动作的参数redirect,且在本例中的匹配类型为精确匹配,所以提取的匹配数据为0x12345678,匹配掩码为0xFFFFFFFF。
[0042] 步骤5:后端侧从json格式的信息中,提取对头部字段的操作动作,即重定向操作,并从用户配置的流表信息中,提取对应动作的参数,即转发的端口号port=0x1。
[0043] 步骤6:将步骤3中提取的起始位64 bits、偏移量32 bits,步骤4中提取的匹配数据0x12345678和匹配掩码0xFFFFFFFF,以及步骤5中提取的对头部字段的操作动作redirect和动作参数port=0x1,组合构成用户需要提取的UDF_SAI的全部信息。
[0044] 步骤7:将步骤6中提取的UDF_SAI的全部信息,转换成UDF_SAI接口形式,并通过UDF_SAI操作ASIC,完成用户自定义的协议解析。
[0045] 图2是本发明一个实施例提供的可编程网络的协议解析系统的模块框图。
[0046] 本发明一种可编程网络的协议解析系统,包括一个或多个处理器,用于实现上述可编程网络的协议解析方法。在一些实施例中,本发明一种可编程网络的协议解析系统可以包括可读存储介质,可读存储介质可以包括非易失性存储介质。
[0047] 在一些实施例中,本发明一种可编程网络的协议解析系统可以包括内存和接口。
[0048] 在一些实施例中,本发明一种可编程网络的协议解析系统还可以根据实际应用包括其他硬件。
[0049] 本发明实施例的可读存储介质,其上存储有程序,该程序被处理器执行时,实现上述可编程网络的协议解析方法。
[0050] 本发明可采用在一个或多个其中包含有程序代码的可读存储介质(包括但不限于磁盘存储器、CD‑ROM、光学存储器等)上实施的计算机程序产品的形式。可读存储介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。可读存储介质的例子包括但不限于:相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其它内存技术、只读光盘只读存储器(CD‑ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
[0051] 本发明并不限于上述实施方式,采用与本发明上述实施方式相同或近似的方式,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,均在本发明专利的保护范围之内。