欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 【MQTT-协议原理】

【MQTT-协议原理】

2025/4/15 0:53:33 来源:https://blog.csdn.net/sinat_23896491/article/details/147181455  浏览:    关键词:【MQTT-协议原理】

MQTT-协议原理

  • ■ MQTT-协议原理
  • ■ MQTT-服务器 称为"消息代理"(Broker)
  • ■ MQTT协议中的订阅、主题、会话
    • ■ 一、订阅(Subscription)
    • ■ 二、会话(Session)
    • ■ 三、主题名(Topic Name)
    • ■ 四、主题筛选器(Topic Filter)
    • ■ 五、负载(Payload)
  • ■ MQTT协议数据包结构
    • ■ (1)固定报头(Fixed header)
      • ■ 1.1 MQTT控制报文的类型
      • ■ 1.2 报文类型标志位
      • ■ 1.3 剩余长度
    • ■ (2)可变报头(Variable header)
    • ■ (3)消息体(Payload)

■ MQTT-协议原理

MQTT协议中有三种身份: 发布者(Publish)、 代理(Broker)(服务器)、 订阅者(Subscribe)。
MQTT传输的消息分为: 主题(Topic) 负载(payload)

■ MQTT-服务器 称为"消息代理"(Broker)

MQTT服务器以称为"消息代理"(Broker),可以是一个应用程序或一台设备。
它是位于消息发布者和订阅者之间,它可以:
(1)接受来自客户的网络连接;
(2)接受客户发布的应用信息;
(3)处理来自客户端的订阅和退订请求;
(4)向订阅的客户转发应用程序消息。

■ MQTT协议中的订阅、主题、会话

■ 一、订阅(Subscription)

订阅包含主题筛选器(Topic Filter)和最大服务质量(QoS)。订阅会与一个会话(Session)关联。一个会话可以包含多个订阅。每一个会话中的每个订阅都有一个不同的主题筛选器。

■ 二、会话(Session)

每个客户端与服务器建立连接后就是一个会话,客户端和服务器之间有状态交互。会话存在于一个网络之间,也可能在客户端和服务器之间跨越多个连续的网络连接。

■ 三、主题名(Topic Name)

连接到一个应用程序消息的标签,该标签与服务器的订阅相匹配。服务器会将消息发送给订阅所匹配标签的每个客户端。

■ 四、主题筛选器(Topic Filter)

一个对主题名通配符筛选器,在订阅表达式中使用,表示订阅所匹配到的多个主题。

■ 五、负载(Payload)

消息订阅者所具体接收的内容。

■ MQTT协议数据包结构

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

(1)固定报头(Fixed header)。存在于所有MQTT数据包中,表示数据包类型及数据包的分组类标识。
(2)可变报头(Variable header)。存在于部分MQTT数据包中,数据包类型决定了可变头是否存在及其具体内容。
(3)消息体(Payload)。也是效载荷 存在于部分MQTT数据包中,表示客户端收到的具体内容。
在这里插入图片描述

■ (1)固定报头(Fixed header)

固定包头包含
控制报文类型
控制报文标志位
剩余长度
在这里插入图片描述
剩余长度是可变的 1-4 个字节

■ 1.1 MQTT控制报文的类型

在这里插入图片描述
在这里插入图片描述

■ 1.2 报文类型标志位

[3-0]包含每个 MQTT 控制报文类型特定的标志
在这里插入图片描述
DUP1 =控制报文的重复分发标志
QoS2 = PUBLISH 报文的服务质量等级
RETAIN3 = PUBLISH 报文的保留标志

■ 1.3 剩余长度

位置: 从第 2 个字节开始。
剩余长度(Remaining Length) 表示当前报文剩余部分的字节数, 包括可变报头和负载的数据。
剩余长度 不包括用于编码剩余长度字段本身的字节数。

剩余长度字段 使用一个变长度编码方案:
对小于 128 的值它使用单字节编码。
更大的值按下面的方式处理。低 7 位有效位用于编码数据,最高有效位用于指示是否有更多的字节。
因此每个字节可以编码 128 个数值和一个延续位(continuation bit) 。
剩余长度字段最大 4 个字节。
在这里插入图片描述
例如:剩余长度字节长度是64 剩余长度填充的值就是一个字节表示64。
答 :对小于 128 的值它使用单字节编码。

例如:剩余长度是321 剩余长度填充的值 如下:
答 :大于 128 低 7 位有效位用于编码数据
计算原理
321-128 = 193 //193又大于128 在减去
193-128 = 65

第一个字节: 193
第二个字节: 2 // 321 / 128 = 2 相当于上面减去两次128

假如 第二个字节又大于128 在进行上面计算原理。

■ (2)可变报头(Variable header)

可变报头的内容根据报文类型的不同而不同。
可变报头的报文标识符(Packet Identifier) 字段存在于在多个类型的报文里。
控制报文的可变报头部分包含两字节的报文标识符字段。
在这里插入图片描述
在这里插入图片描述

■ (3)消息体(Payload)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词