物联网的RESTful协议——CoAP
Constrained Application Protocol (CoAP) 是为实现物联网中微型设备间互相通讯而设计的网络传输协议,它具有易于实现和使用、低功耗低带宽、能够保障数据安全等特性。
适用场景
请求-响应式通讯模型
CoAP 采用和 HTTP 协议类似的 REST 模型,服务内容通过 URL 获取,支持 GET 、 POST 等请求方法,易于与 HTTP 数据互相转化,实现与大多数现有 Web 应用的互联互通。
低性能的微型设备
CoAP 基于易于实现的 UDP 协议,数据包头仅占4个字节,需要的功耗和带宽都极低,能够运行在仅有 10KB RAM 的微型设备上。
保证数据安全
CoAP 支持 DTLS 协议保障数据安全。
数据包格式
CoAP 数据包分为 Header 、 Token (可选)、 Options (可选)、 Payload (可选)四个部分。
Header
长度为4个字节。包含协议版本号、数据包类型、请求码、消息 ID 以及后面 Token 的长度。
Token
长度由 Header 指定。请求与响应的 Token 需保持一致。
Options
Key-Value 列表,其中 Value 也是列表,即每个 Key 下可以有多个 Value ,承载的内容与 HTTP Header 类似。
Payload
数据包剩余的内容为 Payload ,为了便于解包与前面的部分通过 0xFF 隔开。
更详细的信息可参考 RFC 文档。
实现
作为 IETF 设计的互联网标准协议,大部分平台已有相应的开源类库实现,可参考这里。此外我自己也使用 Rust 写了一个类库,仅实现了一些基本的特性,因而代码也比较简单,有兴趣的童鞋可以看看。