MQTT 协议与实现 1 —— 协议概要

      最后更新:2022-04-22 12:50:30 手机定位技术交流文章

      MQTT 协议既是连接,也是客体。 M2M允许对产品和服务提出若干申请的协定Broker控制信息在它们之间发送和接收。

      1. 固定头(Fixed Header) : 所有MQTT Control Packets的固定存在的报头
      2. 可选头(Variable Header) : 某些MQTT Control Packets会包含的报头
      3. 负载(Payload) : 某些MQTT Control Packets会有传输Payload

      初始字节的前四个位数加起来等于总计。$2^4=16$一种可设想的信息控制类型,最后四个字节是标牌的组合,可视为在某种程度上对列报类型的补充。MQTT报文的基本格式为:

      在这里插入图片描述

      固定头

      固定头由两部分组成:初始字节和剩余长度。如前所述,第一个字节的前四位表示不同种类的控制电文。

      • 连接管理类:
        • 连接控制类型包括:连接、连接确认和终止。
        • 心跳控制型:Ping请求、Ping相应
      • 消息管理类:
        • 同步文件夹:订阅、订阅确认、取消订阅、订阅确认
        • 信息类型包括:释放、确认、接收、释放和完全释放。

      每种类型的具体守则如下:

      • 连接类
        • CONNECT:1,客户端请求连接到服务器
        • CONNACK:2,服务器对客户连接确认
      • 信息发布(单向和双向信息都可以从客户端发送到服务器)
        • PUBLISH:3, 发布消息
        • PUBACK:4, 发布确认
        • PUBREC:5发射的第一部分 发射的第一部分
        • PUBREL:6,释放(第2部分)
        • PUBCOMP:7完全释放(交付第3部分)
      • 消息订阅
        • SUBSCRIBE:8, Client subscribe request (Client to Server )
        • SUBACK:9, Subscribe acknowledgment ( Server to Client)
        • UNSUBSCRIBE:10, Unsubscribe request (Client to Server)
        • UNSUBACK:11, Unsubscribe acknowledgment ( Server to Client)
      • 心跳
        • PINGREQ:12, PING request (Client to Server)
        • PINGRESP:13, PING response (Server to Client )
      • 断开连接
        • DISCONNECT:14, Client is disconnecting (Client to Server)
      • 0,15: 保留。

      剩余长度代表当前提交文件的字节(包括可选头和两个部分总负荷长度)。对于这一长度,使用可变长度编码,即初始字节的低长度编码。7位表示0~127,最高位如果为1表示未来字字节;完全相同,不能使用最多一个字字节4个字节。

      可变头和负载

      某些文件有不同的标题,每份报告都有独特的标题;然而,并不是每份报告都包含一个变量。Payload部分:

      连接管理类型报文 Payload
      Connect 必含
      CONNACK 必无
      DISCONNECT 必无
      PINGREQ 必无
      PINGRESP 必无
      消息管理类型报文 Payload
      PUBLISH 可选
      PUBACK 必无
      PUBREC 必无
      PUBREL 必无
      PUBCOMP 必无
      SUBSCRIBE 必含
      SUBACK 必含
      UNSUBSCRIBE 必含
      UNSUBACK 必无

      连接功能

      Connect纸头和负荷的改变 相当困难。

      • Variable header协议名称(6字节)+协议级别(1字节)+连接标记(1字节)+保持连接(2字节)
      • Payload: Client Identifier + Will Topic + Will Message + User Name + Password

      其中,Variable Header分为:

      • 协议名称长度( 2 字节, 带有值)4)+MQTT(4个字节)
      • 1字节是协议级别。0x04代表版本号为3.1.1的协议
      • 1字节表示连接符号,即:清洁会、标志、遗嘱、遗嘱、遗嘱、标记、遗嘱、标记、遗嘱、标志、标志、用户名和密码标记的标志
      • 持续连接: 2 字节指定客户端与传输下一个控制软件包开始之间的最长时间间隔(sec)。

      Payload部分则分为:

      • 客户端标识符:这是Payload中的第一个字段
      • 意愿的主题和意愿的信息:如果Variable Header中的遗嘱标志被设置为1,那么Payload这是下一个字段。Will TopicWill Message
      • 用户名:如果Variable Header用户名已设为 1 。 用户名被输入到以下字段中 。
      • 密码:用户Variable Header密码输入到以下字段。

      服务器收到CONNECT我们会在报告后寄来一个CONNACK进行连接确认。CONNACK信件的变量信头由两部分组成:连接确认符号(1字节)和返回代码(1字节)。

      CONACK返回码 含义
      0x00 连接接受
      0x01 连接被拒绝( 无效协议版本)
      0x02 连接被拒绝( 找不到客户身份)
      0x03 连接被拒绝( 服务器服务无法访问) 。
      0x04 连接被拒绝( 无效的用户名或密码)
      0x05 连接拒绝(未授权)
      0x06-0xFF 预留

      注意CONNACK报文无Payload部分。

      发布消息及响应

      信件可以从客户端传送到服务器,也可以从服务器传送到客户端。PUBLISH划界案的可变头和负载格式如下:

      • Variable Header:包件识别(2个字节)+主题名称
      • Payload: 即所发布的消息

      PUBLISH消息的接收者将根据QoS各级,答复如下:

      QoS Level 期待响应
      QoS 0 None
      QoS 1 PUBACK
      QoS 2 PUBREC

      此外,对于QoS 2我们收到信息后,将予以传播。PUBREC后,会响应以PUBREL;而发布方收到PUBREL后,会再返回以PUBCOMP,作为QoS在发布电文控制报告之前进行最后电文交换:

      订阅消息

      订阅

      和消息发布不同,SUBSCRIBE由客户发送到服务处,以构建订阅信息。SUBSCRIBE文件记录了客户对一个或多个主题的兴趣。

      SUSBSCRIBE信件信头的第一个字节必须是:$color{orange}1000enspace color{green}0010$加载必须至少有一个Topic Filter/Requested QoS对,其中,每个Topic Filter/Requested QoS对类似于:

      同一个SUBSCRIBE报文下,各个Topic Filter/Requested QoS对连续堆叠。

      而当服务端收到SUBSCRIBE当通信到达时,你必须对此作出答复。SUBACK报文。SUBACK报文的Payload将为每个用户指定一个响应代码,为每个响应代码指定一个字节:

      响应码 含义
      0x00 Success - Maximum QoS 0
      0x01 Success - Maximum QoS 1
      0x02 Success - Maximum QoS 2
      0x80 Failure

      也即SUBACK报文的Payload是包含一系列响应数字的字节数组。

      取消订阅

      类似的,UNSUBSCRIBE是客户向服务发送的信息,以便终止订阅。UNSUSBSCRIBE信件信头的第一个字节必须是:$color{orange}1010enspace color{green}0010$

      但是和SUBSCRIBE不同的是,UNSUBSCRIBEPayload并非由各个Topic Filter/Requested QoS这是永无止境的堆叠,是零Topic Filter所组成的列表。

      此外,UNSUBACK报文并没有Payload

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/22636.html

          热门文章

          文章分类