快速学懂——MQTT协议


报文排序目录 虽和手册报文排序存有差异 但符合常理认知 方便快速学习


OneNet MQTT服务器IP地址和端口号 183.230.40.39:6002

设备名称:测试

客户端受控端 (设备ID) :894672089 app
密码 (鉴权信息):dndfssj

单片机控制端 (设备ID) :894767958
密码 (鉴权信息):dpjfssj

二者都为客户端

用户名 (产品ID) :489402

在这里插入图片描述

MQTT协议手册
百度网盘链接

MQTT协议

CONNECT

 10          ??          00  04     4D  51  54  54        04             C2         00  78      
固定报头     剩余长度      可变报头         MQTT           协议级别         连接标志       保持连接

登录服务器 —— 信息转成十六进制

10  ??  00  04   4D  51  54  54   04   C2   00  78             00  09                 38 39 34 36 37 32 30 38 39              00  06                       34 38 39 34 30 32                 00  07             64 6E 64 66 73 73 6A      
    26 == 38 个十六进制数                                    标记 设备ID字符个数           设备ID十六进制                         标记 用户ID字符个数                  用户ID十六进制             标记 密码ID字符个数            用户ID十六进制   

请添加图片描述

CONNECT(1) —— 客户端请求与服务端建立连接

客户端登录服务器 (客户端受控端举例)

10 26 00 04 4D 51 54 54 04 C2 00 78 00 09 38 39 34 36 37 32 30 38 39 00 06 34 38 39 34 30 32 00 07 64 6E 64 66 73 73 6A

CONNACK(2) —— 服务端确认连接建立

客户端受控端 回复

20 02 01 00

   20                     02                                 01                      00
固定报头(成功)   可变+负载(第一个字节为零)      可变报头(不使用离线消息SP)       连接返回码(连接已接受)

在这里插入图片描述

DISCONNACK(14) —— 断开连接

E0 00

[点击并拖拽以移动]

PING(12) —— 客户端发送PING(连续保活)命令

C0 00

PINGPSP(13) —— PING命令回复

  D0         00
固定报头   剩余长度(字节)

在这里插入图片描述

SUBSCRIBE(8) —— 订阅请求

例如单片机控制端订阅 app_topic:app_topic 转十六进制 61 70 70 5F 74 6F 70 69 63

82 0E 00 0A 00 09 61 70 70 5F 74 6F 70 69 63 00
82 0E 00 0B 00 09 61 70 70 5F 74 6F 70 69 63 01 (不是同一报文 订阅质量等级1)

 82         ??                 00  0A             00 09      61 70 70 5F 74 6F 70 69 63       00
固定报头   剩余长度(字节)    报文标识符(编号10)      有效载荷              转十六进制数          订阅质量等级0
 82         ??                 00  0B             00 09      61 70 70 5F 74 6F 70 69 63       01   
固定报头   剩余长度(字节)    报文标识符(编号11)      有效载荷              转十六进制数          订阅质量等级1  
                            (不是同一报文)

在这里插入图片描述

SUBACK(9) —— 订阅确认

  90           03                 00 0A                        00
固定报头   剩余长度(字节)    服务器回复 报文标识符(编号10)     回复 质量等级0
  90           03                 00 0B                        01
固定报头   剩余长度(字节)    服务器回复 报文标识符(编号11)     回复 质量等级1

UNSUBSCRIBE(10) —— 取消订阅

A2 0D 00 0C 00 09 61 70 70 5F 74 6F 70 69 63

   A2         ??                 00 0C           00 09         61 70 70 5F 74 6F 70 69 63  
固定报头   剩余长度(字节)     报文标识符(编号13)     有效载荷                                      无需质量等级

在这里插入图片描述

UNSUBACK(11) —— 取消订阅确认

    B0          02                00 0C
 固定报头   剩余长度(字节)    服务器回复 报文标识符(编号13)     无质量等级0




MQTT协议(C<==>S)

连接服务器

客户端受控端 (设备ID) :894672089
密码 (鉴权信息):dndfssj
客户端受控端 发送连接服务器

10 26 00 04 4D 51 54 54 04 C2 00 78 00 09 38 39 34 36 37 32 30 38 39 00 06 34 38 39 34 30 32 00 07 64 6E 64 66 73 73 6A

