前几篇文章讲述的是TCP/IP 模型中的网络接口层、网络层、传输层、应用层部分协议,这里到了第四层应用层的 MQTT协议。都是物联网常用的应用层协议。CoAP 协议 OPC 放到之后写。
MQTT 协议
消息队列遥测传输,Message Queuing Telemetry Transport,MQTT 是ISO 标准下基于发布/订阅(Publish/Subscribe)范式的消息协议。它工作在TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。
MQTT最大优点在于,用极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。为什么,因为协议简单,开销就小;发布订阅模式,解耦了发布者和订阅者,他们不需要直接传递消息,有个中介帮忙,同样的数据,我就上传一份,再传出去一份,就想导游只说一遍,大家都带着蓝牙耳机,都能听到;持久会话,不会经常断开重连,这都耗电。
作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
MQTT 的消息发布和订阅模式,像微博一样,有一个消息发布者,有一批订阅着,有个服务器。消息发布者把消息发送到服务器,订阅者订阅消息,就能收到消息。
HTTP 基于请求响应,像微信聊天,我和你加好友,建立连接,我发消息,你接受消息。必须要建立稳定可靠的连接。
工作原理
发布者将消息发布到代理服务器,代理服务器根据订阅者的订阅情况将消息分发给相应的订阅者。
组成部分
主要包括发布者(Publisher)、订阅者(Subscriber)、代理服务器(Broker)。
发布者 Publisher:
使用MQTT的程序或设备。客户端通过网络连接到服务端。它可以发布应用消息给服务端。
服务端 Server:
一个程序或设备,作为发送消息的客户端和请求订阅的客户端之间的中介。服务端接受来自客户端的网络连接、接受客户端发布的应用消息、处理客户端的订阅和取消订阅请求、转发应用消息给符合条件的已订阅客户端。
订阅者 Subscriber:
订阅包含一个主题过滤器(Topic Filter)和一个最大的服务质量(QoS)等级。订阅与单个会话(Session)关联。会话可以包含多于一个的订阅。会话的每个订阅都有一个不同的主题过滤器。
Topic(主题):
Topic具有两层含义:其一,在发布消息时,主题会与消息相关联,以此向 服务端 表明这条消息要发送至哪个主题;其二,在订阅消息时,客户端需向 服务端 表明自己对哪个主题感兴趣,一旦有消息发送给这个主题,服务端 便会将该消息发给此主题的订阅者。主题支持通配符,而对于使用通配符的主题,我们将其称作 Topic Filter。
MQTT 控制报文
在MQTT协议中,一个MQTT数据包由:固定头(Fixed header)、可变头(Variable header)、消息体(payload)三部分构成。MQTT数据包结构如下:
太枯燥了,举个例子:
特点
MQTT 可实时推送消息,但 HTTP 需要通过轮询获取数据更新。
MQTT 是有状态的,但是 HTTP 是无状态的。为了应对网络不稳定的情况,MQTT 提供了心跳保活(Keep Alive)机制。在客户端与服务端长时间无消息交互的情况下,Keep Alive 保持连接不被断开,若一旦断开,客户端可即时感知并立即重连。同时,MQTT 设计了遗愿消息,让服务端在发现客户端异常下线的情况下,帮助客户端发布一条遗愿消息到指定的 MQTT 主题。
MQTT 可从连接异常断开中恢复,HTTP 无法实现此目标。
灵活性:基于服务订阅模式,消息路由更为灵活。
MQTT 协议和 HTTP 的对比:
应用
物联网:各类物联网设备之间的通信。
移动应用消息推送。
远程监控系统。
智能家居。
工业自动化等领域。
后记
这个系列,物联网协议进行到了尾声,这篇写 MQTT,下面会写 CoAP、OPC,都是重头戏。
参考文献
本文由 @跃曰 原创发布于人人都是产品经理。未经作者许可,禁止转载。
题图来自Unsplash,基于CC0协议。