MQTT学习笔记

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

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

publish to topic:temperature
subscribe to topic:temperature
subscribe to topic:temperature 24c
publish 24c
publish 24c
TemperatureSensor
Broker
MobileDevice
BackendSystem

官网文档:

  • 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网络,可能丢包;
publisher broker PUBLISH publisher broker
  • QoS 1, 至少发布一次,通过收到一次确认,确保消息代理能收到消息,PUBACK包里有PUBLISH请求的Packet Identifier ;收不到ack则可以一直发送请求;
publisher broker PUBLISH PUBACK publisher broker
  • QoS 2, 确保消息只到达一次,可用于计费系统,有4种消息,如下
publisher broker PUBLISH Received(PUBREC) Released(PUBREL) Completed(PUBCOMP) publisher broker

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翻译

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值