基于动态可自定义的exTLV报文传输协议的通信方法与流程

文档序号:12478171阅读:367来源:国知局
基于动态可自定义的exTLV 报文传输协议的通信方法与流程

本发明属于网络传输技术领域,尤其是一种基于动态可自定义的exTLV报文传输协议的通信方法。



背景技术:

在当前各类应用或设备的开发中,涉及到点对点的报文传输时,通常采用两种报文传输方法,一种是采用本应用或设备完全独立的报文格式,一般是针对自身信息内容的特点,独立设计有一定规律的固定格式来进行报文传输;另一种是采用基本的TLV编码,该TLV编码为BER编码的一种,全称为Type(类型),Length(长度),Value(值),google公司在此基础上扩展了message name与protobuf data,对传输能力进行加强。

但上述两种报文传输方法存在以下问题:

第一种报文传输方法:传输双方需要事先知道传输的每项内容意思,在开发过程即需要知道报文的组成格式,不具有通用性,对报文解释需要二次开发;

第二种报文传输方法:具有了通用性,可以根据message name获取信息格式意义,再从protobuf获取数据值,但此方法在每次传输同样格式的报文时,造成数据的重复,message name域的长度很多时间都大于实际需要的数据域protobuf的长度,造成传输效率的降低和带宽的浪费。同时,协议本身不具备安全传输机制。



技术实现要素:

本发明的目的在于克服现有技术的不足,提供一种设计合理、通用性强、安全性高且传输效率高的基于动态可自定义的exTLV(扩展TLV)报文传输协议的通信方法。

本发明解决其技术问题是采取以下技术方案实现的:

一种基于动态可自定义的exTLV报文传输协议的通信方法,包括以下步骤:

步骤1、采用完整性验证KEY的安全连接握手传输方式,在客户端与服务端之间通过KEY计算验证码的方法建立安全连接;

步骤2、通过定义由报文图文类型、报文数据字节长度、报文数据内容和对上述三种数据进行检验的报文检验数据四部分构成的报文格式,建立客户端与服务端之间的基于动态可自定义的exTLV报文传输协议;

步骤3、采用标准库发布,并调用API函数用于实现基于动态可自定义的exTLV报文传输协议的发送报文和接收报文的功能调用。

而且,所述步骤1的具体步骤包括:

(1)在客户端与服务端之间建立TCP连接;

(2)服务端通过非对称加密算法(缺省采用RSA算法)产生密钥对,并将非对称公钥发送给客户端;

(3)客户端产生随机32位字符串,作为完整性验证KEY,将接收到的所述非对称公钥进行加密后发送给服务端;

(4)服务端收到加密后的32位完整性验证KEY后,用产生的私钥进行解密;

(5)客户端与服务端双方根据已同步的32位完整性验证KEY进行后续数据传输,对传输数据报文进行完整性验证。

而且,所述步骤2的报文图文类型包括:结构定义报文、结构定义请求报文和数据报文。

而且,所述步骤3的发送报文的具体步骤包括:

(1)调用者只需要将字段名称、类型、长度和字段值分别压入发送栈中,并将所有压入栈中的字段名称和类型以字母顺序排列;

(2)将所有压入栈中的字段名称和类型与压入栈中当前已保存的结构报文定义作比对;若未匹配到已有结构报文定义,则根据当前压入栈字段信息,产生新的结构报文定义,并将其保存到已有结构报文定义链中,并发送结构定义报文;若匹配到已有结构报文定义,则根据该结构报文定义发送数据报文;

(3)发送方根据发送的数据报文的内容与32位完整性验证KEY计算32位的check内容,并将其附于数据报文内容的最后;

(4)接收方收到报文后,通过同样的方法对数据报文内容进行check内容计算,如果与收到的check内容不一致,则要求发送方重传。

而且,所述步骤3的发送报文的第(3)步的所述32位的check内容的计算方法为:

将32位完整性验证KEY前后拼接到实际报文内容中,组成需验证的内容,在产生验证内容后对其进行MD5计算,获得32位字符串后转换为大写;

其中,实际报文内容包括报文图文类型(type)、报文数据字节长度(len)和报文数据内容(data)的完整数据。

而且,所述步骤3的接收报文的具体步骤包括:

