mqtt协议1- 简介和报文格式

MQTT是一种轻量级的基于发布/订阅模式的通信协议,常用于物联网设备。它基于TCP/IP,具有简洁、开放和实时的特点。协议中包含各种控制报文,如CONNECT、PUBLISH等,报文由固定头、可变头和有效载荷组成,其中QoS级别确保消息传递的可靠性。
摘要由CSDN通过智能技术生成

1.mqtt协议1: 简介和报文格式

  • Message Queing Telemetry Transport: 消息队列遥测传输协议
    • 基于发布/订阅模式的轻量级通讯协议, 基于于TCP/IP协议, IBM1999年发布
    • 特点: 轻量, 简单, 开放, 实时, 可靠
  • 服务器分发消息, 可发布, 不订阅
  • 客户端可发布, 订阅1

1.1.MQTT概念

  • 网络连接Network Connection:使用底层传输协议基础设施
    • 客户端用它连接服务端
    • 提供有序, 可靠, 双向字节流传输
  • 应用消息Application Message: MQTT协议通过网络传输应用数据
    • 应用消息通过MQTT传输, 有关联的服务质量QoS与主题Topic
  • 客户端Client: 使用MQTT的程序/设备, 总是通过网络连接到服务端
    • 发布消息->其他客户端
    • 订阅消息->以请求接受相关应用消息
    • 取消订阅, 移除请求
    • 从服务端断开连接
  • 服务端Server: 发送消息的客户端, 请求订阅的客户端之间的中介
    • 接受网络连接<-来自客户端
    • 接受消息<-客户端发布的应用消息
    • 转发消息->符合条件的已订阅客户端
    • 处理客户端的订阅, 取消订阅的请求
  • 订阅Subscription: 含一个主题过滤器Topic Filter, 一个最大的服务质量QoS等级
    • 订阅与单个会话关联, 可包含多于一个订阅
    • 会话的每个订阅有一个不同的主题过滤器
  • 主题名TopicName: 附加于应用消息的标签, 服务端已知且与订阅匹配. 服务端发送应用消息的副本给每个匹配的客户端订阅
  • 主题过滤器Topic Filter: 订阅中包含一个表达式, 表示相关的一个/多个主题, 可用通配符
  • 会话Session: 客户端&服务端之间状态交互. 一些绘画持续时长同网络连接, 另一些可在客户端和服务端的多个连续网络连接间扩展
  • 控制报文MQTT Control Packet: 通过网络连接发送的信息数据包
    • MQTT规定14种不同类型控制报文, PUBLISH用于传输应用消息

1.2.数据

  • 整数数值,16位, 大端序: 16位字: MSB,LSB

2.控制报文格式

2.1.MQTT数据包结构

  • 固定头: 所有, 表示数据包类型与数据包分组类标识
  • 可变头: 部分, 数据包类型决定可变头是否存在及其具体内容
  • 消息体: 部分, 表示客户端按收到的具体内容

2.2.固定头

  • 消息类型
  • 标识位/DUP: 不用标识位的消息类型中,DUP作为保留位; 收到无效标志时必须关闭网络连接
  • QoS服务质量等级: 0最多一次, 1至少一次, 2一次
  • RETAIN: 发布保留标识, 服务器要保留此次推送的信息, 若有新订阅者, 推送该消息, 若无则推送一次后释放
  • 剩余长度: 前七位保存长度, 末位标识=1长度不足需用第二个字节保存
Bit7,6,5,43,2,1,0
byte1MQTT控制报文类型指定控制报文类型的标志位
byte2剩余长度

2.2.1.控制报文类型

  • byte1[7-4]
名字报文流动方向描述
Reserved0禁止保留
CONNECT1Client->ServerClient请求连接Server
CONNACK2Server->Client连接报文确认
PUBLISH3<->发布消息
PUBACK4<->QoS1消息发布收到确认
PUBREC5<->发布收到(交付第1步)
PUBREL6<->发布释放(交付第2步)
PUBCOMP7<->QoS2消息发布完成(3步)
SUBSCRIBE8Client->Server客户端订阅请求
SUBACK9Server->Client订阅请求报文确认
UNSUBSCRIBE10Client->Server客户端取消请阅请求
UNSUBACK11Server->Client取消订阅报文确认
PINGREQ12Client->Server心跳请求
PINGRESP13Server->Client心跳响应
DISCONNECT14Client->Server客户端断开连接
Reserved15禁止保留

2.2.2.标志FLag

  • byte1[3-0]
  • 必须设置表格中列出的值, 若非法标志, 必须关闭网络连接
控制报文固定报头标志Bit3Bit2Bit1Bit0
CONNECTR0000
CONNACKR0000
PUBLISHMQTT3.1.1DUP 1 ^1 1QoS 2 ^2 2QoS 2 ^2 2RETAIN 3 ^3 3
PUBACKR0000
PUBRECR0000
PUBRELR0010
PUBCOMPR0000
SUBSCRIBER0010
SUBACKR0000
UNSUBSCRIBER0010
UNSUBACKR0000
PINGREQR0000
PINGRESPR0000
DISCONNECTR0000
  • DUP 1 ^1 1 =控制报文的重复分发标志
  • QoS 2 ^2 2 =PUBLISH报文的服务质量等级
  • RETAIN 3 ^3 3 =PUBLISH报文的保留标志

