前言
最近回顾了MQTT协议,更深入的了解到了它的数据发送过程,在此记录一下
CONNECT数据组成
固定报头+可变报头+有效载荷
固定报头
每个MQTT控制报文都包含一个固定报头。一般情况下为:10 ??
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
byte 1 | MQTT控制报文的类型 | 用于指定控制报文类型的标志位 | ||||||
byte 2... | 剩余长度 |
可变报头
某些MQTT控制报文包含一个可变报头部分。它在固定报头和负载之间。可变报头的内容根据报文类型的不同而不同。可变报头的报文标识符(Packet Identifier)字段存在于在多个类型的报文里。一般情况下为:00 04 4D 51 54 54 04 C2 00 64
Bit | 7 - 0 |
---|---|
byte 1 | 报文标识符 MSB |
byte 2 | 报文标识符 LSB |
有效荷载
某些MQTT控制报文在报文的最后部分包含一个有效载荷。它是我们需要关注的核心内容,也是我接下来要说明的:
1、阿里云注册设备
2、获取设备证书
{
"ProductKey": "k0av3***Y9",
"DeviceName": "bigfly",
"DeviceSecret": "18e***fd1045f825fac2e0360237173"
}
* 表示设备名称:DeviceName
# 表示密钥:ProductKey
客户端ID : *|securemode=3,signmethod=hmacsha1|
用户名 : *&#
密码 :clientId * deviceName * productKey#
(1)带入数据,转十六进制
客户端ID:bigfly|securemode=3,signmethod=hmacsh1|
十六进制:00 27 62 69 67 66 6C 79 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 31 7C
用户名:bigfly&k0av3pYS9Y9
十六进制:00 12 62 69 67 66 6C 79 26 6B 30 61 76 33 70 59 53 39 59 39
hmacsha1哈希加密:2c904a85684b6df0a83cbb75c3b557bac4e98e27
十六进制:00 28 32 63 39 30 34 61 38 35 36 38 34 62 36 64 66 30 61 38 33 63 62 62 37 35 63 33 62 35 35 37 62 61 63 34 65 39 38 65 32 37
前面两个字节是为了遵循规则UTF-8:表示后面的字节数
(2)整合数据
客户端ID+用户名+hmacsha1哈希加密
00 27 62 69 67 66 6C 79 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 31 7C
00 12 62 69 67 66 6C 79 26 6B 30 61 76 33 70 59 53 39 59 39
00 28 32 63 39 30 34 61 38 35 36 38 34 62 36 64 66 30 61 38 33 63 62 62 37 35 63 33 62 35 35 37 62 61 63 34 65 39 38 65 32 37
CONNECT控制报文
1、固定报头+可变报头+有效载荷
10 ?? + 00 04 4D 51 54 54 04 C2 00 64 + 00 27 62 69 67 66 6C 79 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 31 7C 00 12 62 69 67 66 6C 79 26 6B 30 61 76 33 70 59 53 39 59 39 00 28 32 63 39 30 34 61 38 35 36 38 34 62 36 64 66 30 61 38 33 63 62 62 37 35 63 33 62 35 35 37 62 61 63 34 65 39 38 65 32 37
??:剩余长度 ?后面还有几个字符
0X71
10 71 00 04 4D 51 54 54 04 C2 00 64 00 27 62 69 67 66 6C 79 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 31 7C 00 12 62 69 67 66 6C 79 26 6B 30 61 76 33 70 59 53 39 59 39 00 28 32 63 39 30 34 61 38 35 36 38 34 62 36 64 66 30 61 38 33 63 62 62 37 35 63 33 62 35 35 37 62 61 63 34 65 39 38 65 32 37