基礎
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結構都可以相互嵌套遞歸,沒有任何的限制,因此具有非常好的擴展性。唯一的遺憾是沒有校驗字段,后期可以添加一個校驗字段,以保障數據傳輸過程中的正確性和穩定性。