目录
0x01 概述
MQTT(Message Queuing Telemetry Transport)消息队列遥测传输协议
一个基于发布/订阅模式(publish/subscribe)模式的轻量级消息中间件协议,目前广泛应用于移动互联网/物联网领域
特点
- 轻量级,协议简单、易实现、传输速度快
- 协议头短、节省带宽、传输效率高,可用于低带宽
- 低功耗、计算力有限,可用于低硬件要求
- 实时,底层基于TCP/IP协议
- 可靠传输,自定义QoS,可用于不可靠网络
- 默认TCP端口为1883,websocket端口为8083,默认不加密;8883端口默认是通过TLS加密
版本
0x02 工作模式
三种角色,一个主要概念和其他若干概念
- 发布者(Publisher):充当客户端,发布消息到服务端,也可以充当消息订阅者
- 订阅者(Subscriber):充当客户端,订阅消息/取消订阅,接受服务端推送的数据
- 代理(Broker):作为服务端,与客户端建立连接,接收发布者的消息并转发到订阅者,接收订阅/取消请求
基本概念:
- 主题(Topic):存放消息的容器,抽象理解相当于一个消息类别,可以有一级或多级,发布消息时会发布到这个主题,订阅时指定主题就会收到相应的消息推送
- 客户端:使用MQTT的程序或设备,发布/订阅的终端对象,总是客户端去连接/断开服务器
- 服务器:程序或设备,作为发布/订阅流程中的中介,接收客户端的连接,认证和授权,处理客户端的订阅/取消请求,接收/推送消息
- 发布:Publish,客户端发送消息给服务端,服务端将消息转发给订阅的客户端
- 订阅:Subscribe,客户端订阅主题,当发布者发送与该主题相关的消息时,服务端会转发消息给订阅者
- 消息:MQTT协议中传输的数据,通常关联一个主题(Topic)和一个服务质量(QoS)
- 主题过滤:Topic Filter,订阅过程可以对Topic进行过滤
- 单级通配(+) : 仅匹配单级主题
- 多级通配(#) : 可以匹配多级,通常出现在末尾,表示某类主题下的所有子类
- 系统保留($) : 主题开头,表示服务器保留的主题
模式特点:
- 取消了C/S模型,服务器只充当一个消息转发的代理
- 空间解耦,发布者和接受者不需直接建立联系
- 时间解耦,发布者和接受者不必同时在线
QoS,Quality of Service,消息可靠性传递参数
- 0 : 消息指发送一次,不保证发送成功;适用于传感器数据、普通推送等
- 1 : 消息最少发送一次,保证发送成功,可能接收重复消息
- 2 : 消息指发送一次,保证发送成功,不会接收到重复消息;适用于严格的计费系统、即时通讯推送
0x03 数据格式
- 固定报文头,2字节,存在于所有的MQTT数据包中,表示数据包类型和分组类标识
- 可变报文头,存在部分MQTT数据包中,针对不同数据包类型,