English

应用层协议MQTT和CoAP哪种更适合物联网

2018-01-20

随着智能家居、智能穿戴产业、工业4.0、智慧城市等产业的飞速发展,物联网应用需求也越来越多,基于这种飞速发展的物联网前景下,物联网的协议也是百家争鸣。一般常用的应用层协议包括MQTT、HTTP、XMPP、CoAP等,这些常用的应用层协议究竟谁更适合物联网应用呢?


在对比哪种协议更适合物联网之前,我们需要先了解各种协议的偏重点。物联网终端节点一般都是存储和带宽受限的嵌入式设备,比如我司的物联网产品,就是有简单的计算能力、存储容量小、带宽低的嵌入式设备(设备传输的速率最多几十KB/S),我司物联网应用层协议就是采用MQTT,通俗的讲该协议就像微信关注公众号一样,关注了就能收到信息,未关注的就收不到推送的消息。而MQTT、HTTP、XMPP、CoAP四种协议中比较复杂的协议显然不适合嵌入式系统应用。XMPP协议基于XML,对于嵌入式设备来说,XML解析是超级困难。HTTP协议对于嵌入式设备来说是属于重量级也不是很合适。比较适合嵌入式设备就是轻量级的MQTT和CoAP。


MQTT协议是为大量计算能力有限且工作在低带宽、不可靠网络的远程传感器和控制设备通讯而设计的一种协议。MQTT协议是由IBM开发的一个即时通讯的协议,MQTT协议的优势是可以支持所有平台,它几乎可以把所有的联网物品和互联网连接起来。


由于目前物联网中的很多设备都是资源受限型的,所以只有少量的内存空间和有限的计算能力,传统的HTTP协议在物联网应用中就会显得过于庞大而不适用。因此,IETF的CoRE工作组提出了一种基于UDP的CoAP协议。

MQTT和CoAP的区别:

MQTT和CoAP都是行之有效的物联网协议,但两者还是有很大区别的,比如MQTT协议是基于TCP,而CoAP协议是基于UDP。从应用方向来分析,主要区别有以下几点:


1、MQTT协议不支持带有类型或者其它帮助Clients理解的标签信息,也就是说所有MQTT Clients必须要知道消息格式。而CoAP协议则相反,因为CoAP内置发现支持和内容协商,这样便能允许设备相互窥测以找到数据交换的方式。


2、MQTT是长连接而CoAP是无连接。MQTT Clients与Broker之间保持TCP长连接,这种情形在NAT环境中也不会产生问题。如果在NAT环境下使用CoAP的话,那就需要采取一些NAT穿透性手段。


3、MQTT是多个客户端通过中央代理进行消息传递的多对多协议。它主要通过让客户端发布消息、代理决定消息路由和复制来解耦消费者和生产者。MQTT就是相当于消息传递的实时通讯总线。CoAP基本上就是一个在Server和Client之间传递状态信息的单对单协议。


MQTT特点编辑:

MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:

1、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;

2、对负载内容屏蔽的消息传输;

3、使用TCP/IP 提供网络连接;

4、有三种消息发布服务质量:“至多一次”,消息发布完全依赖底层TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送;“至少一次”,确保消息到达,但消息重复可能会发生;“只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。

5、小型传输,开销很小(固定长度的头部是2 字节),协议交换最小化,以降低网络流量;

6、使用Last Will 和Testament 特性通知有关各方客户端异常中断的机制。


从当前物联网应用发展趋势来分析,MQTT协议具有一定的优势。因为目前国内外主要的云计算服务商,比如阿里云、AWS、百度云、Azure以及腾讯云等都支持MQTT协议。还有一个原因就是MQTT协议比CoAP成熟的要早,所以MQTT具有一定的先发优势。但随着物联网的智能化和多变化的发展,后续物联网应用平台肯定会兼容更多的物联网应用层协议。

返回顶部
隐藏或显示