什么是Coap协议
CoAP是一种低开销的简单协议,专门针对受限设备(例如微控制器)和受限网络而设计。
特征
- 受限制的小型设备的Web传输协议
- 异步消息交换
- 低开销,非常易于解析
- URI和内容类型支持
- 代理和缓存功能
层次
CoAP协议有两个不同的层:消息负载和请求/响应。消息层处理UDP和异步消息。请求/响应层基于请求/响应消息来管理请求/响应交互。
Coap消息模型
这是CoAP的最低层。该层处理端点之间的UDP交换消息。每个CoAP消息都有一个唯一的ID。这对于检测消息重复很有用。
CoAP协议使用两种消息:确认消息、不可确认的消息 可确认消息是可靠消息。在两个端点之间交换消息时,这些消息可能是可靠的。在CoAP中,使用确认消息(CON)获得可靠的消息。使用这种消息,客户端可以确保消息将到达服务器。反复发送确认消息,直到另一方发送确认消息(ACK)。ACK消息包含与确认消息(CON)相同的ID。
另一个消息类别是“不可确认(NON)”消息。这些是不需要服务器确认的消息。它们是不可靠的消息,或者换句话说,这些消息不包含必须传递给服务器的关键信息。包含从传感器读取的值的消息属于此类别。即使这些消息不可靠,它们也具有唯一的ID。
CoAP请求/响应模型
CoAP请求/响应是CoAP抽象层中的第二层。使用“确认”(CON)或“非确认”(NON)消息发送请求。根据服务器是否可以立即响应客户端请求或答案(如果不可用),有几种方案。
安全方面
在安全方面,虽然 CoAP 不能使用 SSL/TLS 提供安全(因为这需要 TCP 传输层),但可以使用通过 UDP 运行的 DTLS(数据报传输层安全标准),这可提供与 TLS 相同的保证。具有 DTLS 功能的 CoAP 设备通常支持 ECC 和 AES 或 RSA 和 AES 。
MQTT
MQTT的特点是可以保持长连接,具有一定的实时性,云端向设备端发送消息,设备端可以在最短的时间内接收到并作出响应,所以MQTT更适合需要实时控制的场合,更适合执行器。要保持长连接,那么就要时不时地发送心跳包,这就不会省电了。所以低功耗的场合并不适合MQTT。MQTT的长连接需要建立在TCP的基础上,TCP协议的复杂性决定了对设备的要求是比较高一些的,相比UDP。
CoAP
CoAP的特点是低功耗,数据发完就可以休眠了。所以CoAP更适合数据采集的场合,更适合纯粹的传感器设备,特别是电池供电的传感器设备。基于UDP协议,对设备的要求比较简单。华为出的NB-IoT芯片就只支持UDP和CoAP,华为的决策告诉我们CoAP和NB-IoT是一对
|