MQTT协议学习
前言
本次学习主要参考了 沉默的小宇宙的【MQTT学习】专栏,但由于我是初次深入学习一个网络协议,有些基础概念需要及时补充,且原博使用的是我不太熟悉的Node.js语言,所以在此整理笔记记录自己的思路和理解。
学习目的
熟悉MQTT协议中Client与Broker的通信过程;
能够借助标准文档、应用手册、学习笔记等资料快速查阅到所需的具体内容。
资源索引
MQTT官方网站
MQTTv5.0标准文档(最新)
MQTTv3.11标准文档(使用广泛)
基本概念
MQTT
Message Queuing Telemetry Transport,消息队列遥测传输
- 应用层协议
- 即时通讯协议
- 基于TCP/IP协议
面向:
- 传感器和控制设备
- 大量设备
- 计算能力有限
- 低带宽、不可靠网络
Network Connection(网络连接)
- 将Client连接到Broker(Client发起)
- 双向传输有序(Ordered)无损(Lossless)的字节流
Application Message(应用程序消息1)
- 由MQTT协议跨网络的应用程序(个人理解为各个平台的SDK+Broker服务器程序的集合)携带的数据
- 应用程序消息内含有成对的服务质量(QoS) 和 主题名称(Topic Name)
Client(客户端)
使用MQTT的设备或程序,它可以:
- Connect 建立连接
连接总是由Client发起 - Publish 发布
发布以送出其他客户端可能会感兴趣的消息(用Topic来区分消息)
这样的客户端称为Publisher - Subscribe 订阅
订阅以请求获取本客户端感兴趣的消息(用Topic来区分消息)
这样的客户端称为Subscriber - Unsubscribe 退订
取消订阅以移除获取消息的请求(移除Topic) - Disconnect 取消连接
断开和Broker之间的连接
有不同平台、不同语言的MQTT库供各种Client调用。
Broker (服务器)
Publisher与Subscriber之间的中介程序或设备,它可以:
- 接受客户端的连接
- 接收客户端的消息
- 处理订阅和退订请求
- 转发与Client的订阅匹配的消息
通常由OneNet、阿里云IoT等服务商提供
Session (会话)
- Client和Broker之间的状态交互
- 某些会话的时间和连接的时间相同
- 其他会话可以跨越同一对Client与Broker之间的多个连续的连接
Subscription(订阅)
- 包含主题过滤器和最大QoS
- 订阅与单个会话关联,而一个会话可以包含多个订阅
- 会话中的每个订阅都有一个互不相同的主题过滤器
Topic Name(主题名2)
- 消息的一个标签,与Broker已知的订阅相匹配
- Broker将消息的副本转发给每个匹配的Client
Topic Filter(主题过滤器)
- 订阅中包含的表达式,表示对一个或多个Topic感兴趣
- 可以包含通配符
MQTT Control Packet(MQTT控制包)
- 通过网络连接发送的信息包
- 定义了14种3不同类型的控制包,其中的Publish包用于传达应用信息