reference · coap
CoAP:面向受限设备的 REST 式消息协议
理解 CoAP 方法、可确认消息、观察机制以及何时适合使用受限 REST。
版本、来源核对与技术审阅
- 适用场景
- CoAP:面向受限设备的 REST 式消息协议
- 发布日期
- 版本
- 版本信息见一手来源
- 事实与来源
- 已于 2026年7月14日 对照所引来源核对
- 技术审查
- 暂无独立技术审阅记录
结论先行
一句话决策建议
CoAP 将类 REST 资源模型引入受限网络,提供面向 UDP 的可靠性机制和紧凑编码。
核心结论
CoAP 将类 REST 资源模型引入受限网络,提供面向 UDP 的可靠性机制和紧凑编码。
受限应用协议(CoAP)是一种 Web 风格的应用协议,专为受限设备和网络设计。它使用 GET、POST、PUT 和 DELETE 等常见方法,用 URI 标识资源,支持内容格式和缓存。其基础传输是 UDP,因此协议自身增加了紧凑的消息标识符、确认机制、重传规则和重复检测。
当面向资源的模型比基于代理的主题模型更清晰,而 HTTP 的开销或传输假设不适合设备网络时,CoAP 就显得有价值。
CoAP 存在的意义
小型设备可能内存有限、无线电性能 modest、链路丢包率高。要求每次交互都使用完整的 HTTP/TCP 协议栈会增加状态、代码和连接开销。另一方面,自行发明私有二进制协议又放弃了标准方法、媒体类型、缓存、代理和可复用工具。
CoAP 保留了诸多 Web 概念,同时为受限环境调整了消息交换方式。它由 IETF 在 RFC 7252 中标准化,配套规范涵盖资源观察、分块传输和对象安全。
工作原理
CoAP 端点暴露资源,如 /sensors/temperature 或 /config/reporting。请求携带方法码、令牌、选项和可选载荷。令牌让客户端将响应与请求关联。Message ID 支持消息层的重复检测和确认,它不是全局唯一的业务事件标识符。
消息可以是可确认(Confirmable)或非确认(Non-confirmable)类型。可确认消息会以退避策略重传,直到被确认或交换超时。响应可以“搭便车”在确认报文中返回,也可以单独发送。非确认消息不进行确认交互,适合偶尔丢包可接受或应用频繁发送替换数据的场景。
CoAP 响应码类似于 HTTP 的类别划分,但使用紧凑的表示形式。选项携带 URI 路径、内容格式、接受偏好和缓存控制等元数据。代理可以在 CoAP 和 HTTP 之间转换,但转换时仍需谨慎处理安全、缓存和时序问题。
Observe 扩展允许客户端注册对某个资源的兴趣,在其表示发生变化时接收通知。Observe 不是持久事件日志:通知可能丢失,状态变化可能快于投递速度,客户端需要重同步策略。
大型表示可以使用分块传输。这使得固件或文档传输成为可能,但并不自动意味着它在窄带无线电链路上高效或安全。应用仍需考虑能耗、拥塞、完整性、断点续传和制品真实性。
CoAP 解决的问题
CoAP 提供标准资源语义、紧凑的请求/响应消息、异步交换、支持多播的操作、缓存和可选的观察机制。它适用于本地设备管理、楼宇自动化、受限遥测查询,以及网关向更广泛系统暴露 CoAP 资源的场景。
由于模型以请求为导向,将当前状态和配置表示为资源通常很直观。客户端可以获取表示、用适当的方法更新它,并通过响应码理解结果。
CoAP 无法解决的问题
CoAP 不定义设备模型、设备群注册、授权策略或应用载荷 Schema。一个看起来整洁的 URI 并不能证明资源具有稳定的语义。产品仍需版本管理、单位定义、校验、归属和生命周期控制。
可确认消息提供的是传输层重传,不是恰好一次的物理操作。服务器必须识别重复请求,写入操作应当幂等,或在重试可能造成损害时通过应用状态加以保护。
CoAP 也不意味着 UDP 总是更优选择。有些网络阻断 UDP,NAT 映射可能过期,拥塞或分片可能抵消预期的节省。应在目标网络上实测完整的交互过程。
适用场景与不适用场景
当设备暴露面向资源的状态或配置、载荷紧凑、且网络能支持其 UDP 行为时,使用 CoAP。当主要需求是多对多代理扇出、长生命周期持久订阅或没有受限边界的常规 Web 集成时,CoAP 较不合适。MQTT 可能更适合那些异步设备群模式,而 HTTP 仍然是许多面向互联网 API 的最简选择。
安全方案必须匹配传输路径。DTLS 可以保护端点之间的 CoAP 传输。OSCORE 在兼容的中间节点之间端到端保护 CoAP 消息,适用于代理需要路由但不应读取受保护内容的场景。无论哪种方案,密钥分发、重放处理、授权和设备生命周期都是产品的职责。
相关技术
HTTP 共享 REST 资源模型,但通常运行在 TCP 或 QUIC 上,生态系统更庞大。MQTT 使用代理和主题而非直接资源。LwM2M 在 CoAP 之上构建了设备管理模型和操作。6LoWPAN 和 Thread 可在其下层提供受限 IP 网络。
常见误区
“UDP 等于不可靠”——忽视了可确认消息和重传机制。“可确认意味着操作已执行”——将接收成功混淆为业务成功。“CoAP 就是压缩的 HTTP”——忽视了不同的消息和传输行为。“Observe 是队列”——忽视了丢包和重同步需求。最后,“头部小就保证低能耗”——忽视了无线电唤醒时间、重传、安全握手和载荷分片。
在将 CoAP 作为生产接口之前,应先定义稳定的资源、内容格式、幂等性、缓存行为、安全上下文、重传预期和故障处理策略。
上线前必读
实施检查清单
- 根据信任边界选择 DTLS 或 OSCORE。
- 保持资源稳定,缓存语义需有意设计。
- 为丢包网络预留重传预算。
一手来源
事实核验
- RFC 7252 — The Constrained Application Protocol访问日期 2026年7月14日
来源核对日期 2026年7月14日 · 下次计划核对: 2027年7月14日
维护记录
更新历史
- 2026年7月14日
- 首次发布
- 2026年7月14日
- 更新内容并核对来源
如有不清晰、不准确或过时的内容,请告诉我们。