1、概述
CoAP(Constrained Application Protocol)受限应用协议是一种物联网通信协议。顾名思义,其目标是面向资源受限物理设备通信而设计的。同时,CoAP支持RESTful(Representational State Transfer)表征性状态转移架构,实现CoAP物联网对象通过GET、POST、PUT和DELETE四种统一方式接入。本文从CoAP报文解析开始到RESTful实现提供一套基础开源框架实现奇辰Open-API。
2、CoAP开源架构
设计CoAP开源架构如下图所示:
接入CoAP物联网的对象包括各种物理设备和应用终端,比如微信小程序。相比于MQTT等其它物联网协议采用TCP作为底层协议,CoAP为了实现受限资源对象接入通常选择UDP无连接协议作为底层协议。从顶层应用调用底层协议技术实现CoAP通信是个复杂过程,本文实现的CoAP开源框架奇辰Open-API将其分成两层:
- 协议处理层:负责CoAP报文按照 RFC 7252规范进行编码和解码,调用底层基础协议进行发送和接收;
- RESTful层:在协议处理层基础上为应用层暴露统一的GET、POST、PUT和DELETE操作接口,实现物联网对象的类Web访问。
3、CoAP协议处理实现
3.1报文格式
CoAP报文格式如下:
报文分4个部分:
1)Head报文头:
报文头包含4个字节,可知一条最简单的CoAP报文即为4字节。其由4个部分构成:
- Ver:2bit,版本信息,目前为固定0x01;
- T:2bit,消息类型,包括 CON, NON, ACK, RST4种,取值如下:
CON | 0x00 |
NON | 0x01 |
ACK | 0x10 |
RST | 0x11 |
- TKL:4bit,token长度,取值范围0-8字节;
- Code:8bit,功能码/响应码。Code被分成前3位和后5位两部分,两部分构成一个小数,功能划分如下:
0.00 | 空报文 |
0.01-0.31 | 请求报文 |
1.00-1.31 | 保留 |
2.00-5.31 | 响应报文 |
6.00-7.31 | 保留 |
具体含义为:
0.01 | GET方法——用于获得某资源 |
0.02 | POST方法——用于创建某资源 |
0.03 | PUT方法——用于更新某资源 |
0.04 | DELETE方法——用于删除某资源 |
2.01 | Created |
2.02 | Deleted |
2.03 | Valid |
2.04 | Changed |
2.05 | Content。类似于HTTP 200 OK |
4.00 | Bad Request 请求错误,服务器无法处理。类似于HTTP 400 |
4.01 | Unauthorized 没有范围权限。类似于HTTP 401 |
4.02 | Bad Option 请求中包含错误选项 |
4.03 | Forbidden 服务器拒绝请求。类似于HTTP 403 |
4.04 | Not Found 服务器找不到资源。类似于HTTP 404 |
4.05 | Method Not Allowed 非法请求方法。类似于HTTP 405 |
4.06 | Not Acceptable 请求选项和服务器生成内容选项不一致。类似于HTTP 406 |
4.12 | Precondition Failed 请求参数不足。类似于HTTP 412 |
4.15 | Unsuppor Conten-Type 请求中的媒体类型不被支持。类似于H |