一个TCP长连接设备管理后台工程(三)

qiuzhiqian · · 1360 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

前篇:

一个TCP长连接设备管理后台工程(一)
一个TCP长连接设备管理后台工程(二)

Github仓库地址

TCP协议整合JTT808协议

前面简单说明了基于golang的net库进行TCP通讯。现在我们需要将现有的协议整合进去。行业内车辆终端一般都是对接交通部的JTT808协议,此处我们要实现的是JTT808-2019版本。

消息结构

标识位 消息头 消息体 校验码 标识位
0x7e 0x7e

标识位应采用0x7e表示,若校验码、消息头以及消息体中出现0x7e及0x7d,则要进行转义处理。转义规则定义如下:

  • 先对0x7d进行转义,转换为固定两个字节数据:0x7d 0x01;
  • 再对0x7e进行转义,转换为固定两个字节数据:0x7d 0x02。

转义处理过程如下:

发送消息时:先对消息进行封装,然后计算并填充校验码,最后进行转移处理;

接收消息时:先对消息进行转义还原,然后验证校验码,最后解析消息。

示例:发送一包内容为 0x30 0x7e 0x08 0x7d 0x55 的数据包,则经过封装如下:0x7e 0x 30 0x7d 0x02 0x08 0x7d 0x01 0x55 0x7e。

注:多字节按照大端顺序传输

消息头

起始字节 字段 数据类型 描述及要求
0 消息ID WORD --
2 消息体属性 WORD 消息体属性格式结构见下表
4 协议版本号 BYTE 协议版本号,每次关键修订递增,初始版本为1
5 终端手机号 BCD[10] 根据安装后终端自身的手机号码转换。手机号不足位的,则在前面补充数字。
15 消息流水号 WORD 按发送顺序从0开始循环累加
17 消息包封装选项 -- 如果消息体属性中相关标识位确定消息分包处理,则该项有内容,否则无该项

消息体属性格式:

15 14 13 12~10 9~0
保留 版本标识 分包 数据加密方式 消息体长度
注版本标识位固定为1

加密方式按照如下进行:

  • 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协议内容,从协议中可以看到。对于协议实现,为了后续拓展方便,我们需要将它分割成两个基本部分:协议解析和协议处理。


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:qiuzhiqian

查看原文:一个TCP长连接设备管理后台工程(三)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1360 次点击  
加入收藏 微博
上一篇:压测工具
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传