MQTT学习笔记

MQTT学习笔记,第1张

文章目录
  • 1. 简介
    • 特点
    • 3个角色
  • 2. 四个主题
    • 2.1 Message Broker
      • 实现
    • 2.2 Publish/Subscribe
    • 2.3 Topic
    • 2.4 Qualtity of Service
  • 3. 协议
    • 官方文档
    • 通信过程
  • 4. 参考资料

1. 简介

MQTT官网:https://mqtt.org/

MQTT, Message Queuing Telemetry Transport,消息队列遥测传输,是基于C/S架构,发布/订阅(public/subscribe)范式的轻量级消息协议。

它工作在TCP/IP协议族上的应用层,是为硬件性能低下的远程设备,或者网络状况糟糕(没有基站)的场景而设计的,尤其适合需要实时控制的场景。

重点需要理解的是3个角色,4个主题。

特点
  • 高并发,支持上万客户端接入;
  • 长连接,建立在TCP基础上,需要心跳包,所以不省电,不适合低功耗场景;
  • 实时性;
  • 单词数据量小,但不能出错;
  • 能够在网络环境差的情况下工作;
  • 根据数据的优先级,设置不同服务质量;
  • 数据无关(不关心 Payload 数据格式);
3个角色
  • 代理Broker
  • 发布者Publisher
  • 订阅者Subscriber

这种结构代替了创痛C/S模型,可以实现以下解耦:

  • 空间解耦,订阅者不需要知道发布者的ip等信息;
  • 时间解耦,支持离线消息;
  • 同步解耦,异步通讯。
2. 四个主题
  • 消息代理,Message Broker;
  • 发布/订阅模式,Publish/Subscribe;
  • 主题,Topic;
  • 服务质量,Qualtity of Service.
2.1 Message Broker

Broker代理可以运行在各大平台,如windows,linux,树莓派,docker,云等。

MQTT协议的中心就是broker代理,即mqtt服务器。

实现
  • mosquitto, 属于玩具型,但作者是mqtt协议设计者之一:
    • https://mosquitto.org/
    • https://github.com/eclipse/mosquitto
  • HiveMQ
  • Apache Apollo
  • Apache ActiveMQ
2.2 Publish/Subscribe

以下为官网关于温度计的图例:

官网文档:

  • https://www.hivemq.com/blog/mqtt-essentials-part2-publish-subscribe/
  • https://www.hivemq.com/blog/mqtt-essentials-part-4-mqtt-publish-subscribe-unsubscribe/
2.3 Topic

Mqtt通过主题对纤细进行分类。

主题本质上是一个UTF-8字符串,用反斜杠/表示层级。

订阅时,可以使用+ *通配符。

2.4 Qualtity of Service

4.3 Quality of Service levels and protocol flows

文档对QoS的解释还是很严谨的。

服务质量有几个等级:

  • QoS 0, 最多发布一次,完全依赖TCP/IP网络,可能丢包;
  • QoS 1, 至少发布一次,通过收到一次确认,确保消息代理能收到消息,PUBACK包里有PUBLISH请求的Packet Identifier ;收不到ack则可以一直发送请求;
  • QoS 2, 确保消息只到达一次,可用于计费系统,有4种消息,如下
3. 协议 官方文档

截至2022.4, 最新版为5.0,已代替3.1.1.

MQTT Control Packet format

文档第1章是简介。

文档第2章则是报文格式,这里记录一下。

| Fixed Header, present in all MQTT Control Packets     |
| Variable Header, present in some MQTT Control Packets |
| Payload, present in some MQTT Control Packets         |

固定头部Fixed Header影响后面可变部分的格式。官网文档有对3个头部字段进行解释:

  1. MQTT Control Packet type, 控制报文,4 bits;
  2. Flags specific to each MQTT Control Packet type , 4 bits;
  3. Remaining Length, 1-4 byte(s),Variable Header + Payload。

需要熟悉15种(截至v5)控制报文:

NameValueDirection of flowDescription
Reserved0ForbiddenReserved
CONNECT1Client to ServerConnection request
CONNACK2Server to ClientConnect acknowledgment
PUBLISH3Client to Server orServer to ClientPublish message
PUBACK4Client to Server orServer to ClientPublish acknowledgment (QoS 1)
PUBREC5Client to Server orServer to ClientPublish received (QoS 2 delivery part 1)
PUBREL6Client to Server orServer to ClientPublish release (QoS 2 delivery part 2)
PUBCOMP7Client to Server orServer to ClientPublish complete (QoS 2 delivery part 3)
SUBSCRIBE8Client to ServerSubscribe request
SUBACK9Server to ClientSubscribe acknowledgment
UNSUBSCRIBE10Client to ServerUnsubscribe request
UNSUBACK11Server to ClientUnsubscribe acknowledgment
PINGREQ12Client to ServerPING request
PINGRESP13Server to ClientPING response
DISCONNECT14Client to Server orServer to ClientDisconnect notification
AUTH15Client to Server or Server to ClientAuthentication exchange

文档第3章,是对各种控制报文的解释。

文档第4章,是一些详细介绍,比如3种QoS、消息、订阅、请求响应、重定向、错误处理等。

文档第5章,安全相关。

通信过程

参考[Qualtity of Service](# Qualtity of Service)部分即可。

4. 参考资料

MQTT官网

MQTT Version 3.1.1 文档

HiveMQ

物联网的基石-mqtt 协议初识

OASIS Open - OASIS Open (oasis-open.org)

Index of /mqtt/ (oasis-open.org)

MQTT 5.0翻译

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/732779.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存