为了更好地了解风险,漏洞和威胁,需要更好地了解协议及其工作方式。细节深刻,值得一读。
MQTT,消息队列遥测传输,是一种非常简单和轻量级的消息传递协议。它是为具有受限资源的设备开发的,可以通过低于最佳网络的最佳性能进行通信,这些网络可能遭受低带宽,高延迟或者仅仅是明显不可靠的。它位于TCP之上,利用发布/订阅模型,订阅“客户”和数据“经纪人”扮演中间人。该模型的工作方式类似于新闻专线发布服务,其中像AP或路透社这样的“经纪人”允许记者将报告“发布”到他们的有线服务。同时,虽然已经“订阅”该线路的新闻室能够通过经纪人接收新闻。
根据MQTT FAQ,该协议的“设计原则是尽量减少网络带宽和设备资源需求,同时还试图确保可靠性和一定程度的交付保证。”它还指出这些原则使该协议成为最新一代的理想选择。 M2M系统,物联网和“带宽和电池功率非常高的移动应用”。它是一个相当成熟的协议,自1999年以来一直存在,并且仍在不断发展以更好地满足安全性,低功耗和延迟的需求。MQTT通过端口1883上的TCP / IP与IANA一起工作,而TCP / IP端口8883通过SSL注册使用MQTT。
MQTT协议的发布者/订阅者/代理模型的概念图。
如果愿意的话,约束应用协议(CoAP)是一种更年轻且尚未正式标准化的“原始协议”。据官方网站称,它“专为智能能源和楼宇自动化等机器对机器(M2M)应用而设计”。CoAP也通过其他机制使用,例如移动通信网络上的短信。
它专为通过互联网或网络的电力或网络受限设备而设计,但使用用户数据报协议(UDP)而不是TCP。根据Eclipse Foundation的说法,“CoAP数据包比HTTP TCP流程要小得多。从字符串到整数的位域和映射被广泛用于节省空间。数据包很容易生成,并且可以在适当的位置进行解析,而不会在受限设备中占用额外的RAM。“没有机制支持QoS以确保收到数据包。
CoAP遵循客户端/服务器模型,可与HTTP和RESTful API以及软件设计范例互操作。 因为它基于UDP,所以CoAP不要求客户端保持对服务器的连接,这在许多用例中被认为是一个好处。
客户端可以向服务器发送一个CoAP数据包。每个请求都有一些选项,其中最重要的一个是统一资源标识符(URI),它指示所请求资源的“路径” - 非常类似于网站的统一资源定位符(URL)。请注意,节点可以同时是服务器和客户端,实现点对点,全双工数据层。
使用CoAP和HTTPS以及REST API的名义CoAP架构。请注意灵活的拓扑。这里,CoAP客户端节点位于受约束的环境中。橙色箭头是CoAP连接,黄色是HTTPS(作为示例)。
TrendMicro在他们的论文中提供了两种协议的出色比较:
“CoAP比MQTT轻得多,在操作要求方面(即,不需要代理设置)和内存和网络开销(即,UDP不需要保持连接打开,并且消息的大小要小得多)。因此,它满足低功耗物联网节点的要求:它最大限度地降低了传输成本,并且不会强制建立始终在线的连接。
就其而言,MQTT优于CoAP,用于关键任务M2M:它允许实施服务质量并确保消息传递。另一方面,CoAP优于MQTT,用于收集从微小场传感器等瞬态低功率节点传输的遥测数据。CoAP的一个极端应用用例是卫星通信:欧洲航天局的电信系统高级研究(ARTES)计划最近启动了卫星网络中M2M通信的研究项目(延迟可能非常高),CoAP是毫不奇怪地列在所选协议中。“