来源:网络 | 2022-01-04 08:36:40
物联网(IoT)和机器对机器(M2M)技术需要使用消息传递和连接协议,以便从远程位置交换信息。
这种协议的一些可取的特点是:
·代码占用空间小(便于在小型设备中实现)
·低功耗
·低带宽消耗
·低延迟
使用发布/订阅(“发布/订阅”)模式
MQTT满足了所有这些要求,并拥有大型公共云亚马逊Web服务、Microsoft Azure和谷歌云平台的动力。在本文中,我们将探讨为什么MQTT是物联网产品最流行的消息传递协议选择。
什么是MQTT?
MQTT(消息队列遥测传输)是由IBM开发并于1999年首次发布的轻量级消息传递协议。它使用pub/sub模式并在设备、服务器和应用程序之间转换消息。
MQTT协议最初是为了将石油管道上的传感器与通信卫星连接起来,重点是将电池损耗和带宽消耗降至最低。
自成立以来,MQTT一直在进行开发,5.0版于2018年5月发布。版本3.1。1于2013年提交给OASIS财团,并被接受为ISO标准。
MQTT是如何工作的?
MQTT体系结构
MQTT协议中连接的设备称为“客户机”,它与称为“代理”的服务器通信代理处理客户端之间的数据传输任务。
每当客户机(称为“发布者”)想要发布信息时,它将发布到特定主题,然后代理将此信息发送给订阅该主题的任何客户机(称为“订阅者”)。
发布者不需要关于订阅者数量或位置的任何数据。反过来,订阅者不需要关于发布者的任何数据。任何客户端都可以是发布服务器、订阅服务器或两者兼有。客户通常不知道对方,只知道充当中介的经纪人。这种设置通常被称为“发布/订阅模型”
MQTT消息
当客户机希望向代理发送数据时,这称为“发布”当客户机希望从代理接收数据时,它将“订阅”一个或多个主题。当客户端订阅某个主题时,它将接收该主题上发布的所有消息。
除了消息本身,发布者还发送QoS(服务质量)级别。此级别定义消息的传递保证。这些QoS级别如下所示:
最多一次:消息发布时,代理将仅“最多一次”接收消息此级别不应用于任务关键型信息,因为它会带来订阅者无法接收消息的风险。
至少一次:发布者继续重新发送消息,直到收到代理关于特定消息的确认。换句话说,接收消息比确保只接收一次更重要。这可能是最常用的QoS级别。
恰好一次:发布者和代理一起工作,以确保代理只接收一次消息并对其执行操作。这需要一些额外的开销,如四部分握手。虽然这是最安全的QoS级别,但也是最慢的,因此仅在必要时使用。
MQTT如何在物联网项目中工作?
在本节中,我们将以我们最近的一个客户机为例,讨论如何在物联网项目中使用MQTT。
一家汽车电池公司希望向全国客户提供“更新鲜”的电池。这意味着实施“先进先出”战略,这样电池就不会在货架上放置太久。
当然,这要求公司跟踪货架上的存货到达日期。由于需要一个值得信赖的物联网合作伙伴,该公司与非常有影响力的客户进行了接触。
非常有帮助地将物联网传感器安装在公司的电池和货架上。这些传感器通过MQTT将信息传输到云中的Amazon Web服务(AWS)。每个电池都有一个信号发射装置,该装置发送蓝牙信号以传达其在机架上的状态。此外,单电池供电的集线器每天唤醒一次,以便使用MQTT(以及用于安全传输的TLS协议)向AWS传输信息。
MQTT的好处
MQTT的好处包括:
轻量级代码占用:设备只需要几行代码就可以启动并运行MQTT协议。
最小化数据包:MQTT非常节能。这是伟大的,如果一个设备是电池供电或有很少的CPU电源。
速度:MQTT实时运行,在QoS之外没有延迟。
易于实现:MQTT已经有了Elixir和Python等编程语言的库。
最后的遗嘱:如果客户端意外断开连接,您可以设置发送给所有订阅者的消息指令,以纠正这种情况。
保留消息:每个主题都可以有一条保留消息,客户端在订阅时会自动接收该消息(如社交媒体上的固定帖子)。
MQTT的常见替代方案
XMPP
XMPP(可扩展消息和状态协议)是一种基于XML语言的通信协议,用于存储和传输数据。它经常用于支持即时消息服务,如Jabber。
XMPP和MQTT之间的一些差异是:
XMPP代码占用的空间稍重一些,您需要一个XML解析器来编码和解码信息。
默认情况下,XMPP不支持发布/订阅模型(尽管可以使用扩展)。
XMPP比MQTT占用更多带宽。
HTTP(S)
HTTP(超文本传输协议)及其扩展HTTPS(超文本传输协议安全)是万维网的基础通信协议。但是,它们是无状态的,每次传输的开销比MQTT要大。此外,HTTPS的吞吐量低于MQTT,这意味着您无法在同一时间段内发送尽可能多的消息。
结论
MQTT在使物联网项目在技术规范方面更加“低提升”,同时实现设备、服务器和应用程序之间所需的连接方面起着至关重要的作用。
什么是CoAP协议?
CoAP受限应用协议是RFC 7252中定义的用于受限设备的专用互联网应用协议。它使设备能够通过Internet进行通信。它被定义为约束应用程序协议,是一种用于非常简单的硬件中的协议。该协议特别适用于受限硬件,如8位微控制器、低功耗传感器和无法在HTTP或TLS上运行的类似设备。它简化了UDP上运行的HTTP协议,有助于节省带宽。它设计用于同一受限网络(例如,低功耗、有损网络)上的设备之间、Internet上的设备和一般节点之间以及由Internet连接的不同受限网络上的设备之间。CoAP还通过其他机制使用,例如移动通信网络上的SMS。
Internet工程任务组受限RESTful环境(IETF核心)工作组为CoAP做了主要的标准化工作。协议的核心在RFC 7252中指定,这意味着CoAP仍然不是标准协议。
RFC 7252中规定了CoAP协议。它是一种用于受限节点或网络(如WSN、IoT、M2M等)的web传输协议,因此被称为受限应用协议。该协议的目标是物联网(IoT)设备具有较少的内存和功率规格。
由于它是为web应用程序设计的,因此也被称为“物联网协议”。它可以用于通过web应用程序将数据从几个字节传输到1000字节。它存在于UDP层和应用层之间。
以下是CoAP协议的特点:
?它是非常高效的RESTful协议。
?易于代理到/从HTTP。
?它是开放的IETF标准
?它是嵌入式web传输协议(coap://)
?它使用异步事务模型。
?UDP绑定具有可靠性和多播支持。
?使用GET、POST、PUT和DELETE方法。
?支持URI。
?它使用小而简单的4字节头。
?支持绑定到UDP、SMS和TCP。
?使用基于DTLS的PSK、RPK和证书安全性。
?使用MIME类型和HTTP响应代码的子集。
?使用内置的发现机制。
图1描述了CoAP体系结构。如图所示,它将普通HTTP客户端扩展到具有资源约束的客户端。这些客户机称为CoAP客户机。代理设备在固定环境和基于HTTP协议的典型internet环境之间架起了桥梁。同一台服务器负责HTTP和CoAP协议消息。
在CoAP客户端和CoAP服务器之间交换CoAP协议消息有两种模式,即。没有单独的响应和单独的响应。
通过单独的响应,服务器通知客户端收到请求消息。这将增加处理时间,但有助于避免不必要的重新传输。
由于使用UDP,CoAP IoT协议不可靠。因此,CoAP消息到达目的地时会无序或丢失。
为了使CoAP协议成为可靠的协议,协议中加入了具有指数退避重传特性的停止等待。本文还介绍了重复检测。
专为物联网和M2M设计的两项新功能是:
观察传感器或执行器上发生的新事件。
设备管理和外部设备的可发现性。
该协议的主要特点是:
需求受限的M2M中使用的Web协议
异步消息交换
低开销和非常简单的解析
URI和内容类型支持
代理和缓存功能
何时使用
CoAP有用的一些具体情况包括:
您的硬件无法运行HTTP或TLS:如果是这种情况,那么运行CoAP和DTLS实际上可以与HTTP做相同的事情。如果您是HTTP API方面的专家,那么迁移将很简单。您收到GET用于读取和发布,PUT和DELETE用于突变,安全性在DTL上运行。
您的硬件使用电池:如果这是一个问题,那么与TCP/IP上的HTTP相比,运行CoAP将提高电池性能。UDP节省了一些带宽,使协议更加高效。
订阅是必要的:如果不能运行MQTT并且HTTP轮询是不可能的,那么CoAP就是一个解决方案
CoAP Prtocols的某些功能与HTTP非常相似,即使CoAP不能被视为压缩HTTP协议,因为它是专为物联网设计的,更详细地说,是为M2M设计的,因此它非常适合此任务。
从抽象协议层来看,CoAP可以表示为:
在上图中,您可以看到构成CoAp协议的两个不同层:消息层和请求/响应层。消息层处理UDP和异步消息。请求/响应层基于请求/响应消息管理请求/响应交互。
CoAP协议支持四种不同的消息类型:
可证实
不可证实
致谢
重置
现在我们讨论一些术语相关的CoAP协议。
端点:参与CoAP协议的实体。通常,端点由主机标识
发送者:发送消息的实体
收件人:邮件的目的地
客户端:发送请求和响应目标的实体
服务器:从客户端接收请求并将响应发送回客户端的实体
CoAP消息模型
CoAP消息是最底层,处理端点之间的UDP交换消息。CoAP消息具有唯一ID和三个部分:
二进制报头
一个紧凑的选项
有效载荷
CoAP协议使用两种消息:
可证实消息
不可确认消息
CoAP可确认消息是可靠消息。在两个端点之间交换消息期间,这些消息可能是可靠的。在CoAP协议中,使用可确认消息(CON)获得可靠消息。使用这种消息,客户机可以确保消息将到达服务器。CoAP可确认消息会一次又一次地发送,直到另一方发送确认消息(ACK)。确认信息(确认信息的确认信息包含相同的确认信息)。
COAP与MQTT
MQTT和CoAP:
这些都是开放的标准
比HTTP更适合受约束的环境
提供异步通信机制
在IP上运行
有一系列的实现
HTTP是最流行和最广泛使用的协议。但在过去几年中,MQTT迅速获得了吸引力。当我们谈论物联网开发时,开发人员必须在两者之间进行选择。
设计和消息传递
MQTT以数据为中心,而HTTP以文档为中心。HTTP是用于客户端-服务器计算的请求-响应协议,并不总是针对移动设备进行优化。在这些方面,MQTT的主要优势是轻量级(MQTT将数据传输为字节数组)和发布/订阅模型,这使其非常适合资源受限的设备,并有助于节省电池。
此外,发布/订阅模式为客户端提供了相互独立的存在,提高了整个系统的可靠性。当一个客户端出现故障时,整个系统可以继续正常工作。
速度和交付
根据3G网络中的测量,MQTT的吞吐量是HTTP的93倍。
此外,与HTTP相比,MQTT协议确保了高交付保证。服务质量分为三个级别:
-最多一次:保证尽最大努力交付。
-至少一次:保证消息至少传递一次。但信息也可以传递不止一次。
-恰好一次:保证每个消息只被对方接收一次
MQTT还为用户提供了最后遗嘱和遗嘱以及保留消息的选项。第一种方法是,在客户端意外断开连接的情况下,所有订阅的客户端都将从代理收到一条消息。保留消息意味着新订阅的客户端将立即获得状态更新。
HTTP协议没有这些功能。
复杂性和消息大小
MQTT的规范非常简短。只有连接、发布、订阅、取消订阅和断开连接类型对开发人员非常重要。而HTTP规范要长得多。
MQTT有一个非常短的消息头,最小的数据包消息大小为2字节。通过HTTP协议使用文本消息格式,它可以编写冗长的标题和消息。它有助于消除麻烦,因为它可以被人类读取,但同时它对于资源受限的设备来说是不必要的。
结论
MQTT协议易于使用。当响应时间、吞吐量、较低的电池和带宽使用率成为未来解决方案的首要目标时,这一点至关重要。在间歇性连接的情况下,它也是完美的。
HTTP是值得扩展的。但当涉及物联网开发时,MQTT更合适。