TLV格式总结

关于TLV格式,网上搜到其他文档说的都比较片面,这里总结一下。
TLV是BER编码的一种,ASN1标准,全称Tag(标签),Length(长度),Value(值)。 IS-IS数据通信领域中,tlv三元组: tag-length-value(TLV)。
T、L字段长度根据规则生成,V是具体的应用数据。
举例摘抄自Enjoy_endless的大作,原文如下:
https://blog.csdn.net/Enjoy_endless/article/details/78259529.

现在有这么一个二进制字节流

6F328407A0000000031010A5278701019F38129F1A029F33039F40059F1B049F09029F35015F2D086573656E667264659F110101
在这里插入图片描述
如第一行所示,它就是一个由上面buf解析出来的TLV结构
tag为6F,lenth为32,后面为value;
对于TLV来讲,有两种格式,一种是基本格式(BER-TLV),一种是嵌套格式
对于本例的buf来讲,它就是一个复合的嵌套格式,完整解析出来应该是这个样子

整个buf是一个父节点,6F
他有两个子节点84 、A5
对于84节点,他是不可再分的基础格式
对于A5节点,他是一个父节点
可以再拆分为4个子节点87、 9F38、 5F2D、 9F11

一、T的编码规则
在这里插入图片描述
Tag分为3部分,最高两位,第六位和低五位
1.Tag首字节
bit8~bit7:组合代表tag所属类型
00 通用级 universal class
01 应用级 application class
10 规范级 context-specific class
11 私有级 private class
bit6:是否具有嵌套的TLV子结构
bit5~bit1:如果为全1,则Tag扩展至后续的字节。否则是具体的Tag正文
2.Tag后续字节
bit8:为1时存在后续字节,为0时不存在后续字节
bit7~bit1:Tag正文。

二、L的编码规则
Length首字节bit8:
如果为0,则该Length仅有1字节,Length中bit7~bit1值代表Value字段的长度。(所以如果Length仅有一个字节,则最长支持的Value长度为127)
如果为1,则Length首字节表示Length后续所占的字节数。
例如Length=1F(即00011111),则Value字段的长度为31字节。
例如Length=82(即10000010),则Length后续还要扩展2字节(共3字节)。假设向后扩展后为Length=82016F,则代表Value的长度为0x016F(十进制为367字节)

三、V的编码规则
Value数据区一般没有特定的编码规则,但在某些场合,如果首字节Bit8为1时,需要前补0x00。
例如,如果Value1=74F2,Value2=B34A,则需要将Value2重新转换为00B34A,对应Length长度+1。

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值