消息整体构成
起始标记 | 传输数据头 | 数据体 | 校验数据 | 结束标记 |
0xF0 | 38字节 | 不定长,数据体长度在传输数据头中确定 如果没有数据体,本部分长度为0 | 0/4字节 | 0xFF |
消息的总长度:
起始标记(1)+ 协议数据头字节数(38)+ 前置处理头字节数 + 数据体字节数 + 校验数据字节数 + 结束标记(1)
起始标记:用于标识一个消息的开始,固定值:0xF0。该值不正确时,断开连接。
传输数据头:用于描述传输协议控制以及消息的唯一性控制。
数据体:包含传输数据内容,数据体的大小由所传输数据的内容决定。
校验数据:采用CRC32方式对传输的数据体内容进行校验。
数据头定义
消息的唯一标识:由传输数据头中“传输命令编码”、“消息时间戳”、“消息序号”、“设备ID”、“设备分组编码”这五个部分共16个字节确定。当接收方收到这16个字节相同的两个消息时,即可认定是重复消息。
分类 | 字段名 | 长度 | 数据类型 | 描述 | ||
传输 数据头 | 消息总长度 | 4 | HEX | 消息整体长度 | ||
协议标识 | 4 | HEX | 0x00000001 | |||
协议版本号 | 1 | HEX | 用于确定传输协议版本号:0x01 | |||
数据格式版本号 | 1 | HEX | 用于确定数据体中的数据编码格式版本号 :0x01 | |||
数据传输类型 | 1 | HEX | 0x00:协议数据;0x01:预留数据; 0x02:交易数据;0x03:业务数据; 0x04:控制数据;0x05:状态数据。 | |||
预留 | 1 | HEX | 0xFF | |||
消息 唯一 标识 | 传输命令编码 | 1 | HEX | 区分不同的传输命令 | ||
消息时间戳 | 7 | BCD | 发送请求消息的时间:YYYYMMDDHH24MISS | |||
消息序列号 | 2 | HEX | 由消息发起方产生。初值为1,从程序启动后开始递增,到达65535后归1。 | |||
设备ID | 4 | 1HEX+2BCD+1HEX | 消息发送方的标识 | |||
设备分组编码 | 2 | 1HEX+1HEX | 消息发送方的分组标识,确认设备分组和组内编码。 | |||
会话生存周期(改为命令代码) | 2 | HEX | 本次会话的生存周期。用于确定是否检查超时及超时限制的时间。单位:秒。 | |||
分包总数 | 1 | HEX |
| |||
分包序号 | 1 | HEX | 当前数据分包序号,如果总包数=1,序号为1;如果总包数>1,分包序号从1开始递增。 | |||
前置处理标识 | 1 | HEX | 0x00 | |||
加密算法 | 1 | HEX | 0x00 | |||
加密算法补位长度 | 1 | HEX |
| |||
密钥版本 | 1 | HEX | 加密数据体采用密钥版本号 | |||
校验码算法 | 1 | HEX | 目前系统间数据交互时采用0x00。 0:不采用;1:CRC32;其它值无效。CRC32的初值是用0x000000000。 | |||
预留字段2 | 1 | HEX | 预留字段 0XFF |
传输命令区分:
协议命令 | 编码 | 命令用途 |
连接请求 | 0x01 | 建立初始合法连接 |
连接确认反馈 | 0x02 | 对连接请求的确认 |
数据传递 | 0x03 | 用于各类数据传输 |
数据传递反馈 | 0xFD | 用于对需要反馈的“数据传递”中指定的内容进行反馈数据传递 |
连接存活确认 | 0x08 | 用于无消息传输时的连接确认 |
连接存活确认反馈 | 0xFC | 仅用于对连接确认的反馈 |
消息正确应答(ACK) | 0xFB | 用于正确接收确认 |
消息错误应答(NACK) | 0x00 | 用于出现接收错误和收到非指定反馈数据时的错误应答 |
业务正确处理完成反馈 | 0xFA | 用于收到数据后业务正确处理完成的反馈 |
业务处理出错反馈 | 0xF9 | 用于收到数据后业务处理出错的反馈 |