H3C归一化报文格式
报文结构
header | Payload | CRC |
---|---|---|
变长 | NByte | 2Byte |
Header
FrameCtrl | FirmTopic | AddrLen | Addr | MsgType | DataLen | Seq | Packet |
---|---|---|---|---|---|---|---|
2Byte | 4Byte | 1Byte | 变长 | 1Byte | 2Byte | 1Byte | 1Byte |
FrameCtrl字段定义如下:
Bit15-Bit14 | Bit13-Bit8 | Bit7 | Bit6-Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |
---|---|---|---|---|---|---|---|
Frame Version | Reserve | EncryptEnabled | EncryptMethod | Acked | NeedCRC | NeedSeq | Frame Pending |
各字段定义如下:
Ø Frame Version: 协议版本号,本协议为0b01
Ø Reserve: 保留位,全0
Ø Encrypt Enabled: 是否加密, 0b0: 明文, 0b1: payload加密,
Ø Encrypt Method: 加密方式, 0b0: 不加密, 0b1: h3c加密, 0b2: MD5加密方法
Ø NeedAck: 是否需要应答, 0b0: 无需应答, 0b1: 需要应答
Ø NeedCRC: 是否有校验, 0b0:报文尾部没有CRC字段, 0b1:报文尾部有2字节CRC
Ø NeedSeq: 是否有报文序列号, 0b0: 无Seq, 0b1: 有报文序列号,header会有1Byte信息标识报文序列号
Ø Frame Pending: 是否分片,分片报文,header尾部会3Byte的分片信息(非分片报文没有分片信息)
Ø FirmTopic: 厂商模板标识,在平台申请后写入
Ø AddrLen: 设备标识长度
Ø Addr: 设备地址信息
Ø MsgType: 表示报文通用类型,定义可以参考下面表格:
MsgType定义:
msgType | 描述 |
---|---|
0x81 | 数据上报 |
0xF1 | 平台通用应答 |
0x84 | 入网join |
0x8D | 保活 |
0x01 | 获取日志 |
0x30 | 下行配置报文 |
0x36 | 采用间隔 |
0x32 | 重启 |
Ø DataLen: 报文长度
Ø Seq: 为报文的序列号,依次递增.
*注:设备在回复时使用和服务器下发报文相同的seq即可。
Ø FragID: 分片报文ID, 报文分片时有此字段
*注:默认都使用非分片报文,无此字段,设备主动发送报文时seq使用 0x00 。
Ø Payload定义: 由用户自行定义报文格式
Ø CRC校验: CRC校验码长度为2Byte,校验范围:整个报文(frameCtrl到data)。
校验计算方法:(javascript语言)
function CRC(dataBuf){
var temp = 0;
var crc = 0xffff;
for(var i=0; i<dataBuf.length; i++){
crc ^= parseInt(dataBuf[i].toString());
for (var j=0; j<8; j++){
temp = 1 & crc;
crc >>= 1;
if (temp == 1){
crc ^= 0xa001;
}
}
}
crc ^= 0xffff;
crc = ('0000' + crc.toString(16)).substr(-4);
return crc;
}