(1)调用者接收一个完整的报文,若该报文为结构定义报文,则保存到已有结构报文定义链中;若该报文为数据报文,则查找压入栈中当前已保存的结构报文定义;

(2)若查找到与所述数据报文相对应的结构报文定义,则根据该结构报文定义将数据报文解析成多个字段名称和对应的字段值;若未查找到与所述数据报文相对应的结构报文定义,则发送结构定义请求报文,等待返回;

(3)将数据报文的解析结果保存到缓存,供调用者读取字段值;

(4)调用者直接通过字段名称获取每一个字段值,最后释放临时缓存。

本发明的优点和积极效果是:

1、本发明采用完整性验证KEY的安全连接握手传输方式,在连接过程中通过KEY计算验证码的方法建立安全传输机制;并且本发明对传输内容不进行加密,只需要作完整性验证,就能够保障数据传输的完整性,可有效防止传输数据被篡改且不需要额外配置安全组件。

2、本发明具有通用性,不需要事先协商密码和数据结构,通过安全传输机制与协议即可安全的传输报文并分析报文格式和各项组成意义。

3、本发明的每个应用或设备可根据自身需要灵活自定义结构类报文格式与数据报文格式,通讯的另一方根据报文内容即可解释各项的组成值和意义。

4、本发明具有可扩展性,对报文中的数据类型、大小、结构组成可随意扩展或自定义。

5、本发明为实现可复用结构定义,减少传输数据量,采用了协议中传输结构与数据值相分离的报文设计方式,使本发明从协议本身结构设计不会产生重复的报文数据内容。

6、本发明对于不同的数据类型、主体对象和底层网络协议均可适用。

7、本发明对不同的应用不需要定义新的传输协议和方法;并且不需要为每次传输内容的变化定义新的传输结构,为应用扩展或升级提供便利。

8、本发明对异构数据、异构环境的整合提供了统一的报文描述与传输。

9、本发明的开发人员只需要关注于业务数据的组合传输与意义,不需要考虑传输实现方法。

10、本发明在同一场合中,不同的应用或设备之间可以互相混合传输,不需要预先组织报文格式。

附图说明

图1是本发明的客户端与服务端之间建立安全连接的方法流程图;

图2是本发明的基于动态可自定义的exTLV报文传输协议的报文格式示意图;

图3是本发明的结构定义报文的报文数据内容(data)部分的组成格式示意图;

图4是本发明的数据报文的报文数据内容(data)部分的组成格式示意图;

图5是本发明的结构定义报文和数据报文的报文检验数据(check)部分的计算内容示意图。

具体实施方式

以下结合附图对本发明实施例作进一步详述:

一种基于动态可自定义的exTLV报文传输协议的通信方法,包括以下步骤:

步骤1、采用完整性验证KEY的安全连接握手传输方式,在客户端与服务端之间通过KEY计算验证码的方法建立安全连接;

如图1所示,所述步骤1包括以下步骤:

(1)在客户端与服务端之间建立TCP连接;

(2)服务端通过非对称加密算法(缺省采用RSA算法)产生密钥对,并将非对称公钥发送给客户端;

(3)客户端产生随机32位字符串,作为完整性验证KEY,将接收到的所述非对称公钥进行加密后发送给服务端;

(4)服务端收到加密后的32位完整性验证KEY后,用产生的私钥进行解密;

(5)客户端与服务端双方根据已同步的32位完整性验证KEY进行后续数据传输,对传输数据报文进行完整性验证。

步骤2、通过定义由报文图文类型、报文数据字节长度、报文数据内容和对上述三种数据进行检验的报文检验数据四部分构成的报文格式,建立客户端与服务端之间的基于动态可自定义的exTLV报文传输协议;

基于动态可自定义的exTLV报文传输协议的每种报文格式,如图2所示,由四部分组成:

(1)报文图文类型(type):报文图文类型,1个字节长度,三种可能的取值分别为:“1”、“2”和“3”;

所述步骤2的报文图文类型包括:结构定义报文、结构定义请求报文和数据报文。

其中,“1”代表结构定义报文;“2”代表结构定义请求报文;“3”代表数据报文;

(2)报文数据字节长度(len):报文数据字节长度,即data部分长度,占用2个字节;

(3)报文数据内容(data):报文数据内容;

(4)对上述三种数据进行检验的报文检验数据(check):对type、len、data所有数据的完整性验证码,32个字节长度。

