MQTT协议报文详解(保姆级)

2025-03-18 17:35:37 0点赞 0收藏 0评论

MQTT的角色

在MQTT通讯过程中,有三种身份,分别是发布者(publisher)、代理(broker)、和订阅者(subscriber)。

MQTT协议报文详解(保姆级)

在MQTT客户端的作用

发布其他客户端会订阅的信息
订阅其它客户端发布的消息
退订或删除应用程序的消息
断开与服务器连接。

MQTT服务器的作用

接受来自客户的网络连接
向订阅的客户转发应用程序消息

常用的服务器搭建平台:Eclipse Mosquitto、EMQX、HiveMQ

MQTT传输的消息

分为主题(topic)和负载(payload)两部分:

  • Topic,为消息的类型,是由客户端发布时指定的,当另外一个客户端订阅(subscribe)主题后,就会收到该主题的消息内容(payload)。

  • payload当然就是内容了,它和主题一样都存在数据包(packet)中。

MQTT消息的质量

当应用数据通过MQTT网络发送时,MQTT会把与之相关的服务质量(QoS)和主题名(Topic)相关连。

QoS在MQTT中有(摘自MQ 遥测传输 (MQTT) V3.1 协议规范):

qos 0

“至多一次”,由于消息发布完全依赖底层 TCP/IP 网络,会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。这一种方式主要普通APP的推送,倘若你的智能设备在消息推送时未联网,推送过去没收到,再次联网也就收不到了。

MQTT协议报文详解(保姆级)

qos 1

“至少一次”,确保消息到达,但消息重复可能会发生。

MQTT协议报文详解(保姆级)

qos 2

“只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。在一些要求比较严格的计费系统中,可以使用此级别。这种最高质量的消息发布服务还可以用于即时通讯类的APP的推送,确保用户收到且只会收到一次。

MQTT协议报文详解(保姆级)

MQTT.js只是支持了MQTT协议,并没有支持QoS,也就是说,只支持最低级别的“至多一次”(QoS0)。

使用Last Will和Testament特性通知有关各方客户端异常中断的机制

Last Will:即遗言机制,用于通知同一主题下的其他设备发送遗言的设备已经断开了连接。 Testament:遗嘱机制,功能类似于Last Will。

报文结构

在MQTT协议中,一个MQTT数据包由: 固定头(Fixed header)、可变头(Variable header)、消息体(payload)三部分构成。

MQTT数据包结构

MQTT协议报文详解(保姆级)

固定头

MQTT协议报文详解(保姆级)

固定头存在于所有MQTT数据包中 固定头包含两部分内容: 首字节(字节1)、 剩余消息报文长度(从第二个字节开始,长度为1-4字节) 剩余长度是当前包中剩余内容长度的字节数,包括变量头和有效负载中的数据)。剩余长度不包含用来编码剩余长度的字节。 剩余长度使用了一种可变长度的结构来编码,这种结构使用单一字节表示0-127的值。大于127的值如下处理。每个字节的低7位用来编码数据,最高位用来表示是否还有后续字节。因此每个字节可以编码128个值,再加上一个标识位。剩余长度最多可以用四个字节来表示。 数据包类型 位置: 第一个字节(Byte 1)中的7-4个bit,标识4位无符号值

MQTT协议报文详解(保姆级)

其中Bit 3为DUP字段,如果该值为1,表明这个数据包是一条重复的消息;否则该数据包就是第一次发布的消息

Bit 1-2 为QoS字段:
如果Bit 1 和 Bit 2都为0,表示QoS 0: 至多一次;
如果Bit 1为1, 表示QoS 1: 至少一次;
如果Bit 2为1,表示QoS 2:只有一次;
如果同时将Bit 1 和 Bit 2都设置成1,那么客户端或服务器认为这是一条非法的消息,会关闭当前连接。

MQTT消息QoS
MQTT发布消息服务质量保证(QoS)不是端到端的,是客户端与服务端之间的。订阅者收到MQTT消息的QoS级别,最终取决于发布消息的QoS和主题订阅的QoS
QoS: 服务质量是指 客户端和服务端之间的服务质量

MQTT协议报文详解(保姆级)

4-7位

MQTT协议报文详解(保姆级)

可变头

