文章

MQTT如此简单:协议特点和数据包结构

2024-11-13HMS工业网络

263阅
MQTT是一种基于发布/订阅模式的"轻量级"通讯协议。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

    MQTT是一种基于发布/订阅模式的"轻量级"通讯协议。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

MQTT概述

    MQTT协议,Message Queuing Telemetry Transport消息队列遥测传输协议,初始第一版由IBM在1999年发布。MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议,构建于TCP/IP等有序、可靠、双向连接的网络连接上。

    MQTT的主要特点

    发布订阅模式区别于传统的客户端-服务器模式,它使发送消息的发布者与接收消息的订阅者分离,发布者与订阅者不需要建立直接联系。

    既可以让多个发布者向一个订阅者发布消息,也可以让多个订阅者同时接收一个发布者的消息,核心在于由MQTT  Broker负责所有消息路由和分发的工作,用很小的传输消耗和协议数据交换,最大限度减少网络流量。

    提供三种等级的服务质量:

    Qos0: “最多一次”,尽操作环境所能提供的最大努力分发消息。消息可能会丢失

    QoS1: “至少一次”,保证消息可以到达,但是可能会重复。

    QoS2: “仅一次”,保证消息只到达一次。

       数据表示

       3.1单字节数据

       字节中的位从0到7,第7位是最高有效位,第0位是最低有效位

       3.2双字节整数

       双字节整数数值是使用大端序(big-endian,高位字节在低位字节前面)的16位无符号整数

       3.3 UTF-8编码字符串

       MQTT控制报文中的文本字段编码为UTF-8格式的字符串

MQTT数据包结构

       MQTT是基于TCP/IP的应用层协议

    固定报头(Fixed header),存在于所有MQTT数据包中,表示数据包类型及数据包的分组类标识。

    可变报头(Variable header),存在于部分MQTT数据包中,数据包类型决定了可变头是否存在及其具体内容。

    有效载荷(Payload),存在于部分MQTT数据包中,表示客户端收到的具体内容。

       1. 固定报头

       每个MQTT控制包都包含一个固定报头

       1.1 消息类型

       1.2 标识位(bit0~3)

     DUP1: 控制报文的重复分发标志

    QoS2:PUBLISH报文的服务质量等级

    RETAIN3: PUBLISH报文的保留标志

    1.3 剩余长度

    剩余长度是一个可变字节整数,表示当前控制报文中剩余的字节数,包括可变报头和有效载荷中的数据。

    2. 可变报头

    可变报头位于固定报头和有效载荷之间,可变报头的内容根据报文类型的不同而不同。通常都包括一个2字节的数据包标识字段,这些类型的包有:PUBLISH (QoS > 0)、PUBACK、PUBREC、PUBREL、PUBCOMP、SUBSCRIBE、SUBACK、UNSUBSCRIBE、UNSUBACK

    3. 有效载荷

    Payload有效载荷位于MQTT数据包的第三部分,CONNECT、SUBSCRIBE、SUBACK、UNSUBSCRIBE四种类型包含有效载荷。

    CONNECT有效载荷内容主要是:客户端的ClientID、遗嘱主题、遗嘱Message以及用户名和密码。

    SUBSCRIBE有效载荷内容是主题过滤器指明需要订阅的Topic以及QoS。

    SUBACK有效载荷内容包含一个返回码清单,每个返回码对应等待确认的SUBSCRIBE报文中的一个主题过滤器。UNSUBSCRIBE有效载荷内容是客户端想要取消订阅的主题过滤器。

责任编辑:杨培
本文来源于互联网,e-works本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供,并以尽力标明作者与出处,如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。联系方式:editor@e-works.net.cn tel:027-87592219/20/21。
读者评论 (0)
请您登录/注册后再评论