报文格式

Bit 7 6 5 4 3 2 1 0
byte1 MQTT控制报文类型 用于指定控制报文类型的控制位
byte2 剩余长度

报文类型

名字 描述 方向
Reserved 保留 0 禁止
CONNECT 客户端请求连接服务端 c-s 1 客户端到服务端
CONNACK 连接报文确认s-c 2 服务端到客户端
PUBLISH 发布消息c=s 3 两个方向都允许
PUBACK QoS 1 消息发布收到确认c=s 4 两个方向都允许
PUBREC 发布收到(保证交付第一步) 5 两个方向都允许
PUBREL 发布释放(保证交付第二步 ) 6 两个方向都允许
PUBCOMP QoS 2 消息发布完成(保证交互第三步) 7 两个方向都允许
SUBSCRIBE 客户端订阅请求 8 客户端到服务端
SUBACK 订阅请求报文确认 9 服务端到客户端
UNSUBSCRIBE 客户端取消订阅请求 10 客户端到服务端
UNSUBACK 取消订阅报文确认 11 服务端到客户端
PINGREQ 心跳请求 12 客户端到服务端
PINGRESP 心跳响应 13 服务端到客户端
DISCONNECT 客户端断开连接 14 客户端到服务端
Reserved 保留 15 禁止

服务等级 一般阿里云及华为云等只支持0和1,0用的较多

Qos值 BIT2 BIT1 描述
0 0 0 最多分发一次
1 0 1 至少分发一次,询问1次
3 1 0 只分发一次,询问2次
- 1 1 保留位

所用资料

https://www.aliyundrive.com/s/vZaq8dMLzNG

阿里云创建产品

image.png
产品分类可依照实际情况选择,选择后可以根据类型自动加载功能属性。
本次测试选:智能生活/电工照明/插座
节点类型选择:设备。网关下可接入多个设备。
不需要接入网关;

image.pngimage.png
连接方式都可以。
数据格式选择常用JSON格式。
不使用加密,没钱。

设置完成后:

image.png

添加自定义功能

image.png

添加产品后去添加设备(设备相当于一个类,产品就是一个实例)

添加设备后复制证书
image.png

用户名密码

(*设备名称DeviceName,#用户名ProductKey,密码通过哈希值换算:http://encode.chahuo.com/

设备信息:{ “ProductKey”: “gd3fQTnUHD9”, “DeviceName”: “D001”, “DeviceSecret”: “38173969a9155f6c339c9e6c3677a12f” }

客户端ID: *|securemode=3,signmethod=hmacsha1| D001|securemode=3,signmethod=hmacsha1|
用户名 : *&# D001&gd3fQTnUHD9
密码: 用DeviceSecret做为秘钥对
clientIddeviceNameproductKey#
进行hmacsha1加密后的结果
clientIdD001deviceNameD001productKeygd3fQTnUHD9
使用秘钥(38173969a9155f6c339c9e6c3677a12f)哈希1加密后:
23bc214776c189960914b360b2e8acd69eb92202

服务器ip和端口号:

ip:华东2:
.iot-as-mqtt.cn-shanghai.aliyuncs.com 表示自己账号的ProductKey注意替换
端口:1883
替换后地址为:gd3fQTnUHD9.iot-as-mqtt.cn-shanghai.aliyuncs.com:1883

测试

固定报头:10 ?? (??表示总的长度16进制表示)
可变十个字节CONNECT:00 04 4D 51 54 54 04 C2 00 64
将客户端ID(转换为16进制后为:44 30 30 31 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
发送长为:38,转16进制后为:00 26
将用户名转换后为:44 30 30 31 26 67 64 33 66 51 54 6E 55 48 44 39
长度为:16,转换后为 00 10
密码转换后:32 33 62 63 32 31 34 37 37 36 63 31 38 39 39 36 30 39 31 34 62 33 36 30 62 32 65 38 61 63 64 36 39 65 62 39 32 32 30 32
长度为:40,转换后为 00 28
整合后:总发送为110个 ,所以??替换为6E

  1. 10 6E 00 04 4D 51 54 54 04 C2 00 64 00 26 44 30 30 31 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 10 44 30 30 31 26 67 64 33 66 51 54 6E 55 48 44 39 00 28 32 33 62 63 32 31 34 37 37 36 63 31 38 39 39 36 30 39 31 34 62 33 36 30 62 32 65 38 61 63 64 36 39 65 62 39 32 32 30 32

image.pngimage.png

返回结果为:20 02 00 00 CONNACK报文连接成功。

00 连接接收
01 不支持的协议
02 不合格的客户端标识
03 服务端不可用
04 用户密码错误
05 未授权

其它报文

14—-DISCONNECT —— E0 00
12—-PING ——C0 00 回复 D0 00
8—-SUBSCRIBE ——等级0/1———— 16进制 订阅主题 ——00 0A

PUBLISH发布消息和PUBACK收到发布消息确认