可变头的意思是可变化的消息头部。有些报文类型包含可变头部有些报文则不包含。可变头部在固定头部和消息内容之间,其内容根据报文类型不同而不同

MQTT协议报文详解(保姆级)
  1. 首先最上面的8个字节是Protocol Name(编码名),UTF编码的字符“MQIsdp”,头两个是编码名提长为6。头两个字节表示下一部分的长,然后后面跟上内容。这里头两个字节长为6,下面跟6个字符“MQIsdp”。

  2. Protocol Version,协议版本号,v3 也是固定的。

  3. Connect Flag,连接标识,有点像固定头部的。8位分别代表不同的标志。第1个字节保留。

Clean Session,Will flag,Will Qos, Will Retain都是相对于CONNECT消息来说的。

  • Clean Session:

0表示如果订阅的客户机断线了,那么要保存其要推送的消息,如果其重新连接时,则将这些消息推送。 1表示消除,表示客户机是第一次连接,消息所以以前的连接信息。

  • Will Flag

表示如果客户机在不是在发送DISCONNECT消息中断,比如IO错误等,将些置为1,要求重传。并且下且的WillQos和WillRetain也要设置,消息体中的Topic和MessageID也要设置,就是表示发生了错误,要重传。

  • Will Qos

在CONNECT非正常情况下设置,一般如果标识了WillFlag,那么这个位置也要标识。

  • Will RETAIN

同样在CONNECT中,如果标识了WillFlag,那么些位也一定要标识 usename flag和passwordflag,用来标识是否在消息体中传递用户和密码,只有标识了,消息体中的用户名和密码才用效,只标记密码而不标记用户名是不合法的。

4.Keep Alive,表示响应时间,如果这个时间内,连接或发送操作未完成,则断开tcp连接,表示离线。 5.Connect Return Code即通常于CONNACK消息中,表示返回的连接情况,我可以通过此检验连接情况。

MQTT协议报文详解(保姆级)

6.Topic Name, 订阅消息标识,MQTT是基于订阅/发布的消息,那么这个就是消息订阅的标识,像新闻客户端里的订阅不同的栏目一样。用于区别消息的推送类别。 主要用于PUBLISH和SUBSCRIBE中。最大可支持32767个字符,即4个字节。

7.Message Identifier

包含于PUBLISH, PUBACK, PUBREC, PUBREL, PUBCOMP, SUBSCRIBE, SUBACK, UNSUBSCRIBE, UNSUBACK. 其为16位字符表示,用于在Qos为1或2时标识Message的,保证Message传输的可靠性。

消息体(PayLoad)

MQTT协议报文详解(保姆级)

payload消息体包含CONNECT、SUBSCRIBE、SUBACK、UNSUBSCRIBE四种类型的消息:

CONNECT,消息体内容主要是:客户端的ClientID、订阅的Topic、Message以及用户名和密码。 SUBSCRIBE,消息体内容是一系列的要订阅的主题以及QoS。
SUBACK,消息体内容是服务器对于SUBSCRIBE所申请的主题及QoS进行确认和回复。
UNSUBSCRIBE,消息体内容是要订阅的主题。

MQTT协议规定的方法

(1)Connect 与服务器建立连接。
(2)Disconnect 与服务器断开TCP/IP会话。
(3)Subscribe 订阅。
(4)UnSubscribe 取消订阅。
(5)Publish 发送消息请求,发送完成后返回应用程序线程


作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起

倍控 G30S-N100四网2.5G DDR5 准系统

倍控 G30S-N100四网2.5G DDR5 准系统

680元起

联想ThinkStation P3图形工作站高性能AI计算训练设计渲染建模主机 i3-13100/8G/512G/UMA/500W

联想ThinkStation P3图形工作站高性能AI计算训练设计渲染建模主机 i3-13100/8G/512G/UMA/500W

暂无报价

元脑【NF5688M7】R1推理服务器AI主机Deepseek一体机满血版2*8480+/24*64G/2*960G/2*3.84T/8*H20

元脑【NF5688M7】R1推理服务器AI主机Deepseek一体机满血版2*8480+/24*64G/2*960G/2*3.84T/8*H20

1719999元起

