【嵌入式面试高频知识点】-MQTT协议
一、MQTT基础
MQTT(Message Queuing Telemetry Transport),消息队列遥测传输
MQTT 是一种基于客户端服务端架构的发布/订阅模式的消息传输协议,MQTT 协议是应用层协议,工作在 TCP/IP 四层模型中的最上层(应用层),构建于 TCP/IP协议上。
二、MQTT特性
1、使用发布/订阅消息模式,提供一对多的消息发布
2、MQTT 是基于 TCP 连接进行数据推送的
3、支持 QoS 服务质量等级
4、使用 will 遗嘱机制来通知客户端异常断线
5、支持心跳机制
三、MQTT通信基本原理
MQTT 是一种基于客户端-服务端架构的消息传输协议:
服务端:MQTT 服务端通常是一台服务器(broker),它是 MQTT 信息传输的枢纽,负责将MQTT 客户端发送来的信息传递给 MQTT 客户端。
客户端:MQTT 客户端可以向服务端发布信息,也可以从服务端收取信息;客户端要想从服务端收取信息,则首先要向服务端“订阅”信息。
MQTT主题:客户端发布消息时需要为消息指定一个“主题”,表示将消息发布到该主题;而对于订阅消息的客户端来说,可通过订阅“主题”来订阅消息,这样当其它客户端或自己(当前客户端)向该主题发布消息时,MQTT 服务端就会将该主题的信息发送给该主题的订阅者(客户端)。
四、连接MQTT服务端
MQTT 客户端之间想要实现通信,必须要通过 MQTT 服务端。
主要步骤为:
1、首先客户端需要向服务端发送连接请求,这个连接请求实际上就是向服务端发送一个 CONNECT报文,也就是发送了一个 CONNECT 数据包。
2、MQTT 服务端收到连接请求后,会向客户端发送连接确认。连接确认实际上是向客户端发送一个CONNACK 报文,也就是 CONNACK 数据包。
MQTT报文分为三部分:定头(Fixed header)、可变头(Variableheader)以及有效载荷(Payload,消息体)。
五、断开连接
当 MQTT 客户端连接到服务端之后,在后续的通信过程中,如果客户端想要断开与服务端的连接,此时客户端可以主动向服务端发送一个 DISCONNECT 报文来断开与服务端的连接。
六、其他知识点
QoS是什么?
服务质量,保证消息稳定传输的机制,包括消息应答、存储和重传。
MQTT 协议有三种服务质量等级:
QoS = 0:最多发一次; QoS 的最低级别
QoS = 1:最少发一次;发送端在消息发送完成后,会检查接收端是否已经成功接收到了消息。
QoS = 2:保证收一次。当 MQTT 服务质量为 2 级时,MQTT 协议可以确保接收端只接收一次消息。