TLV通信协议
转 https://www.cnblogs.com/chusiyong/p/12191108.html
基础
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结构都可以相互嵌套递归,没有任何的限制,因此具有非常好的扩展性。唯一的遗憾是没有校验字段,后期可以添加一个校验字段,以保障数据传输过程中的正确性和稳定性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!