ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

看懂通信协议——TLV

2019-03-26 18:48:48  阅读:1228  来源: 互联网

标签:编码 TLV 通信协议 Value Length Tag 字节


注:上篇转载博客(https://blog.csdn.net/qq_43296898/article/details/88822938)
主要介绍了TLV编码逐步进化和完善。下面主要介绍TLV编码方式!
一、 TLV编码介绍

       TLV是指由数据的类型Tag,数据的长度Length,数据的值Value组成的结构体,几乎可以描任意数据类型,TLV的Value也可以是一个TLV结构,正因为这种嵌套的特性,可以让我们用来包装协议的实现。
                            在这里插入图片描述

以下将分别针对Tag、Length、Value进行解说:

1、 Tag 描述Value的数据类型,TLV嵌套时可以用于描述消息的类型

在这里插入图片描述
Tag由一个或多个字节组成,上图描述首字节0~7位的具体含义

① Tag首节字说明

  • 第6~7位:表示TLV的类型,00表示TLV描述的是基本数据类型(Primitive Frame, int,string,long…),01表示用户自定义类型(Private Frame,常用于描述协议中的消息)。
  • 第5位:表示Value的编码方式,分别支持Primitive及Constructed两种编码方式, Primitive指以原始数据类型进行编码,Constructed指以TLV方式进行编码,0表示以Primitive方式编码,1表示以Constructed方式编码。
  • 第0-4位:当Tag Value小于0x1F(31)时,首字节0~4位用来描述Tag Value,否则0~4位全部置1,作为存在后续字节的标志,Tag Value将采用后续字节进行描述。
    在这里插入图片描述

② Tag后续字节说明

       后续字节采用每个字节的0~6位(即7bit)来存储Tag Value, 第7位用来标识是否还有后续字节。

  • 第7位:描述是否还有后续字节,1表示有后续字节,0表示没有后续字节,即结束字节。
  • 第0~6位:填充Tag Value的对应bit(从低位到高位开始填充),如:Tag Value为:0000001 11111111 11111111 (10进制:131071), 填充后实际字节内容为:10000111 11111111 01111111。
    在这里插入图片描述

2、Length 描述Value的长度

       描述Value部分所占字节的个数,编码格式分两类:定长方式(DefiniteForm)和不定长方式(IndefiniteForm)。

  • 定长方式中,按长度是否超过一个八位,又分为短、长两种形式,编码方式如下:
           短形式: 字节第7位为0,表示Length使用1个字节即可满足Value类型长度的描述,范围在0~127之间的。
                                              在这里插入图片描述
           长形式:即Value类型的长度大于127时,Length需要多个字节来描述,这时第一个字节的第7位置为1,0~6位用来描述Length值占用的字节数,然后直将Length值转为byte后附在其后,如: Value大小占234个字节(11101010),由于大于127,这时Length需要使用两个字节来描述,10000001 11101010
    在这里插入图片描述
  • 不定长方式

       Length所在八位组固定编码为0x80,但在Value编码结束后以两个0x00结尾。这种方式使得可以在编码没有完全结束的情况下,可以先发送部分数据给对方。
在这里插入图片描述
3、Value 描述数据的值

       由一个或多个值组成 ,值可以是一个原始数据类型(Primitive Data),也可以是一个TLV结构(Constructed Data)

       ① Primitive Data 编码
       在这里插入图片描述
       ② Constructed Data 编码
       在这里插入图片描述
原文链接:https://my.oschina.net/maxid/blog/206546?tdsourcetag=s_pctim_aiomsg

标签:编码,TLV,通信协议,Value,Length,Tag,字节
来源: https://blog.csdn.net/qq_43296898/article/details/88824963

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有