TLV(1)定义

1. 定义 TLV(Type-Length-Value)

TLV 是一种常用的用于通信的结构体格式。
T表示 tag (类型)
L表示 length (value的长度)
V表示 value。
其中T和L是固定大小的,V是可变大小,L表示的是V的长度。

2. TLV的历史来源

  1. 紧凑模式 写死的模式
    紧凑模式,意思是除了数据本身外,没有一点额外冗余信息,可以看成是Raw Data

    例子是A和B通信,获取或设置基本资料,一般开发人员第一步就是定义一个协议结构:
    struct userbase
    {
    unsigned short cmd;//1-get, 2-set
    unsigned char gender; //1 – man , 2-woman, 3 - ??
    char name[8]; //当然这里可以定义为 string name;
    }

  2. 可扩展性
    有一天,A在基本资料里面加一个生日字段,然后告诉B
    struct userbase
    {
    unsigned short cmd;
    unsigned char gender;
    unsigned int birthday;
    char name[8];
    }
    这是B就犯愁了,收到A的数据包,不知道第3个字段到底是旧协议中的name字段,还是新协议中birthday。
    这是后A,和B终于从教训中认识到一个协议重要特性——兼容性和可扩展性
    于是乎,A和B决定废掉旧的协议,从新开始,制定一个以后每个版本兼容的协议。
    方法很简单,就是加一个version字段。
    struct userbase
    {
    unsigned short version;
    unsigned short cmd;
    unsigned char gender;
    unsigned int birthday;
    char name[8];
    }

  3. 更好的可扩展性 TLV
    于是A和B寻找各方资料,找到了ANS.1编码规范,好东西啊… ASN.1是一种ISO/ITU-T 标准。
    其中一种编码BER(Basic Encoding Rules)简单好用,它使用三元组编码,简称TLV编码
    每个字段编码后内存组织如下

3. TLV优缺点

  1. 优点
    TLV具备了很好可扩展性,很简单易学。
  2. 缺点
    (1)因为其增加了2个额外的冗余信息,tag 和len,特别是如果协议大部分是基本数据类型int ,short, byte. 会浪费几倍存储空间。
    (2)另外Value具体是什么含义,需要通信双方事先得到描述文档,即TLV不具备结构化和自解释特性。

参考

https://blog.csdn.net/shaobingj126/article/details/47169173
https://blog.csdn.net/qq_43296898/article/details/88822938

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值