MQTT VS CoAP

**

物联网通信协议

**
通信协议可以被认为是一种语言,即两台或两台以上的设备可以相互交流。同时无规矩不成方圆,通信协议也遵循一组规则,两台设备会将有意义的信息传递给对方。在分布式系统中通信协议极为重要,相同的协议不同的部分在多个位置独立运行。系统在运行进程时可能是多样化的,因此在系统中需要保证一组通用的指令来通信。
IoT 之所以可以掀起热潮,信息物理融合系统(Cyber-Physical Systems,简称CPS)功不可没。物理设备连接到互联网和传递数据及接收数据的概念基于 IoT 解决方案的真正地实现。与此同时,这也增加了现有的通信协议及互联网的复杂性。
IoT 的发展历程中带来了很多可能性,但其中唯一可行的是机器与机器(M2M)通过互联网实现实时有效连接。一台设备被连接到互联网仅被认为是人际互动间的产物,而不是一个顺其自然的结果。因此,协议与互联网之间的通信总是在不可靠与缓慢的基础上发展。

**

MQTT协议

**
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)最早是IBM开发的一个即时通讯协议,MQTT协议是为大量计算能力有限且工作在低带宽、不可靠网络的远程传感器和控制设备通讯而设计的一种协议。

MQTT协议的优势是可以支持所有平台,它几乎可以把所有的联网物品和互联网连接起来。

它具有以下主要的几项特性:
1、使用发布/订阅消息模式,提供一对多的消息发布和应用程序之间的解耦;
2、消息传输不需要知道负载内容;
3、使用 TCP/IP 提供网络连接;
4、有三种消息发布的服务质量:
QoS 0:“最多一次”,消息发布完全依赖底层 TCP/IP 网络。分发的消息可能丢失或重复。例如,这个等级可用于环境传感器数据,单次的数据丢失没关系,因为不久后还会有第二次发送。
QoS 1:“至少一次”,确保消息可以到达,但消息可能会重复。
QoS 2:“只有一次”,确保消息只到达一次。例如,这个等级可用在一个计费系统中,这里如果消息重复或丢失会导致不正确的收费。
5、小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;
6、使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制;
在MQTT协议中,一个MQTT数据包由:固定头(Fixed header)、 可变头(Variable header)、 消息体(payload)三部分构成。MQTT的传输格式非常精小,最小的数据包只有2个bit,且无应用消息头。
下图是MQTT为可靠传递消息的三种消息发布服务质量
MQTT VS CoAP_第1张图片
发布/订阅模型允许MQTT客户端以一对一、一对多、多对一、多对多方式进行通讯。
下图是MQTT的发布/订阅消息模式
MQTT VS CoAP_第2张图片
发布/订阅消息模式:
如同用手机去看股票一样。
看股票的人,按照自己的自选股进行订阅消息,主站只把相关消息发给订阅了的人。每一个股票的信息更新之后就会发给主站。
这样应该大家可以理解发布/订阅消息模式,只不过在通信过程中,发布者也可以是订阅者。
MQTT帧结构
MQTT VS CoAP_第3张图片
**

CoAP协议

**
CoAP是受限制的应用协议(Constrained Application Protocol)的代名词。由于目前物联网中的很多设备都是资源受限型的,所以只有少量的内存空间和有限的计算能力,传统的HTTP协议在物联网应用中就会显得过于庞大而不适用。因此,IETF的CoRE工作组提出了一种基于REST架构、传输层为UDP、网络层为6LowPAN(面向低功耗无线局域网的IPv6)的CoAP协议。

CoAP采用与HTTP协议相同的请求响应工作模式。CoAP协议共有4中不同的消息类型。
CON——需要被确认的请求,如果CON请求被发送,那么对方必须做出响应。
NON——不需要被确认的请求,如果NON请求被发送,那么对方不必做出回应。
ACK——应答消息,接受到CON消息的响应。
RST——复位消息,当接收者接受到的消息包含一个错误,接受者解析消息或者不再关心发送者发送的内容,那么复位消息将会被发送。

CoAP消息格式使用简单的二进制格式,最小为4个字节。

一个消息=固定长度的头部header + 可选个数的option + 负载payload。Payload的长度根据数据报长度来计算。
主要是一对一的协议
举个例子:
比如某个设备需要从服务器端查询当前温度信息。

请求消息(CON): GET /temperature , 请求内容会被包在CON消息里面
响应消息 (ACK): 2.05 Content “22.5 C” ,响应内容会被放在ACK消息里面
MQTT VS CoAP_第4张图片

CoAP帧结构
MQTT VS CoAP_第5张图片
**

CoAP与MQTT的区别

**
MQTT
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议
CoAP
CoAP是受限制的应用协议(Constrained Application Protocol)的代名词。在最近几年的时间中,专家们预测会有更多的设备相互连接,而这些设备的数量将远超人类的数量。在这种大背景下,物联网和M2M技术应运而生。虽然对人而言,连接入互联网显得方便容易,但是对于那些微型设备而言接入互联网非常困难。在当前由PC机组成的世界,信息交换是通过TCP和应用层协议HTTP实现的。但是对于小型设备而言,实现TCP和HTTP协议显然是一个过分的要求。为了让小设备可以接入互联网,CoAP协议被设计出来。CoAP是一种应用层协议,它运行于UDP协议之上而不是像HTTP那样运行于TCP之上。CoAP协议非常的小巧,最小的数据包仅为4字节。

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协议具有一定的优势。因为目前国内外主要的云计算服务商,比如阿里云、AWS、百度云、Azure以及腾讯云都一概支持MQTT协议。还有一个原因就是MQTT协议比CoAP成熟的要早,所以MQTT具有一定的先发优势。

你可能感兴趣的:(物联网轻量级协议,MQTT,COAP,TCP,UDP,通信协议)