华为(TaiShan2280) 国产自主可控服务器/3年服务/原厂授权/麒麟系统 5年服务 英伟达v10032gb显卡

华为(TaiShan2280) 国产自主可控服务器/3年服务/原厂授权/麒麟系统 5年服务 英伟达v10032gb显卡

暂无报价

宝德部署DeepSeek AI推理 训练服务器 大模型服务器 2*6548N 64核/512G/2*3.84T+2*16T/8*4090D

宝德部署DeepSeek AI推理 训练服务器 大模型服务器 2*6548N 64核/512G/2*3.84T+2*16T/8*4090D

暂无报价

联想ThinkStation PX深度学习数据分析AI计算图形塔式工作站【2*银牌4410T】64G丨512G+4T丨A4000-16G丨

联想ThinkStation PX深度学习数据分析AI计算图形塔式工作站【2*银牌4410T】64G丨512G+4T丨A4000-16G丨

49880元起

/ZTE中兴驭风云电脑W603E-MH轻薄便携 云端科技 节能环保无扇静音不发烫 FHD屏幕云端计算超大云存储

/ZTE中兴驭风云电脑W603E-MH轻薄便携 云端科技 节能环保无扇静音不发烫 FHD屏幕云端计算超大云存储

1999元起

思腾合力国产算力服务器(Atlas 800 9000 A2/鲲鹏920*4/32G*32/960G*2/支持Ascend 910B3 昇腾*8)CW4M00-HA

思腾合力国产算力服务器(Atlas 800 9000 A2/鲲鹏920*4/32G*32/960G*2/支持Ascend 910B3 昇腾*8)CW4M00-HA

暂无报价

DELL 戴尔 服务器硬盘SAS/300G/600G/900G/1T/2T/3T/4T 900G SAS 15K RPM 2.5英寸

DELL 戴尔 服务器硬盘SAS/300G/600G/900G/1T/2T/3T/4T 900G SAS 15K RPM 2.5英寸

1740元起

清华同方2U机架式服务器 超强JL620-G3(龙芯双路2颗3C5000/32核2.2GHz/128G/512G+8T*2)国产试用版系统 国产信创

清华同方2U机架式服务器 超强JL620-G3(龙芯双路2颗3C5000/32核2.2GHz/128G/512G+8T*2)国产试用版系统 国产信创

暂无报价

浪潮元脑【NF5468M6】DeepSeek部署服务器8卡GPU深度学习AI人工智能训练推理 2颗8358 64核 2.6G|8张 80G显卡 1T内存|2块7.68T+10块20T

浪潮元脑【NF5468M6】DeepSeek部署服务器8卡GPU深度学习AI人工智能训练推理 2颗8358 64核 2.6G|8张 80G显卡 1T内存|2块7.68T+10块20T

512999元起

HPE MicroSvr GEN10+ v1微型塔式服务器主机工作站机箱存储设备cpu G5420 1P 8G内存NHP

HPE MicroSvr GEN10+ v1微型塔式服务器主机工作站机箱存储设备cpu G5420 1P 8G内存NHP

暂无报价

研勤工控机酷睿4代610L工控电脑双网10串4个PCI插槽4U工业主机支持XP系统 I5-4590S CPU 8G内存/1T机械盘送键鼠

研勤工控机酷睿4代610L工控电脑双网10串4个PCI插槽4U工业主机支持XP系统 I5-4590S CPU 8G内存/1T机械盘送键鼠

1762元起

超聚变5V7【机架式服务器】 NAS存储 颗银牌4416+(.0G/C)64G丨块40G+块4T 丨RAID5丨双电

超聚变5V7【机架式服务器】 NAS存储 颗银牌4416+(.0G/C)64G丨块40G+块4T 丨RAID5丨双电

107999元起

威嵌沃(VINcanWO)微型工控机嵌入式全封闭迷你工控主机商务办公便携式小型台式机电脑

威嵌沃(VINcanWO)微型工控机嵌入式全封闭迷你工控主机商务办公便携式小型台式机电脑

100元起

DELL 戴尔 图形设计台式机i7-12700/32G/256G+2T/RTX3060/定制

DELL 戴尔 图形设计台式机i7-12700/32G/256G+2T/RTX3060/定制

10799元起
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
0
扫一下,分享更方便,购买更轻松