2.2.3.剩余长度

  • byte2开始, 当前报文剩余部分字节数, 包括可变报头, 负载数据
  • 不包括用于编码剩余长度字段本身的字节数
  • 变长度编码, 对<128值用单字节编码
  • 剩余长度最大4字节

128值: 低7位有效位编码数据, 最高位标志位, 指示是否有更多字节, 每字节可编码128值和1延续位

  • 1个字节时,从0(0x00)到127(0x7f)
  • 2个字节时,从128(0x80,0x01)到16383(0Xff,0x7f)
  • 3个字节时,从16384(0x80,0x80,0x01)到2097151(0xFF,0xFF,0x7F)
  • 4个字节时,从2097152(0x80,0x80,0x80,0x01)到268435455(0xFF,0xFF,0xFF,0x7F)

2.3.可变头

  • 固定报头和负载之间
  • 内容因数据包类型而异, 一般作为包标识
  • 报文标识符Packet Identifier
    • 报文PUBLISH(QoS>0), PUBACK, PUBREC, PUBREL, PUBCOMP, SUBSCRIBE, SUBACK, UNSUBSCRIBE, UNSUBACK包含
    • 两字节: byte1:MSB, byte2:LSB
    • SUBSCRIBE, UNSUBSCRIBE, PUBLISH(QoS>0)必须包含非0:16位报文标识符
      • 客户端每次发送一个新的该报文时必须分配一个当前未使用的报文标识符

      • 若CLient要重发这个特殊控制报文, 随后重发报文时必须用相同标识符

      • CLient处理完该报文对应的确认后, 该标识符释放可重用

      • QoS1:PUBLISH对应PUBACK

      • QoS2:PUBLISH对应PUBCOMP, SUBSCRIBE/UNSUBSCRIBE对应SUBACK/UNSUBACK

      • 发送QOS0的PUBLISH报文时, 相同条件也适用于服务端;

      • QoS0的PUBLISH报文不能含报文标识符

      • PUBACK, PUBREC, PUBREL报文必须包含与最初发送PUBLISH报文相同的标识符

      • SUBACK,UNSUBACK必须包含对应SUBSCRIBE, UNSUBSCRIBE报文使用的标识符

      • CLient和Server彼此独立地分配报文标识符, 使用相同报文标识符可实现并发消息交换

        控制报文报文标识符字段
        CONNECTN
        CONNACKN
        PUBLISHY若QoS>0
        PUBACKY
        PUBRECY
        PUBRELY
        PUBCOMPY
        SUBSCRIBEY
        SUBACKY
        UNSUBSCRIBEY
        UNSUBACKY
        PINGREQN
        PINGRESPN
        DISCONNECTN

2.4.有效载荷Payload消息体

  • 四种类型
  • CONNECT: 客户端ClientID, 订阅Topic, Message, 用户名, 密码
  • SUBSCRIBE: 一系列要订阅的主题及QoS
  • SUBACK: 对SUBSCRIBE所申请主题及QoS进行确认,回复
  • UNSUBSCRIBE: 要订阅的主题
控制报文有效载荷
CONNECTY
CONNACKN
PUBLISH可选
PUBACKN
PUBRECN
PUBRELN
PUBCOMPN
SUBSCRIBEY
SUBACKY
UNSUBSCRIBEY
UNSUBACKN
PINGREQN
PINGRESPN
DISCONNECTN

安全

QoS(Quality of Service levels)

  • 服务质量是MQTT重要特性
  • QoS 0: 最多一次, 会发生消息丢失/重复, 消息发布依赖底层TCP/IP网络
  • QoS 1: 至少一次
  • QoS 2: 保证一次

ref:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MQTT协议的控制报文格式如下: | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |--------|--------|--------|--------|--------|--------|--------|--------| | 控制报文类型 | 标志位 | 剩余长度(可变) | 控制报文类型占用 4 个 bits,标志位占用 4 个 bits,剩余长度占用可变长度,最多可占用 4 个字节。 MQTT协议定义了多种控制报文类型,每种类型的报文格式不同,具体如下: - CONNECT:MQTT客户端连接到MQTT服务器时发送的报文,包含客户端ID、用户名、密码等信息。 - CONNACK:MQTT服务器响应CONNECT报文的报文,包含连接成功或失败的信息。 - PUBLISH:MQTT客户端发布消息时发送的报文,包含消息主题、消息内容等信息。 - PUBACK:MQTT服务器响应PUBLISH报文的报文,确认收到了PUBLISH报文。 - PUBREC:MQTT服务器在收到QoS为1的PUBLISH报文后,向MQTT客户端发送的报文,表示已经收到PUBLISH报文。 - PUBREL:MQTT客户端收到PUBREC报文后发送的报文,表示确认收到了PUBLISH报文。 - PUBCOMP:MQTT服务器收到PUBREL报文后发送的报文,表示确认收到了PUBREC报文。 - SUBSCRIBE:MQTT客户端订阅主题时发送的报文,包含主题名称和QoS等级。 - SUBACK:MQTT服务器响应SUBSCRIBE报文的报文,包含订阅成功或失败的信息。 - UNSUBSCRIBE:MQTT客户端取消订阅主题时发送的报文,包含主题名称。 - UNSUBACK:MQTT服务器响应UNSUBSCRIBE报文的报文,确认取消了订阅。 - PINGREQ:MQTT客户端发送给MQTT服务器的心跳包。 - PINGRESP:MQTT服务器响应PINGREQ报文的报文。 - DISCONNECT:MQTT客户端断开与MQTT服务器的连接时发送的报文。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值