前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >03.腾讯云物联网设备端学习---MQTT控制包概述

03.腾讯云物联网设备端学习---MQTT控制包概述

原创
作者头像
fancyxu
修改2021-05-21 20:00:02
1.5K0
修改2021-05-21 20:00:02
举报
文章被收录于专栏:腾讯云IoT

本系列主要目的在于记录腾讯云物联网设备端的学习笔记,并且对设备端SDK进行补充说明。

控制包格式概述

MQTT控制包格式
MQTT控制包格式

MQTT所有控制包由3部分组成:固定头部+可变头部+消息体。其中固定头部又分为 包类型、标志以及剩余长度。

CONNECT

CONNACK

PUBLISH

PUBACK

SUBSCRIBE

SUBACK

UNSUBSCRIBE

UNSUBACK

PINGREQ

PINGRESP

DISCONNECT

固定头部

包类型4bits

0001

0010

0011

0100

0100

1001

1010

1011

1100

1101

1110

标志4bits

保留0000

保留0000

DUP 1bit QoS 2bits RETAIN 1bit

保留0000

保留0010

保留0000

保留0010

保留0000

保留0000

保留0000

保留0000

剩余长度1-4 bytes

不定

0x02

不定

0x02

不定

不定

不定

0x02

0x00

0x00

0x00

可变头部

协议名 6bytes 协议等级 1 byte 连接标志 1 byte 保活时间 2 bytes

连接确认标志 1 byte 连接返回值1 byte

主题 (长度 + 主题名) (支持1个) 包ID 2bytes (仅QoS1)

包ID 同PUBLISH

包ID 2bytes

包ID 同SUBSCRIBE

包ID 2bytes

包ID 同UNSUBSCRIBE

消息体

ClientIdusr name (可选)password (可选)

应用消息

主题 (长度 + 主题名) (支持1个) 期望最大QoS 1 byte

返回值 1 byte

主题 (长度 + 主题名)(支持1个)

控制包作用

  • CONNECT:客户端发起连接到平台,每次连接第一个发送的包
  • CONNACK:CONNECT的回复
  • PUBLISH:客户端发布消息到服务器,服务器发布消息到客户端
  • PUBACK:QoS1中用作PUBLISH回复,QoS0无此回复
  • SUBSCRIBE:订阅主题,在一次会话中,客户端接收相应的topic发布的消息必须先进行订阅
  • SUBACK:SUBSCRIBE的回复
  • UNSUBSCRIBE:取消订阅主题
  • UNSUBACK:UNSUBSCRIBE的回复
  • PINGREQ:用作保活
  • PINGRESP:PINGREQ的回复
  • DISCONNECT:客户端断开连接,不过通过客户端断开连接是因为网络断开,这个时候其实DISCONNECT包也发送不出去
MQTT流程图
MQTT流程图

控制包抓包分析

可以使用SDK通过TCP非TLS方式连接平台1883端口,运行示例,进行抓包分析。

MQTT CONNECT
MQTT CONNECT

简单分析下,CONNECT包的结构和上面保持一致

  • 头部基本固定,唯一可以设置的为Connect Flags中的Clean Session,以及使用TLS鉴权时可以不需要User Name和Password
  • 非TLS鉴权下,连接平台1883端口,鉴权通过User Name和Password。
MQTT CONNACK
MQTT CONNACK

主要是针对CONNECT包的回复,无其他特殊的,主要是返回值Retrun Code上会有差异


MQTT SUBSCRIBE QoS0
MQTT SUBSCRIBE QoS0
MQTT SUBACK QoS0
MQTT SUBACK QoS0
MQTT SUBSCRIBE QoS1
MQTT SUBSCRIBE QoS1
MQTT SUBACK QoS1
MQTT SUBACK QoS1

SUBSCRIBE和SUBACK为对应关系,其中Message Identifier要匹配,QoS设置也要对应。


MQTT PUBLISH QoS0
MQTT PUBLISH QoS0

QoS0的PUBLISH包没有回复

MQTT PUBLISH QoS1
MQTT PUBLISH QoS1
MQTT PUBACK QoS1
MQTT PUBACK QoS1

PUBLISH和PUBACK为对应关系,其中Message Identifier要匹配,QoS设置也要对应。


MQTT DISCONNECT
MQTT DISCONNECT

断开连接时,由客户端发送,通常用不上,因为一般MQTT都是保持长连接,而连接断开往往因为网络,这个时候DISCONNECT包一般无法发送出去

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 控制包格式概述
  • 控制包作用
  • 控制包抓包分析
相关产品与服务
物联网通信
腾讯云物联网通信(Internet of Things Hub, IoT Hub)旨在提供一个安全、稳定、高效的连接平台,帮助开发者低成本、快速地实现“设备-设备”、“设备-用户应用”、“设备-云服务”之间可靠、高并发的数据通信。物联网通信平台不仅可以实现设备之间的互动、设备的数据上报和配置下发,还可以基于规则引擎和腾讯云产品打通,方便快捷地实现海量设备数据的存储、计算以及智能分析。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档