基础
TLV协议是BER编码的一种,全称是Tag、length、value。该协议简单高效,能适用于各种通信场景,且具有良好的可扩展性。TLV协议的基本格式如下:
其中,Tag占2个字节,是报文的唯一标识;Length占4个字节,表示Value字段的长度;Value字段的数据是需要传输的数据,长度由Length字段表示。
简单型TLV
简单型TLV结构,Value字段的具体内容由一个个定长的字段表示,如第一个字段占多少字节,第二个字段占多少个字节,都是固定长度,不会改变。因此,简单型TLV结构的Length一般也固定,不同的结构通过Tag进行区分,且字段个数的多少没有限制,具有很强的扩展性。
混合型TLV
混合型TLV结构,Value字段的具体内容是另一个TLV结构,如此递归,没有任何限制,如下所示:
其中需要注意,外层TLV结构的length字段一定是里层TLV结构的总长度,这样才符合TLV的基本定义。
循环型TLV
循环型TLV结构,Value字段的具体内容是由多个结构相同的数据组成,因此为了说明循环的个数,需要定义一个表示循环数的字段,其格式如下:
其中,LoopNum字段表示循环的个数,其后是一个个结构相同的数据顺序排列。该结构是针对数据格式相同的报文设计,需要注意,循环的个数一定要匹配后面数据的个数。
指针型TLV
指针型TLV结构,又称数组型TLV,Value字段中的某一个子字段的长度不定,需要根据对应的length字段的值确定,因此无法提前定义,所以使用指针的方式进行处理。指针的处理同样可以解决变长数组的问题,因此二者的处理方式相同。
总结
上述所有的TLV结构都可以相互嵌套递归,没有任何的限制,因此具有非常好的扩展性。唯一的遗憾是没有校验字段,后期可以添加一个校验字段,以保障数据传输过程中的正确性和稳定性。