zoukankan      html  css  js  c++  java
  • TLV通信协议

    基础

    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结构都可以相互嵌套递归,没有任何的限制,因此具有非常好的扩展性。唯一的遗憾是没有校验字段,后期可以添加一个校验字段,以保障数据传输过程中的正确性和稳定性。

  • 相关阅读:
    SuperSocket 服务管理器 (ServerManager)
    在Linux/Unix上运行SuperSocket
    SuperSocket
    添加SuperSocket的启动代码到 Windows Azure 的 WorkRole 项目
    Struts2中文件的上传与下载
    解决eclipse中找不到jar包问题
    SSH框架的搭建与配置文件的书写格式
    jxl导出Excel
    CentOS下yum安装mysql,jdk以及tomcat
    如何控制WAP网站上输入框的默认键盘类型
  • 原文地址:https://www.cnblogs.com/chusiyong/p/12191108.html
Copyright © 2011-2022 走看看