【网络】MQTT协议
MQTT协议全称是(Message Queuing Telemetry Transport),即消息队列遥测传输协议
是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上
MQTT通信模型
特点:
1、客户端使用它连接服务端
2、高可靠,低开销:提供有序的、可靠的、双向字节流传输
3、消息传输无需知道负载内容
4、使用发布/订阅的消息模式,提供了一对多的消息发布与应用间的解耦
5、提供三种等级的服务质量QoS:
QoS 0:最多分发一次。消息可能会丢失。
消息的传递完全依赖底层的TCP/IP网络,协议里没有定义应答和重试。
消息要么只会到达服务端一次,要么根本没有到达。
QoS 1:至少分发一次。确保消息到达,但消息重复可能会发生。
服务器的消息接收由PUBACK消息进行确认。
如果通信链路或发送设备异常,或者指定时间内没有收到确认消息,
发送端会重发这条在消息头中设置了DUP位的消息
QoS 2:只分发一次。确保消息仅到达一次,最高级别的消息传递。
消息丢失和重复都是不可接受的,使用这个服务质量等级会有额外的开销。
6、很小的传输消耗和协议数据交换,最大限度减少网络流量——固定头部长度 2 bytes
7、异常连接断开发生时,能通知到相关各方:
Last Will:遗言机制。通知同一主题下的其他设备发送遗言的设备已经断开了连接。
Testament:遗嘱机制。
报文结构:
固定头部 |
可变头部 |
数据部分 |
固定头格式:
剩余长度不包括用于编码剩余长度字段本身的字节数。
使用一个变长度编码方案,对小于 128 的值它使用单字节编码。
更大的值按下面的方式处理。
低 7 位有效位用于编码数据,最高有效位用于指示是否有更多的字节。因此每个字节可以编码 128 个数值和一个延续位(continuation bit) 。
剩余长度字段最大4个字节。
参考文档:
一文读懂MQTT协议-CSDN博客
MQTT协议史上最全解析(纯干货分享)_网络_吾爱技术圈-GitCode 开源社区