CoAP 是一种专为 资源受限的物联网设备(如低功耗传感器、嵌入式设备)设计的轻量级应用层协议,由 IETF 标准化(RFC 7252)。它遵循 RESTful 架构风格,提供类似 HTTP 的交互模型,但针对物联网场景进行了优化。
一、CoAP介绍
1. CoAP 的核心特性
特性 | 说明 |
---|---|
基于 UDP | 默认运行在 UDP 上(支持 TCP 扩展),减少连接开销,适合低带宽、高延迟网络。 |
轻量化 | 协议头部仅 4 字节(HTTP 约 100+ 字节),适合低内存设备。 |
RESTful 接口 | 支持 HTTP 风格的 GET/POST/PUT/DELETE 方法,与 Web 生态兼容。 |
观察模式 | 服务器可订阅资源变化(类似 WebSocket),设备数据更新时主动推送。 |
多播支持 | 支持向多个设备广播请求(如同时配置一组传感器)。 |
块传输(Block) | 分块传输大文件,避免一次性传输导致内存溢出。 |
2. CoAP 消息格式
CoAP 消息分为 请求(Request) 和 响应(Response),包含以下部分:
- Header:4 字节,包含版本、消息类型(CON/NON)、方法/响应码等。
- Token:可变长度,用于匹配请求与响应。
- Options:可选字段,用于携带 URI 路径、内容格式、代理信息等。
- Payload:实际数据(如传感器读数)。
示例:
一个读取温度的 GET 请求:
GET /sensors/temp
→ CoAP 消息:
Header: CON (可靠传输), Method=GET, MsgID=0x7d34
Options: Uri-Path="sensors", Uri-Path="temp"
3. CoAP 与 HTTP 的对比
对比项 | CoAP | HTTP |
---|---|---|
传输层协议 | UDP(默认) / TCP | TCP |
头部开销 | 4 字节起 | 100+ 字节 |
消息类型 | CON(需确认)/ NON(无需确认) | 无区分,默认可靠传输 |
适用场景 | 物联网、低功耗网络 | Web 应用、高带宽环境 |
多播支持 | 是 | 否 |
安全性 | 基于 DTLS 加密 | 基于 TLS(HTTPS) |
二、RESTful 协议(表述性状态转移)
RESTful 是一种 软件架构风格,由 Roy Fielding 在 2000 年提出,核心思想是通过 统一接口 和 资源抽象 简化系统设计。它并非具体协议,而是一种设计原则,常用于 HTTP 协议实现。
1. RESTful 的核心原则
原则 | 说明 |
---|---|
资源标识 | 每个资源通过 URI 唯一标识,如 /devices/light1 。 |
统一接口 | 使用标准 HTTP 方法(GET/POST/PUT/DELETE)操作资源。 |
无状态 | 服务端不保存客户端上下文,每次请求需携带完整信息。 |
可缓存 | 响应应明确是否可缓存,减少重复请求。 |
分层系统 | 客户端无需知道是否直接连接服务器,可通过代理、网关等中间层通信。 |
按需编码 | 客户端可请求特定数据格式(如 JSON、XML)。 |
2. RESTful 操作示例
以智能灯泡控制为例:
- 获取状态:
GET /lights/1 → 响应:{ "status": "on", "brightness": 80 }
- 开灯:
PUT /lights/1 Body: { "status": "on" }
- 删除设备:
DELETE /lights/1
3. 为何物联网选择 CoAP(而非 HTTP)?
- 低开销:CoAP 头部更小,适合 NB-IoT、LoRa 等低带宽网络。
- 多播支持:批量配置设备时效率更高。
- 观察模式:避免 HTTP 轮询,节省设备电量。
- UDP 适配:适应高丢包率的无线网络(如 Zigbee、BLE)。
三、CoAP + RESTful 的物联网应用案例
1. 智能农业
- 场景:通过 CoAP 管理农田传感器(温湿度、光照)。
- 操作流程:
- 传感器注册到 CoAP 服务器(资源路径:
/farms/field1/sensors/temp
)。 - 服务器通过 GET 请求定时读取数据。
- 服务器通过 PUT 设置灌溉阈值(如湿度低于 30% 自动浇水)。
- 传感器注册到 CoAP 服务器(资源路径:
2. 工业设备监控
- 场景:监控工厂机械臂状态。
- 协议交互:
// 订阅机械臂状态变化 OBSERVE coap://factory/robots/arm1/status → 服务器推送:{ "angle": 45°, "load": 20kg }
四、总结
- CoAP 是物联网领域的轻量级 RESTful 协议,解决了 HTTP 在资源受限环境下的不足。
- RESTful 通过资源抽象和统一接口,使系统易于扩展和维护,适用于 IoT、Web API 等多种场景。
- 组合优势:CoAP 的轻量化 + RESTful 的简洁性 = 高效、低功耗的物联网通信方案。