BER 编码一种,ASN.1标准 ASN.1 浅析,全称 Type(类型),Length(长度),Value(值)。
IS-IS 数据通信领域中,TLV 三元组:
Type-length-value(TLV)
T、L 字段的长度往往固定 ( 通常为 1~4bytes )
V 字段长度可变
T 字段表示报文类型,L 字段表示报文长度、V 字段往往用来存放报文的内容。
TLV 结构数据解析:
TAG 类别:
分为 3 部分,最高两位,第六位和低五位,其具体表示含义如下;
编码规则:
1、第一个字节的 bit8~bit7 位标识 tag 所属类型
00 通用级 universal class
01 应用级 application class
10 规范级 context-specific class
11 私有级 private class
在智能卡中见得较多的是应用类与上下文相关类,通用类与行业无关,只有一个(0x06:Object Identifier);
应用类很多如前文中的 0x6F,还有经常碰到的 0x4F 表示 AID (应用标识符),在7816中定义。
0x6F: '0110 1111'
0x4F: '0100 1111'
2、第一个字节的 bit6 位标识本 tag 的 value 部分是否包含子 tag
3、第一个字节的 bit5~bit1 位标识是否需要配合第二个字节一起标识 tag
全为 1 表示需要第二个字节
4、第二个字节 bit8 为 1,同时 bit7~bit1 大于 0 表示有下一个 tag
5、第三~N个字节同第二个字节
TAG 编号:
例如:
TLV 结构十六进制字节流:
6F328407A0000000031010A5278701019F38129F1A029F33039F40059F1B049F09029F35015F2D086573656E667264659F110101
tag 为 0x6F,lenth 为 0x32,后面为 0x32=50 个字节的 value 值。
TLV 有两种格式:
BER、嵌套格式
示例是一个复合的嵌套格式:
一个父节点:0x6F
有两个子节点 0x84、0xA5
0x84 节点是不可再分的基础格式
0xA5 节点又是一个父节点
可以再拆分为 4 个子节点 87、 9F 38、 5F 2D、 9F 11
编码解析和过程:
1、根据第一个字节分解,bit1–bit5 判断 tag 长度,bit6 判断是否是复合 tag
2、根据 tag 长度,找到 len,根据 len 画出后面数据长度
3、根据是否是复合结构,继续循环如上分解过程