类型-长度-值(TLV)协议
在数据通信协议中,可选的信息或字段通常使用type-length-value(a.k.a TLV)元素来进行编码。
- Type - 类型
用来标示字段类型的值,通常是一个二进制值或简单的字母
- Length - 长度
字段长度,单位通常为Byte
- Value - 值
一个变长的比特数组用来存储这个字段的值
优势
- TLV序列方便遍历查找
- 新的字段可以无痛的加入现有的协议中。解析的时候,对于未知的字段,可以轻松的跳过。这点与XML类似
- TLV元素的顺序可以是随意的
- TLV元素通常使用二进制存储,可以使解析速度加快并且使数据更小
- TLV可以与XML数据相互转换,易于人类阅读
例子
在这里,我们以protobuf的可选和变长字段为例。
field_number ++ wire_type
每一个protobuf的字段在传输时,都会加上field_number
和wire_type
这两个值,这两个值组成这个字段的key。
key = (field_number << 3) | wire_type
field_number
标明了字段的编号,方便协议向前向后的兼容。而 …