什么是mqtt协议
MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件 。
MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)
MQTT传输的消息分为:主题(Topic)和负载(payload)两部分:
(1)Topic,可以理解为消息的类型,订阅者订阅后(Subscribe)后,就会收到该主题的消息内容(payload);
(2)payload,可以理解为消息的内容,是指订阅者具体要使用的内容。
mqtt协议来源
** 为什么说MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议? **
mqtt最早应用于将无人看管的石油天然气管道数据通过卫星链路上报给数据中心,当时的需求在于:
(1)石油天然气管道大多处于无人区,更不可能有基站了,只能通过偶尔覆盖的卫星来通信。卫星通信极其不稳定,很容易频繁断开连接。
(2)数据采集频率不高,且数据量小。
(3)有的消息很重要,需要有质量保证,比如石油泄漏,即使想发送的时候断网了,也应该在断网后能够传出去,且传出去必须要保证送达。
(4)采集设备都是嵌入式设备,要求低功耗。
这就是MQTT的“会话机制”、“异步机制”、“QoS机制”等功能的体现
mqtt特性
MQTT协议具有以下主要的几项特性:
1、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;
2、对负载内容屏蔽的消息传输,broker可以根据topic对消息进行选择性的发送;
3、使用 TCP/IP 提供网络连接;
4、有三种消息发布服务质量:
5、小型传输,开销很小(整体上协议可拆分为:固定头部+可变头部+消息体,固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;
6、使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制;
Last Will:即遗言机制,用于通知同一主题下的其他设备发送遗言的设备已经断开了连接;
Testament:遗嘱机制,功能类似于Last Will;
MQTT相比于TCP长连接的优势
1、协议更标准
MQTT是标准的RFC协议,相比于私有协议而言更加标准。好处在于:
(1)协议非常完整,能够马上用于生产。各端实现同一套协议之后,就能进行通信;私有协议还需要进行大量的验证,看有无缺陷或欠考虑的地方等。
(2)协议的标准化带来大量的开源组件,降低开发难度。随着物联网+5G生态越来越好,开源组件越来越多,可以减少重复编码量。
(3)标准协议利于第三方接入。当第三方设备、平台想要对接的时候,拿出一套标准的MQTT协议拍在他们脸上,再也没人有理由要求改接口了。
2、MQTT协议制定好了很多利于物联网的功能
当然TCP自己开发协议也能做到,但MQTT都已经把功能做好了,自己开发协议反而增加难度。有利的功能包括:
(1)心跳机制。不需要自己做业务协议层的心跳了。
(2)遗嘱消息。这对于经常掉线的物联网设备而言非常有用。
(3)QoS质量等级+离线消息。持久会话离线的消息也能接收到,对于网络不稳定但要求必须送达的物联网场景很有用。
(4)异步机制。MQTT将消息以QoS1/2发送出去后,设备端就不需要再管了,一切由云端负责失败重传。
(5)订阅发布机制。一次发布,多个客户端订阅,这对于M2M场景很省电、省流量(因为不用频繁的新建tcp连接)。
(6)主题和安全。可以用主题来方便地控制客户端权限。
以上的功能基于TCP自己开发也能做到,如果自己都开发了,不就是实现了应用层的MQTT协议了吗
缺点:
** 但是MQTT是不支持分包等机制,并不适宜一些数据包特别大的应用场景 **
mqtt通信流程
https://www.cnblogs.com/xiaohanlin/p/8683503.html
mqtt通信报文解析
https://baijiahao.baidu.com/s?id=1715575644678049062&wfr=spider&for=pc