BER 编码一种,ASN.1标准 ASN.1 浅析,全称 Type(类型),Length(长度),Value(值)。

IS-IS 数据通信领域中,TLV 三元组:

Type-length-value(TLV)

T、L 字段的长度往往固定 ( 通常为 1~4bytes )

V 字段长度可变

T 字段表示报文类型,L 字段表示报文长度、V 字段往往用来存放报文的内容。

TLV 结构数据解析:

【基础】TLV 报文格式详细解析_报告文

TAG 类别:

【基础】TLV 报文格式详细解析_报告文_02

分为 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 报文格式详细解析_报告文_03

例如:

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、根据是否是复合结构,继续循环如上分解过程