赞
踩
新的一周,我们来学习 MQTT 协议。
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是 IBM 开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器(比如通过 Twitter 让房屋联网)的通信协议。
物联网 (IoT) 设备必须连接互联网。通过连接到互联网,设备就能相互协作,以及与后端服务协同工作。互联网的基础网络协议是 TCP/IP。MQTT(消息队列遥测传输)是基于 TCP/IP 协议栈而构建的,已成为 IoT 通信的标准。
MQTT 应用场景举例
移动应用程序之间发送消息。移动应用使用 MQTT 库,使用 MQTT 来发送和接收消息。 消息通过 MQTT 消息传递服务器进行交换。 MQTT 客户机和服务器可应对为移动应用程序可靠地传递消息所带来的复杂性,并且将网络管理成本保持在较低水平。
MQTT 还用于遥测,以接收来自传感器的数据并对传感器进行远程控制。 对于移动设备和传感器,MQTT 通过可靠的传送提供高度可扩展的发布/预订协议。 要发送和接收 MQTT 消息,需要将 MQTT 客户机库添加到应用程序。MQTT 客户机库使用 MQTT 协议将移动设备和传感器的应用程序连接到 MQTT 服务器。
目前国内很多企业采用 MQTT 作为 Android 手机客户端与服务器的消息推送协议。
MQTT 业务方式:非常灵活
MQTT 优势
MQTT 是一种轻量级的、灵活的网络协议,基于 TCP/IP协议,在 TCP/IP 四层协议栈中属于应用层协议:
这个轻量级协议可在严重受限的设备硬件和高延迟/带宽有限的网络上实现
它的灵活性使得为IoT 设备和服务的多样化应用场景提供支持成为可能
问题:为什么不选择其它应用层协议,比如 HTTP?
HTTP 是一种同步协议。客户端需要等待服务器响应。Web 浏览器具有这样的要求,但它的代价是牺牲了可伸缩性。
在 IoT 领域,大量设备以及很可能不可靠或高延迟的网络使得同步通信成为问题。异步消息协议更适合 IoT 应用程序。传感器发送读数,让网络确定将其传送到目标设备和服务的最佳路线和时间。
HTTP 是单向的。客户端必须发起连接。在 IoT 应用程序中,设备或传感器通常是客户端,这意味着它们无法被动地接收来自网络的命令。
HTTP 是一种 1-1 协议。客户端发出请求,服务器进行响应。将消息传送到网络上的所有设备上,不但很困难,而且成本很高,而这是 IoT 应用程序中的一种常见使用情况。
HTTP 是一种有许多标头和规则的重量级协议。它不适合受限的网络。
设计原则
由于物联网的场景的特殊性,MQTT 协议在设计和实现使遵循以下原则:
精简,不添加可有可无的功能
发布/订阅(Pub/Sub)模式,方便消息在传感器之间传递
允许用户动态创建主题,零运维成本
把传输量降到最低以提高传输效率
把低带宽、高延迟、不稳定的网络等因素考虑在内
支持连续的会话控制
理解客户端计算能力可能很低
提供服务质量管理
假设数据不可知,不强求传输数据的类型与格式,保持灵活性
基本实现
MQTT 协议要求基础传输层能够提供有序的、可靠的、双向传输的字节流,例如 TCP/IP 协议、TLS 协议、WebSocket 协议。
客户端(Client):
使用 MQTT 的程序或设备, 客户端通过网络连接到服务端:
1.发布应用消息给其它相关的客户端
2.订阅以请求接受相关的应用消息
3.取消订阅以移除接受应用消息的请求
4.从服务端断开连接
服务端(Server/Broker):
一个程序或设备,作为发送消息的客户端和请求订阅的客户端之间的中介:
1.接受来自客户端的网络连接
2.接受客户端发布的应用消息
3.处理客户端的订阅和取消订阅请求
4.转发应用消息给符合条件的客户端订阅
协议特点
1.使用发布/订阅的消息模式,提供一对多的消息分发和应用间的解耦
2.消息传输不需要知道负载内容
3.提供三种等级的服务质量
最多一次:尽操作环境所能提供的最大努力分发消息,消息可能会丢失
至少一次:保证消息可达,但可能重复
仅一次:保证消息只到达一次
4.很小的传输消耗和协议数据交换,最大限度减少网络流量
5.异常连接断开时能通知相关各方
MQTT 的安全
1.方案通常部署在不安全的通信环境中。在这种情况下,协议实现通常需要提供这些机制:
用户和设备身份认证
服务端资源访问授权
MQTT控制报文和内嵌应用数据的完整性校验
MQTT控制报文和内嵌应用数据的隐私控制
2.作为传输层协议,MQTT 仅关注消息传输,提供合适的安全功能是实现者的责任。使用 TLS [RFC5246] 是比较普遍的选择。除了技术上的安全问题外,还有地理因素(例如美国欧盟安全港原则 [USEUSAFEHARB]),行业标准(例如第三方支付行业数据安全标准[PCIDSS]),监管方面的考虑(例如萨班斯-奥克斯利法案[SARBANES])等问题
3.强烈推荐提供 TLS 的服务端实现应该使用 TCP 端口 8883(IANA 服务名:secure-mqtt)
**
发布订阅模型
Sensor:传感器或者终端
Broker:MQTT 的代理
MQTT 最核心的三种不同质量等级的消息分发流程
1.QoS0,最多一次:尽操作环境所能提供的最大努力分发消息,消息可能会丢失
2.QoS1,至少一次:保证消息可达,但可能重复
3.QoS2,仅一次:保证消息只到达一次
总结:这三种不同质量等级的消息分发流程来看,毫无疑问 QoS2 是保证可靠性最高,一次消息要用到 4 次信息的交互。
订阅工作流程
CONNECT : 连接服务端
CONNACK : 确认连接请求
SUBSCRIBE : 订阅主题
SUBACK : 订阅确认
PUBLISH:发布消息
保活工作流程
PINGREQ :心跳请求
PINGRESP :心跳响应
总结:
MQTT 协议概述与业务流程:
1.MQTT 协议概述、适用场景、优势、特点等
2.业务流程、QoS0、QoS1、QoS2、订阅等
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。