CoAP协议优点
CoAP(Constrained Application Protocol)是一种适用于物联网(IoT)设备的应用层协议,具有以下优点:
低功耗:适用于电池供电的设备,能够显著减少设备的能耗。
低开销和高效性:CoAP协议设计轻量,能够在资源受限的嵌入式设备运行,适用于低带宽、高延迟的网络环境。
协议格式简洁:采用简洁的二进制消息格式,减少了报文的大小和解析的复杂度
可靠传输:通过消息层提供重传机制,弥补了UDP传输的不可靠性
RESTful风格:支持类似HTTP的RESTful接口,与现有的互联网应用和服务集成更加方便。
1. COAP逻辑分层结构
CoAP 采用 了 双层 结构—— 消息 层 和 请求/ 响应 层。消息 层 处理 端点 之间 的 数据 交换, 并为 CON、 NON、 ACK 和 RST 报文 类型 提供重传 机制,CoAP 通过 增加 消息 层 的 方式 弥补 UDP 传输 的 不 可靠性。
2. COAP三种工作模式
1) 携带模式: ACK 报文 中 包含 响应 负载, 响应 负载 为 文本 形式。
2)分离 模式 中 总共 产生 两 组 CON 报文 和 ACK 报文。 相比 于 携带 模式,分离 模式 需要 进行 4 次 交互.
.
03) 非确认模式:
3. COAP 报文类型
3.1 Confirmable Message( CON):
在 请求/ 响应 交互 过程中, CON 报文 需要 被 接收者 确认。 每一个 CON 报文 必须 要对 应 一个 准确 的 ACK 报文 或 RST 报文, 如果 在 规定 的 时间 内 客户 端 未 接收 到 ACK 报文 或 RST 报文, 那么 客户 端 将会 触发 一次“ 重传”。
3.2 Non- Confirmable Message( NON):
相比 于 CON 报文, NON 报文 的 约束 条件 要 宽松 许多。 单个 NON 报文 不需要 对应 一个 准确 的 ACK 或 RST 报文。 在 一些 传感器 数据 上传 应用 场景 中 NON 报文 较为 常用, 服务器 对 NON 报文 的 处理 也 较为 灵活。 若 服务器 收到 一个 来自 客户 端 的 NON 报文 类型 的 CoAP 请求, 服务器 可选择 不返 回响 应; 同时 客户 端 也不 会 因为 一定 时间 内 没有 收到 来自 服务器 的 ACK 类型 报文 而 触发 重传 机制。
3.3 Acknowledgement Message( ACK):
ACK 报文 用于 确认 CON 报文。 ACK 报文 的 报文 序号( Message ID) 需要 和 CON 报文 的 报文 序号 保持 严格 一致, ACK 报文 可以 在 一定程度 上 保证 CoAP 传输 的 可靠性。 ACK 报文 中 可以 不包括 响应 负载, 可 能为 空。 CoAP 请求/ 响应 过程 定义 了 携带 模式 和 分离 模式, ACK 报文 负载 为 空的 情况 一般 出现 在 分离 模式 中。
3.4 Reset Message( RST):
若服务器 接收 到 一个 CON 报文, 但 由于 报文 中上 下文 缺失 导致 服务器 无法 处理 该报 文, 那么 服务器 将会 返回 一个 RST 报文。RST 报文 的 报文 序号 需 要与 CON 报文 的 报文 序号 保持 严格 一致, 而且 RST 报文 的 负载 一 定为 空。
4. COAP传输机制
4.1 传输参数
4.2. 重传机制
5. COAP协议结构
6. COAP首部
第一个字节
版本编号(ver--bit7-6):固定为0b01 报文 类型 T(bit5-4):需要确认的报文(0-CON), 不需要确认(1-NON), 应答报文(ACK),复位报文(RST)标签长度 (TKL bit3-0): token标签长度,token长度为0,1,2,4字节
第二个字节CODE:
Code 部分 采用 c. dd 的 形式 描述, 其中 c 的 取值 范围 为 0 ~ 7, dd取值 范围 为 0 ~31“·
COAP请求
Code= 0. 01 表示 GET 方法 ·
Code= 0. 02 表示 POST 方法 ·
Code= 0. 03 表示 PUT 方法
Code= 0. 04 表示 DELETE 方法
COAP应答
Code= 0. 00 表示 空 报文 ·
Code= 2. xx 表示 正确 响应
Code= 4. xx 表示 客户 端 错误 响应
Code= 5. xx 表示 服务器 错误 响应
第三、四个字节
报文序号(Message ID):用于报文确认、重传,排序。
标签 Token:
CoAP 中 定义 了 两种 不同 形式 的 请求/ 响应 工作 模式: 一种 为 携带 模式; 另一种 为 分离 模式。标签 在 分离 模式 中 发挥 重要的 作用, 但在 携带 模式 中 往往 可以 省略。
选项 Options:
CoAP 选项 包括 Uri- Host、 Uri- Port、 Uri- Path、 Uri- Query、
Content- Format、 Accept、 Etag、 If- Match 和 If- None- Match 等 部分。
分隔符 0xFF:分隔COAP首部和COAP负载
负载 Payload :
支持格式: 二进制、文本、 XML、JSON 、 CBOR。