1.1 什么是 CoAP 协议?

CoAP(Constrained Application Protocol,受限应用协议)是 IETF 为资源受限的物联网设备设计的轻量级 UDP 应用层协议(RFC 7252)。它在 HTTP 请求/响应模型基础上,通过二进制头压缩、慢启动 UDP 重传和资源发现机制,使 MCU、传感器等低算力设备也能接入互联网。

适用边界:CoAP 并非 HTTP 的替代品,而是专为 8‑bit MCU、≤ 256KB RAM、丢包率高的无线网络(如 6LoWPAN、LoRaWAN)场景设计的“结构化 Web 协议”。它天然支持 UDP 多播和资源发现,适合 1:N 设备群通信。

1.1.1 核心特性一览

  • UDP 传输 + 可靠性保障:默认基于 UDP,通过 CON(Confirmable)消息与 ACK/RST 握手实现重传保障;非确认消息 NON 用于实时流数据。
  • 二进制头部(4 字节基础):头部紧凑,相比 HTTP 文本头部大幅节省带宽。
  • RESTful 语义:沿用 GET/POST/PUT/DELETE 方法 + URL 路径,与 Web 开发体系自然衔接。
  • 内置资源发现:通过 /.well-known/core 路径查询设备支持的资源列表。
  • 观察者模式(Observe):客户端订阅资源变化,服务端主动推送更新,避免轮询。
  • 块传输(Block):将超过 UDP 报文 MTU 的负载分片传输,支持大负载固件升级。

1.1.2 与 MQTT / HTTP 的对比

对比维度CoAPMQTTHTTP
传输层UDP(可协商 DTLS)TCP(可加 TLS)TCP(可加 TLS)
报文大小4 字节头 + 载荷固定头 2 字节 + 可变头文本头 > 100 字节
通信模式请求/响应 + 观察者发布/订阅(Broker)请求/响应
资源发现内建 (/.well-known/core)需 Broker 或扩展需额外描述(如 OpenAPI)
可靠性CON + 重传 / NONQoS 0/1/2TCP 保底 + 状态码
多播支持原生 UDP 多播不支持不支持
适用设备MCU、传感器、低功耗节点网关、移动端、边缘服务器PC、服务器、浏览器

1.1.3 典型适用场景

  • 智能楼宇传感器网络:温度、湿度、光照等节点通过 6LoWPAN 或 LoRaWAN 接入,CoAP 提供资源描述 + 多播查询,同一网络中数百节点可同时上报。
  • 工业现场瞬时控制:对实时性要求高的开关量(如电磁阀动作),使用 NON 消息减少确认延时;固件升级时通过块传输分批推送。
  • 农业物联网:电池供电的土壤传感器每隔 5 分钟上传数据,CoAP 的观察者订阅模式让网关只推送变化值,节省能耗。
  • 智慧路灯:路灯控制器支持 CoAP 资源发现;运维平台通过 GET /lights/strip1 获取状态,通过 PUT /lights/strip1/level 调节亮度。

1.1.4 设备接入流程拆解(最小可行)

  1. 资源建模:将设备功能抽象为 URL 路径 + 方法语义。例如温度传感器在设备上暴露 /temp 资源,对外提供 GET 操作。
  2. 服务端启动:在 MCU 上嵌入 CoAP 栈(如 coap‑thon、CoAP.NET、libcoap),绑定 UDP 端口 5683(普通)或 5684(DTLS 加密)。
  3. 客户端发现:客户端(网关或云端)向设备发送 GET 请求 /.well-known/core,设备返回可用资源列表,如 </temp>;rt="temperature"。
  4. 数据交互:客户端使用对应的 REST 方法读取或写入资源;若开启 Observe,客户端在请求中携带 Observe:0 选项,设备在资源变化时自动推送响应。
  5. 安全防护:对敏感设备启用 DTLS;在非受信网络中搭配预共享密钥或证书。
实践清单(本章核心):
1. 确认设备 MCU 能否运行 UDP 协议栈(6LoWPAN、LoRaWAN、NB‑IoT 底层均支持 UDP)。
2. 明确设备的数据模型:哪些值需要远程读/写/订阅。
3. 选择 CoAP 实现库:嵌入式 C 推荐 libcoap,Python 原型推荐 CoAPthon3。
4. 测试环境中使用 coap-client 工具(libcoap 命令行)进行资源发现和请求调试。
5. 对比同一场景下的 MQTT/HTTP 带宽与内存开销,确认 CoAP 的削峰效果。
CoAP 协议全景:特性 → 对比 → 场景 核心特性 UDP 传输 + 重传 4 字节二进制头 RESTful 语义 Observe / Block 与 MQTT/HTTP 对比 ← 更轻量,无 Broker → ← 资源发现内建 → ← 支持 UDP 多播 → ← 低功耗 MCU 原生 → 适用场景 智能楼宇 工业现场 农业物联网 智慧路灯 可穿戴设备 协议差异速查(CoAP vs MQTT vs HTTP) • 传输层:CoAP → UDP;MQTT → TCP;HTTP → TCP • 可靠机制:CoAP → CON/ACK 重传;MQTT → QoS0/1/2;HTTP → TCP + 状态码 • 资源发现:CoAP 原生支持,MQTT/HTTP 需额外 broker 或描述文件 设备接入最小流程(5 步) 1. 资源建模:设备功能 → URL 路径 + 方法 (GET/PUT/POST/DELETE) 2. 服务端启动:嵌入式 CoAP 栈 → UDP 端口 5683 3. 资源发现:GET /.well-known/core → 返回资源列表 4. 数据交互:REST 请求 + Observe 订阅 5. 安全防护:DTLS / 预共享密钥
选型陷阱提醒:CoAP 虽然轻量,但不适用于以下场合:需要长连接双向推送(MQTT 更优),需要完整文本书记录(HTTP 更优),设备内存小于 4KB 且没有 UDP 硬件加速(Bare‑Metal 蓝牙广播更合适)。请在项目初期根据节点数、报文大小、网络频率、功耗预算双向评估。