报文格式中双字节以上的整型长度均采用低字节在前高字节在后的主机字节顺序。

下面分别对结构定义报文、结构定义请求报文和数据报文进行说明:

(1)结构定义报文:

当协议报文中type为1时,data部分为结构定义,组成如图3所示的报文格式,由如下所示结构编号与多个字段定义组成:

①结构编号data No.:代表结构编号,用于唯一标识每类结构的编号,应用或设备各自定义。占用2个字节,数据报文中根据结构编号对应每个字段域的内容;

②字段类型field type:代表字段类型,1个字节,动态可自定义的exTLV报文传输协议中已预定义值:

1:一个字节的BYTE型或char型;

2:二个字节的无符号整型;

18:二个字节的有符号整型;

3:四个字节的无符号整型;

19:四个字节的有符号整型;

4:四个字节的符点型;

5:八字节的无符号整型;

6:ANSI字符串;

22:UNICODE字符串;

38:utf-8字符串;

127:自定义字段类型;

③字段名称字节长度name len:字段名称字节长度,即field name部分的长度,占用1个字节;

④字段名称field name:字段名称,ANSI字符串。

(2)结构定义请求报文

结构定义报文可以由数据发送方主动发送,也可以由接收方向发送发请求,报文中type为2时即为请求报文,发送方收到此报文重新发送结构定义报文。结构定义请求报文data部分只有两个字节,即需求结构定的data No.结构编号。

(3)数据报文

当协议报文中type为3时,data部分为数据报文,组成如图4所示的报文格式,由如下所示的结构编号与多个字段数据组成:

①结构编号data No.:本数据报文的结构编号,与结构定义报文中的对应;

②字段数据字节长度value len:字段数据的字节长度,即紧跟着field value的长度;

③字段数据field value:字段数据。

步骤3、采用标准库发布,并调用API函数用于实现基于动态可自定义的exTLV报文传输协议的发送报文和接收报文的功能调用。

所述发送报文的工作过程为:调用者只需要把字段名称、类型、长度和字段值分别压入发送栈中,调用发送即可;

其具体步骤包括:

(1)调用者只需要将字段名称、类型、长度和字段值分别压入发送栈中,并将所有压入栈中的字段名称和类型以字母顺序排列;

(2)将所有压入栈中的字段名称和类型与压入栈中当前已保存的结构报文定义作比对;若未匹配到已有结构报文定义,则根据当前压入栈字段信息,产生新的结构报文定义,并将其保存到已有结构报文定义链中,并发送结构定义报文;若匹配到已有结构报文定义,则根据该结构报文定义发送数据报文;

(3)发送方根据发送的数据报文的内容与32位完整性验证KEY计算32位的check内容,并将其附于数据报文内容的最后;

所述32位的check内容计算方法为:

如图5所示,将32位完整性验证KEY前后拼接到实际报文内容中,组成需验证的内容,在产生验证内容后对其进行MD5计算,获得32位字符串后转换为大写;

其中,实际报文内容包括type、len、data完整数据。

(4)接收方收到报文后,通过同样的方法对数据报文内容进行check内容计算,如果与收到的check内容不一致,则要求发送方重传。

所述接收报文的工作过程为:调用者只需调用接收函数,标准库即从网络接口读取报文数据,根据收到的报文解析成多个字段名称与对应的值,调用者直接通过字段名称获取每一个字段值,最后释放临时缓存。

其具体步骤包括:

(1)调用者接收一个完整的报文,若该报文为结构定义报文,则保存到已有结构报文定义链中;若该报文为数据报文,则查找压入栈中当前已保存的结构报文定义;

(2)若查找到与所述数据报文相对应的结构报文定义,则根据该结构报文定义将数据报文解析成多个字段名称和对应的字段值;若未查找到与所述数据报文相对应的结构报文定义,则发送结构定义请求报文,等待返回;

(3)将数据报文的解析结果保存到缓存,供调用者读取字段值;

(4)调用者直接通过字段名称获取每一个字段值,最后释放临时缓存。

需要强调的是,本发明所述的实施例是说明性的,而不是限定性的,因此本发明包括并不限于具体实施方式中所述的实施例,凡是由本领域技术人员根据本发明的技术方案得出的其他实施方式,同样属于本发明保护的范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1