MQTT(MQ遥测运输)
MQTT (MQ遥测传输)是一种轻量级开放消息传递协议,它为资源受限的网络客户机提供了一种简单的分发方法遥测低带宽环境中的信息。采用发布/订阅通信模式的协议用于计算机到机器(M2M) 沟通。
创建为低开销协议以适应带宽和CPU限制,MQTT旨在在嵌入式环境中运行,可以提供可靠,有效的通信路径。适用于具有小代码足迹的连接设备,MQTT是经历不同级别的无线网络的不错选择潜伏由于偶尔带宽约束或不可靠的连接。该协议在汽车、能源和电信等行业都有应用。
尽管MQTT最初是一个专用协议,用于与监视控制和数据采集(SCADA)石油和天然气行业的系统,它在智能设备领域中流行,今天是连接物联网的领先开源协议(IOT.)和工业物联网(IIoT) 设备。
虽然这一点TT在MQTT中是遥测传输的意思MQ.参考名为IBM MQ的产品。虽然拼写出来了MQTT有时作为消息队列给出遥测传输,在MQTT通信中没有消息队列。
MQTT如何工作?
以最大化可用带宽为目标,MQTT的发布/订阅(pub/sub)通信模型是直接与端点通信的传统客户机-服务器体系结构的替代方案。相比之下,在发布/订阅模型中,发送消息的客户机(发布者)与接收消息的客户机(或订阅者)是解耦的。由于发布者和订阅者都不直接相互联系,因此第三方(broker)负责它们之间的连接。
MQTT客户机包括发布者和订阅者,这些术语指的是客户机是发布消息还是订阅接收消息。这两个函数可以在同一个MQTT客户机中实现。当设备(或客户端)想要向服务器(或代理)发送数据时,它被称为a发布。当操作颠倒时,它被称为a订阅。在Pub / sub模型下,多个客户端可以连接到代理并订阅他们感兴趣的主题。
如果从订阅客户机到代理的连接中断,那么代理将缓冲消息,并在重新联机时将它们推给订阅服务器。如果从发布客户机到代理的连接在没有通知的情况下断开,那么代理可以关闭连接,并向订阅者发送缓存的消息,其中包含来自发布服务器的指令。
IBM Workup描述了Pub / sub模型:“发布者发送消息,订阅者接收他们感兴趣的邮件,并且经纪人将消息从发布者传递给订阅者。发布者和订阅者是MQTT客户端,它只与MQTT通信经纪人。MQTT客户端可以是任何设备或应用程序(从arduino等微控制器到云中托管的完整应用程序服务器),运行MQTT库。“
什么是MQTT代理?
MQTT经纪商作为发送消息的客户端和正在接收这些消息的用户之间的功能。在邮局类比中,经纪人是邮局本身。所有消息都必须在可以通过代理经纪人送到订户之前。
代理可能必须处理数百万并发连接的MQTT客户机,因此在选择MQTT代理时,企业应该根据其可伸缩性、集成、监视和抗故障能力对其进行评级。
MQTT消息的类型
MQTT会话分为四个阶段:连接,身份验证,通信和终止。客户端开始创建传输控制协议/互联网协议(TCP / IP)连接到代理使用任何一个标准港口或者由代理的操作符定义的自定义端口。在创建连接时,重要的是要认识到,如果提供了重用的客户机标识,服务器可能会继续使用旧会话。
标准端口为1883,适用于非未确认的通信和8883,用于加密通信 - 使用安全套接字层(SSL./ /传输层安全性(TLS)。在SSL/TLS握手期间,客户端验证服务器证书并验证服务器。客户端还可以在握手期间向代理提供客户端证书。代理可以使用它来验证客户端。虽然没有专门的MQTT规范,但它已成为经纪人习惯于使用SSL / TLS客户端证书支持客户端身份验证。
由于MQTT协议旨在成为资源受限和物联网设备的协议,SSL/TLS可能并不总是一个选项,在某些情况下,可能不需要。在这种情况下,身份验证以明文的用户名和密码的形式呈现,由客户端发送到服务器——这是CONNECT/CONNACK包序列的一部分。此外,一些经纪人,特别是公开经纪人公布在互联网上,将接受匿名客户。在这种情况下,用户名和密码只是留空。
MQTT被视为轻量级协议,因为其所有消息都具有小的代码占用。每条消息都包括固定标题 - 2字节- 可选的变量标题,消息有效负载限制为256兆字节(MB)的信息和服务质量(QoS.)的水平。
在通信阶段,客户机可以执行发布、订阅、取消订阅和p操作。发布操作发送一个二进制文件块将数据(内容)转换为由发布者定义的主题。
MQTT支持消息二进制大对象(斑点)大小最高256 MB。内容的格式将是特定于应用程序的。主题订阅是使用订阅/小区分组对进行的,并且使用取消订阅/取消订阅包对类似地执行取消订阅。
主题字符串使用特殊分隔符字符,正向斜杠(/)形成自然主题树。客户端可以订阅 - 并取消订阅 - 主题树中的整个分支,使用特殊通配符。有两个通配符:单级通配符,加号(+);和多级通配符,哈希字符(#)。一个特殊的主题字符,美元字符($),不包括来自任何根通配符订阅的主题。通常,$用于传输特定于服务器或系统消息。
客户端在通信阶段可以执行的另一个操作是使用PINGREQ/PINGRESP包序列ping代理服务器。这个数据包序列大致翻译为:你还活着吗? /是的,我还活着吗?该操作除了维护一个实时连接和确保TCP连接没有被a关闭之外没有其他功能网关或路由器。
当发布者或订阅者希望终止MQTT会话时,它会向代理发送断开连接消息,然后关闭连接。这叫做优雅关机因为它使客户能够通过提供客户的身份和恢复它离开的客户端来轻松重新连接。
如果断开连接突然发生,发布者没有时间发送断开连接消息,代理可能会从发布者向订阅者发送代理以前缓存的消息。这条消息被称为a最后遗嘱,为订阅者提供如何处理发布服务器意外死亡的指示。
使用MQTT有什么好处?
MQTT协议体系结构的轻量级属性和最小开销有助于确保以低带宽平稳传输数据,并减少CPU和RAM上的负载。MQTT相对于竞争协议的优势如下:
- 高效的数据传输和快速实现,由于它是一个轻量级协议;
- 低网络使用,由于最小化数据包;
- 数据高效分布;
- 成功实施遥感和控制;
- 快速,高效的信息交付;
- 使用少量的电力,这对连接的设备是好的;和
- 优化网络带宽。
MQTT的缺点是什么?
MQTT的潜在缺点包括以下内容:
- 与受限应用协议相比,MQTT具有较慢的传输周期(拍涂)。
- MQTT的资源发现工作在灵活的主题订阅上,而CoAP使用稳定的资源发现系统。
- MQTT是未加密的。相反,它使用TLS/SSL(传输层安全/安全套接字层)进行安全加密。
- 很难创建一个全局可扩展的MQTT网络。
- 其他MQTT挑战涉及安全性,互操作性和身份验证。
因为MQTT协议在设计时并没有考虑到安全性,所以该协议传统上被用于安全后端网络,用于特定于应用程序的目的。MQTT的主题结构可以很容易地形成一个巨大的树,而且没有明确的方法将树划分为可以联合的更小的逻辑域。这使得很难创建全局可扩展的MQTT网络,因为随着主题树的大小增长,复杂性也会增加。
MQTT的另一个负面方面是缺乏互操作性。因为消息有效载荷是二进制的,因为没有关于它们的编码方式,所以可能出现问题 - 尤其是在开放式架构中,不同制造商的不同应用程序应该彼此无缝工作。
如前所述,MQTT协议中内置了最小的身份验证特性。用户名和密码是明文发送的,任何形式的MQTT安全使用都必须使用SSL/TLS,遗憾的是,SSL/TLS不是轻量级协议。
使用客户端证书进行身份验证客户端不是一个简单的过程,并且在MQTT中无法控制谁拥有主题,谁可以发布信息,除了使用专有的,带外手段。这使得很容易将有害消息注入网络,故意或错误地。
此外,邮件接收器没有办法知道谁发送了原始信息,除非该信息包含在实际消息中。必须在专有时装的MQTT顶部实现的安全功能增加代码占用脚印,使实现更加困难。
MQTT协议应用程序和用例
由于其轻量级属性MQTT适用于涉及远程监控的应用程序,包括以下内容:
- 同步传感器,如火灾探测器或用于盗窃检测的运动传感器,以确定危险是否有效;
- 使用传感器监测出院患者的健康参数;和
- 传感器警告人们的危险。
另一个应用程序是基于文本的消息传递应用程序,用于实时通信,它利用了MQTT的低数据和能源使用。例如,Facebook在其Messenger应用程序中使用了MQTT,不仅因为该协议在移动电话到电话的信息传递过程中节省电池电量,还因为该协议能够在毫秒内高效地传递消息,尽管全球互联网连接不一致。
大多数主要的云服务提供商,包括Amazon Web services (AWS)、谷歌cloud、IBM cloud和Microsoft Azure,都支持MQTT。
MQTT非常适合使用M2M和物联网设备的应用程序,用于诸如智能家居、医疗保健、物流、工业和制造业等环境中的实时分析、预防性维护和监控等目的。
MQTT如何在物联网中使用?
由于MQTT客户端很小,因此根据MQTT.ORG,它们需要最少的资源,因此可以在小型微控制器上使用。要优化网络带宽,MQTT标题很小。Plus,MQTT“可以扩展以与数百万单位设备连接,”根据组织。
因此,MQTT是物联网和通信中最常用的协议之一IIoT基础设施——例如,公用事业行业在其服务和客户及设备之间有效地传输数据。
MQTT在物联网或工业物联网结构中使用的例子包括:
- 智能计量。MQTT协议可用于传输数据,并保证消息传递,从而实时提供准确的读数。这有助于使账单更准确。
- 收集环境传感器数据。用于远程环境的传感器通常是低功耗设备,因此MQTT非常适合具有较低优先级数据传输需求的物联网传感器。
- 机器健康数据。它提供了一个发布/订阅消息平台,给出了一个风力涡轮机的例子,它要求“在机器健康数据到达数据中心之前,保证向当地团队交付该数据”。
- 计费系统。MQTT帮助消除账单或发票中重复或丢失的消息包。
无论用于智能计量、快速中断响应或其他物联网和工业物联网应用程序,MQTT都使资源受限的物联网设备能够向充当MQTT消息代理的服务器发送或发布有关特定主题的信息。然后代理推向先前已订阅主题的客户端发送的信息。
对于人类,一个主题看起来像一个分层文件路径。客户端可以订阅主题的层次结构的特定级别,或者使用通配符来订阅多个级别。客户端可以是字段中的IOT传感器或在处理IOT数据的数据中心中的应用程序。
举例来说,Carriots、Evrythng和ThingWorx物联网平台支持MQTT协议。
竞争协议
其他转移与mqtt竞争的协议包括以下:
- 约束应用协议(CoAP)。非常适合物联网,它使用请求/响应通信模式。
- 高级消息队列协议(AMQP)。与MQTT一样,它使用发布/订阅通信模式。
- 简单/面向流文本的消息协议(STOMP)。它是一个基于文本的协议。然而,STOMP不处理队列和主题;它使用带有目标字符串的发送语义。
- Mosquitto。它是一个开源MQTT经纪人。
- SMCP (Simple Media Control Protocol)协议。在嵌入式环境中使用的CAAP堆栈是基于C的。
- SSI(简易传感器接口)。这是一种通信协议,用于计算机和传感器之间的数据传输。
- 数据分发服务(DDS)。对于实时系统,它是一种中间件标准,可以在嵌入式系统中直接实时发布或订阅通信。
服务水平的质量
QoS是指消息的发送方和消息的接收方之间的协议。它作为MQTT中的一个关键特性,使客户机能够在三种服务级别之间进行选择。
这三个不同的QoS级别决定了MQTT协议如何管理内容。虽然更高级别的QoS更可靠,但它们有更多的延迟和带宽要求,因此订阅客户端可以指定它们希望接收的最高QoS级别。
最简单的QoS级别是未确认服务。此QoS级别使用发布包序列;发布者一次向代理发送消息,代理一次将消息传递给订阅者。没有适当的机制来确保正确地接收了消息,并且代理不保存消息。这个QoS级别也可以称为最多一次,QoS0或者火和忘记。
第二个QoS级别是公认的服务。此QoS级别在发布者和其代理之间以及代理和订阅者之间使用发布/回送包序列。确认包验证内容已被接收,如果没有及时接收到确认,重试机制将再次发送原始内容。这可能导致订阅者接收同一消息的多个副本。这个QoS级别也可以称为至少一次或者QoS1。
第三个QoS级别得到保证。此QoS级别以两对数据包提供消息。第一对称为发布/ pubrec,第二对称为Pubrel / PubComp。两对确保,无论重试次数如何,该消息只会传递一次。这个QoS级别也可以称为恰好一件事或者QoS2。
MQTT协议版本和历史记录
MQTT是由IBM的Andy Stanford-Clark博士和Arcom(现在的Eurotech)的Arlen Nipper于1999年创建的。MQTT的创建是为了将石油和天然气行业中使用的监控设备连接到远程企业服务器,这是一种具有成本效益和可靠的方式。当面临如何将数据从沙漠中的管道传感器推送到非现场SCADA系统的挑战时,他们决定采用基于TCP/ ip的发布/订阅拓扑事件驱动的保持卫星链接传输成本下降。
虽然MQTT仍与IBM密切相关,但现在是一个开放协议,由组织推进结构化信息标准(绿洲)。
尽管顾名思义,MQTT并不是最初的IBM MQSeries的一部分;但是,从版本7.1开始,它在WebSphere MQ中可用。MQTT以前被称为SCADA协议、MQ Integrator SCADA设备协议(MQIsdp)和WebSphere MQTT (WMQTT),尽管所有这些变体都已不再使用。
MQTT根据特定的版本有不同的规范。5.0版本取代了MQTT的最后一个版本——版本3.1.1。OASIS定义的一些新规范包括以下内容:
- 使用PUB /子消息模式;
- 一种机制,可以在发生异常断开时通知用户;
- 信息传递的三个层次:最多一次、至少一次和恰好一次;
- 最小化运输开销和协议交换,以减少网络流量;和
- 引用有效负载内容的不可知消息传递传输。
可以在Oasis'网站找到其他规格这里。
MQTT的更新
MQTT于2015年10月28日正式批准为OASIS标准。在2016年1月底,它被认为是国际标准化组织(ISO)标准。该协议不断改进,现在支持WebSocket,另一种协议,可以实时实现客户端和经纪人之间的双向通信。后来,值得注意的版本包括V3.1.1标准和V5.0标准,两者都被批准为OASIS标准。作为其一些更新的示例,5.0版包含更好的错误报告,包括消息标题中的元数据,共享订阅,消息和会话到期,以及主题互联网。