在世界上互联网的世界中,你有很多,除了事物,是消息。当IoT设备生成消息时,他们会发送类似状态报告和环境测量的东西;当他们收到时,他们被告知要做什么(“打开该阀门”或“发送您的状态”)或它们存储来自其他设备的数据,或者或......或......存在无穷无尽的用例。此外,IOT设备的数量快速增长,并且只有其组合的消息流量越来越快地增长。以及IoT的爆炸,存在在智能手机,平板电脑和计算机上运行的应用程序,所有这些都需要相同类型的消息服务。
现在有许多处理物联网消息传递的方法,但其中最强大、也是最有趣的技术之一是消息代理。维基百科的解释消息代理是:
...一种中间程序模块,它将消息从发送方的正式消息传递协议转换为接收方的正式消息传递协议。消息代理是电信或计算机网络中的元素,在这些网络中,软件应用程序通过交换正式定义的消息进行通信。消息代理是面向消息中间件的构建块……消息代理是用于消息验证、转换和路由的体系结构模式。它调解应用程序之间的通信,最大限度地减少应用程序之间为了能够交换消息而应该具有的相互感知,从而有效地实现解耦。
消息经纪人实施发布 - 订阅(AKA,PUB-SUB)模型,其中“订阅者”与一个或多个消息经纪人通信,以接收“发布者”发送到批读的消息,并且有些显然,用户也可以同时成为发布者.
足够的理论!我们将研究最流行和最有效的消息代理协议之一,MQ遥测传输(MQ Telemetry Transport,简称MQTT)。注意,最初的名称现在很少被使用,缩写词已经演变成协议的名称。MQTT的其他历史名称有“SCADA协议”、“MQ集成商SCADA设备协议”(MQIsdp)和完成“WebSphere MQTT”(事情就是WMQTT)。mqtt.org解释道MQTT是:
一种发布/订阅、极其简单和轻量级的消息传递协议,专为受限设备和低带宽、高延迟或不可靠的网络设计。设计原则是尽量减少网络带宽和设备资源需求,同时也试图确保可靠性和某种程度的交付保证。这些原则也使该协议成为连接设备的“机器对机器”(M2M)或“物联网”世界的理想协议,并适用于带宽和电池功率非常昂贵的移动应用程序。
换句话说,MQTT实现是端点设备(如Raspberry pi、Arduinos、智能手机操作系统和几乎任何可以从简单和低开销消息传递中受益的平台)的极佳选择。
MQTT协议在编写时是3.1.1版本并已成为绿洲标准尽管市场上仍然有许多实现支持版本3.1.0.最新规格有重大改进并要求MQTT“代理”现在应该称为MQTT“服务器”。
IANA拥有保留的TCP / IP端口1883,用于MQTT经纪商,ER ...服务器,以及SSL的MQTT端口8883(请注意,使用SSL引入额外的通信性能开销)。许多MQTT服务器实现也支持WebSockets。
MQTT协议有五个关键特性:
- 基于主题的路由。MQTT实现中的消息按主题层次(如状态/建筑/房间/设备/传感器)进行标记,订阅可以使用通配符,例如,加州所有建筑中所有实验室的所有传感器数据都可以订阅为California /+/laboratory/#(+是一个单级通配符,而#匹配以下所有较低的级别;我们稍后再回到这个话题)。
- 支持干净的会话。当端点为第一次连接到MQTT服务器时,创建新的MQTT会话并且服务器和客户端都通过存储有关状态的数据来记下会话。这种已保存的会话状态允许代理重新连接后恢复消息传递,因此可以传送由于断开连接而未发送或接收的消息。干净的会话是一种选择。
- 的服务质量。MQTT的QoS支持允许订阅者和发布者(统称为“客户端”)选择三个服务级别中的一个:
- QoS 0,也称为“触发并忘记”,不需要客户端已经接收到的确认。这个级别可能会牺牲传递可靠性(消息可能会丢失)来换取速度,因此更适合于可靠的连接。
- QoS 1,“至少一次”传递,要求发送方(适当的服务器或客户端)在超时窗口内没有收到确认时重试。在质量较差的连接上,QoS 1的重试会影响性能,可能会出现重复消息。
- QoS 2,“恰好一次”的传递,类似于QoS 1,但有一个后续的状态交换,以确保不传递重复的消息。额外的通信具有比QoS 1更高的潜在开销。
- 保留的消息。当发布者在“要保留”主题中标记消息时,首先在端点首先订阅该主题时首先传送消息。每个主题只允许一个保留的消息。将此视为来自出版商的“欢迎”或“上次状态”消息。
- 遗愿和遗嘱信息。当连接到服务器时,发布者或订阅者可以为一个主题指定LWT消息,以便如果该端点忘记断开连接,主题的所有订阅者都将接收消息。在优雅的断开连接上,LWT消息被处理。
你现在可能会想知道最近的大规模拒绝服务攻击这是由15万件物联网设备组成的僵尸网络交付的,安全怎么办?第5章最新标准讨论安全性,但注意到:
本章仅供指导提供指导,是非规范性的。但是,强烈建议提供TLS [RFC5246]的服务器实现应使用TCP端口8883(IANA服务名称:Secure-MQTT)。
也就是说,所有严肃和有用的MQTT实现都包括身份验证服务。
一些非常有用的,免费的开源MQTT平台可用,在下一部分中,我们将专注于广泛用于IOT系统的一个:Mosquitto.