单片机控制端 (设备ID) :894767958
密码 (鉴权信息):dpjfssj

单片机控制端 发送连接服务器

10 26 00 04 4D 51 54 54 04 C2 00 78 00 09 38 39 34 37 36 37 39 35 38 00 06 34 38 39 34 30 32 00 07 64 70 6A 66 73 73 6A

相互订阅

受控端订阅控制端 控制端订阅受控端 ———— 相互订阅
客户端受控端订阅 kfb_topic

82 0E 00 0A 00 09 6B 66 62 5F 74 6F 70 69 63 00

单片机控制端订阅 app_topic

82 0E 00 0A 00 09 61 70 70 5F 74 6F 70 69 63 00

PUBLISH(3) —— 发布消息

在这里插入图片描述

请添加图片描述

推送数据 123
服务等级 QoS0 无报文标识符
服务等级 QoS0服务器速度快开销小

30 0E 00 09 6B 66 62 5F 74 6F 70 69 63 31 32 33

      30         ??                00 09     6B 66 62 5F 74 6F 70 69 63      31 32 33
 QoS0固定报头   剩余长度(字节)      有效载荷          订阅 kfb_topic              推送的数据

 30(十六进制)的二进制为     0 0 1 1                   0    0      0          0
                        MQTT控制报文类型(3)         DUP  QoS-H  QoS-  RETAIN(保留标志)

在这里插入图片描述
如图所示:

二者相互订阅(只演示订阅等级为0)
单片机推送数据给客户端
客户端也可推送数据给单片机
如不订阅,则收不到任何数据

推送数据 123

服务等级 QoS1 有报文标识符

32 10 00 09 6B 66 62 5F 74 6F 70 69 63 00 01 31 32 33

      32           ??             00 09     6B 66 62 5F 74 6F 70 69 63      00 01       31 32 33
 QoS1固定报头   剩余长度(字节)      有效载荷          订阅 kfb_topic           报文标识符      推送的数据

 30(十六进制)的二进制为     0 0 1 1                   0    0      1          0
                        MQTT控制报文类型(3)         DUP  QoS-H  QoS-  RETAIN(保留标志)

PUBACK(4) —— 收到发布消息确认(QoS1 等级)

     40            02            00 01
 QoS1固定报头  剩余长度(字节)     报文标识符 

PUBACK —— 收到发布消息确认(QoS1 等级)二者相互订阅(只演示订阅等级为0)
单片机发送 32 10 00 09 6B 66 62 5F 74 6F 70 69 63 00 01 31 32 33(QoS1 等级)
单片机接收 客户端发来的推送确认 40 02 00 01 —— 回复
表示单片机 推送数据成功
如单片机没有接收到 40 02 00 01则需要重发
把 PUBLISH —— 发布消息 的 DUP置位 3A 10 00 09 6B 66 62 5F 74 6F 70 69 63 00 01 31 32 33

PUBREC(5) —— 发布消息收到(QoS2 等级)

PUBLISH —— 发布消息
服务等级 QoS2 有报文标识符

34 10 00 09 6B 66 62 5F 74 6F 70 69 63 00 01 31 32 33

        34       10 00 09  6B 66 62 5F 74 6F 70 69 63 00 01 31 32 33
固定报头为34  十六进制   0100             0     1    0          0
                MQTT控制报文类型(3)   DUP  QoS-H  QoS-  RETAIN(保留标志)

单片机发送数据 34 10 00 09 6B 66 62 5F 74 6F 70 69 63 00 01 31 32 33(QoS2 等级)
单片机接收 客户端发来的推送确认 50 02 00 01 —— 第一次推送确认
单片机发送 60 02 00 01 —— 确认 再问
客户端接收数据 34 10 00 09 6B 66 62 5F 74 6F 70 69 63 00 01 31 32 33
单片机接收 客户端发来的推送再确认 70 02 00 01 —— 第二次推送确认
客户端发送 70 02 00 01 —— 确定完成

任何一步没有签收 将重发
结束

PUBREL(6) —— 发布消息释放(QoS2 等级)

二次询问
单片机发送 60 02 00 01 —— 签收 再问

PUBCOMP(7) —— 发布消息完成(QoS2 等级)

客户端发送 70 02 00 01 —— 确定签收完成
表示彻底完成一次数据传输

请添加图片描述

结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没有余地 EliasJie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值