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 |

最低0.47元/天 解锁文章
6539

被折叠的 条评论
为什么被折叠?



