一個TCP長鏈接設備管理後臺工程(三)

前篇:

一個TCP長鏈接設備管理後臺工程(一)
一個TCP長鏈接設備管理後臺工程(二)git

Github倉庫地址github

TCP協議整合JTT808協議

前面簡單說明了基於golang的net庫進行TCP通信。如今咱們須要將現有的協議整合進去。行業內車輛終端通常都是對接交通部的JTT808協議,此處咱們要實現的是JTT808-2019版本。golang

消息結構

標識位 消息頭 消息體 校驗碼 標識位
0x7e 0x7e

標識位應採用0x7e表示,若校驗碼、消息頭以及消息體中出現0x7e及0x7d,則要進行轉義處理。轉義規則定義以下:算法

  • 先對0x7d進行轉義,轉換爲固定兩個字節數據:0x7d 0x01;
  • 再對0x7e進行轉義,轉換爲固定兩個字節數據:0x7d 0x02。

轉義處理過程以下:數據庫

發送消息時:先對消息進行封裝,而後計算並填充校驗碼,最後進行轉移處理;segmentfault

接收消息時:先對消息進行轉義還原,而後驗證校驗碼,最後解析消息。加密

示例:發送一包內容爲 0x30 0x7e 0x08 0x7d 0x55 的數據包,則通過封裝以下:0x7e 0x 30 0x7d 0x02 0x08 0x7d 0x01 0x55 0x7e。get

注:多字節按照大端順序傳輸

消息頭

起始字節 字段 數據類型 描述及要求
0 消息ID WORD --
2 消息體屬性 WORD 消息體屬性格式結構見下表
4 協議版本號 BYTE 協議版本號,每次關鍵修訂遞增,初始版本爲1
5 終端手機號 BCD[10] 根據安裝後終端自身的手機號碼轉換。手機號不足位的,則在前面補充數字。
15 消息流水號 WORD 按發送順序從0開始循環累加
17 消息包封裝選項 -- 若是消息體屬性中相關標識位肯定消息分包處理,則該項有內容,不然無該項

消息體屬性格式:it

15 14 13 12~10 9~0
保留 版本標識 分包 數據加密方式 消息體長度
注版本標識位固定爲1

加密方式按照以下進行:table

  • bit10~bit12爲數據加密標識位;
  • 當此三位爲0,標識消息體不加密;
  • 當第10位爲1,標識消息體通過RSA算法加密;
  • 其它位爲保留位。

消息分包按照以下要求進行處理:

  • 當消息體屬性中第13位爲1時表示消息體爲長消息,進行分包發送處理,具體分包消息由消息包封包項決定;
  • 若第13位爲0,則消息頭中無消息包封裝項字段。

消息包封裝項內容:

起始字節 字段 數據內容 描述及要求
0 消息總包數 WORD 該消息分包後的總包數
2 包序號 WORD 從1開始

校驗碼

校驗碼的計算規則應從消息頭首字節開始,同後一字節進行異或操縱直到消息體末字節結束;校
驗碼長度爲一字節。

消息體

消息體只須要實現如下幾個命令便可:

命令 消息ID 說明
終端通用應答 0x0001 終端通用應答
平臺通用應答 0x8001 平臺通用應答
終端心跳 0x0002 消息體爲空,應答爲通用應答
終端註冊 0x0100
終端註冊應答 0x8100
終端鑑權 0x0102 應答爲通用應答
位置信息 0x0200 應答爲通用應答

數據格式

終端通用應答:

起始字節 字段 數據內容 描述及要求
0 應答流水號 WORD 該消息分包後的總包數
2 應答ID WORD 對應的平臺消息的ID
4 結果 BYTE 0:成功/確認;1:失敗;2消息有誤;3:不支持

平臺通用應答:

起始字節 字段 數據內容 描述及要求
0 應答流水號 WORD 對應的終端消息流水號
2 應答ID WORD 對應的終端消息的ID
4 結果 BYTE 0:成功/確認;1:失敗;2消息有誤;3:不支持;4:報警處理確認

終端註冊:

起始字節 字段 數據內容 描述及要求
0 應答流水號 WORD 對應的終端消息流水號
2 應答ID WORD 對應的終端消息的ID
4 結果 BYTE 0:成功/確認;1:失敗;2消息有誤;3:不支持;4:報警處理確認

終端註冊應答:

起始字節 字段 數據內容 描述及要求
0 應答流水號 WORD 對應的終端註冊消息的流水號
2 結果 BYTE 0:成功;1:車輛已被註冊;2:數據庫中無該車輛;3終端已被註冊;4數據庫中無該終端
3 鑑權碼 STRING 註冊結果爲成功時,纔有該字段

鑑權:

起始字節 字段 數據內容 描述及要求
0 鑑權碼長度 BYTE ---
n 結果 STRING n爲鑑權碼長度
n+1 終端IMEI BYTE[15] ---
n+16 軟件版本號 BYTE[20] 廠家自定義版本號,位數不足時,後補0x00,n爲鑑權碼長度

以上就是須要實現的808協議內容,從協議中能夠看到。對於協議實現,爲了後續拓展方便,咱們須要將它分割成兩個基本部分:協議解析和協議處理。

相關文章
相關標籤/搜索