目录
MQTT协议学习笔记(三 连接阿里云)
阿里云MQTT 协议介绍
阿里云服务器IP地址(华东2):Y.iot-as-mqtt.cn-shanghai.aliyuncs.com
阿里云服务器端口号(华东2):1883
hmacsha1加密计算网站:http://encode.chahuo.com/
客户端ID: X|securemode=3,signmethod=hmacsha1|
用户名: X&Y
密码: 用devicesecret作为密钥对clientIdXdeviceNameXproductKeyY进行hmacsha1加密后的结果
建立阿里云的产品和设备后,可直接复制得到(在设备栏可查看)
{
“ProductKey”: “a17uvxb3Eyb”,
“DeviceName”: “lot_T”,
“DeviceSecret”: “67qN0jsgnyAI6oR87jUsiN2D1G5h6ghb”
}
X表示设备名称,Y表示产品ID
CONNECT 有效载荷
客户端ID = lot_T|securemode=3,signmethod=hmacsha1|
HEX表示= 6C 6F 74 5F 54 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 61 31 7C
总共 = 39个字节 = 0x27
用户名 = lot_T&a17uvxb3Eyb
HEX表示 = 6C 6F 74 5F 54 26 61 31 37 75 76 78 62 33 45 79 62
总共 = 17 = 0x11
密码解析
密码 = b21b0d30e0d87171ec3d87a6700e6ebd13649433
HEX表示 = 62 32 31 62 30 64 33 30 65 30 64 38 37 31 37 31 65 63 33 64 38 37 61 36 37 30 30 65 36 65 62 64 31 33 36 34 39 34 33 33
总共 = 40 = 0x28
分别在hex格式下的客户端ID,用户名,密码之前用两个字节表示他们的数据长度 如ID前 加上 00 27
上一篇中讲到,将CONNECT的可变包头设置为00 04 4D 51 54 54 04 C2 00 78,CONNECT的剩余长度等于可变报文加上负载之和,相加等于112 = 0X70
综上得到报文如下
10 70 00 04 4D 51 54 54 04 C2 00 78 00 27 6C 6F 74 5F 54 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 61 31 7C 00 11 6C 6F 74 5F 54 26 61 31 37 75 76 78 62 33 45 79 62 00 28 62 32 31 62 30 64 33 30 65 30 64 38 37 31 37 31 65 63 33 64 38 37 61 36 37 30 30 65 36 65 62 64 31 33 36 34 39 34 33 33
数据发送之后返回 20 02 00 00 表示已经连接上服务器
CONNACK报文解析
CONNACK固定报头
CONNACK固定报头固定为 20 02
CONNACK可变报头
CONNACK可变报头BYTE1
CONNACK可变报头BYTE1低7位固定为0,最高位由 clean session决定,因为我上一篇文章将他置一,所以收到的可变报文BYTE1 = 0,是正常的
CONNACK可变报头BYTE2
(以上包含博主个人的阿里云信息,希望读者不要恶意使用)