概述
【IoT】基于NB-IoT的CoAP协议浅析
CoAP(Constrained Application Protocol) 协议是 IETF 提出的一种面向网络的协议,采用了与 HTTP 类似的特征,核心内容为资源抽象、REST 式交互以及可扩展的头选项等。为了克服 HTTP 对于受限环境的劣势,CoAP 既考虑到数据报长度的最优化,又考虑到提供可靠通信。
CoAP协议具有以下特点:
(1)消息模型,以消息为数据通信载体,通过交换网络消息来实现设备间数据通信;
(2)对云端设备资源操作都是通过请求与响应机制来完成,类似 HTTP,设备端可通过4个请求方法(GET, PUT, POST, DELETE)对服务器端资源进行操作;
(3)协议包轻量级,最小长度仅为 4B;
(4)支持可靠传输,通过确认和数据重传确保数据可靠到达;
(5)支持IP多播, 即可以同时向多个设备发送请求;
(6)非长连接通信,适用于低功耗物联网场景。
1、CoAp 协议栈
CoAP 协议栈如图下图所示,CoAP 由 UDP 作为承载,遵循 UDP 基本的协议报文格式,UDP 数据内容部分按照 CoAP 协议报文格式进行写入传输。
1.1、 CoAP 资源请求/响应模型
Requests:请求方法与 HTTP 协议类似,分别为: GET, PUT, POST和 DELETE。
Responses:响应内容也与HTTP协议类似,主要有以下3类:
(1)Success 2.xx 代表客户端请求被成功接收并被成功处理;
(2)Client Error 4.xx 代表客户端请求有错误,比如参数错误等;
(3)Server Error 5.xx 代表服务器在执行客户端请求时出错。
1.2、 CoAP 消息报文定义
如下图所示为 CoAP 消息报文示意图,CoAP 消息报文是通过在 UDP 上传输消息完成,各部分说明如下:
- CoAP消息报文头部(Header)
头部固定为4个Bytes,包含版本号(Ver)、报文类型(T)、CoAP标识符长度(TKL)、功能码/响应码(Code)以及报文编号(Message ID)。各部分说明如下:
Ver:版本号占2位,取值为01B,用于指示CoAP协议的版本号。
T:CoAP协议定了4种不同形式的报文,CON报文,NON报文,ACK报文和RST报文。
TKL:CoAP协议中具有两种功能相似的标识符,一种为Message ID(消息编号),一种为Token(标识符)。其中每个报文均包含消息编号,但是标识符对于报文来说是非必须的。
Code:Code在CoAP请求报文和响应报文中具有不同的表现形式,Code占一个字节,它被分成了两部分,前3位一部分,后5位一部分,为了方便描述它被写成了c.dd结构。其中0.XX表示CoAP请求的某种方法,而2.XX、4.XX或5.XX则表示CoAP响应的某种具体表现。
Message ID:消息编号。
- Token(可选)
标识符具体内容,通过TKL指定Token长度。通过token,客户端收到响应后,取出Token,就可以知道该响应是针对之前哪个请求回复的。
(3)Option(可选,0个或者多个)
请求消息 与回应消息都可以0~多个options。 主要用于描述请求或者响应对应的各个属性,类似参数或者特征描述。
(4)1111 1111
CoAP报文和具体负载之间的分隔符。
- Payload
实际携带数据内容, 若有携带数据, 前面加payload 标志 OxFF。
2、块传输
CoAP 协议的特点是传输的内容小巧精简,但是在某些情况下不得不传输较大的数据。在这种情况下可以使用 CoAP 协议中的选项设定分块传输的大小,服务器和客户端即可完成分片和组装。扩展的块传输协议在 COAP 基础协议上增加了 3 个 options, 2 个 response codes 用于块传输大小协商及控制。当请求消息或者响应消息里面有出息block1/block2 option时,代表这是块传输通信。需要根据 option block 里面M标识,决定是否继续进行块传输。
2.1、新增option说明
新增加的 3 个 options 如表7-2所示:
Number | Name | Reference |
23 | Block2 | RFC 7959 |
27 | Block1 | RFC 7959 |
28 | Size2 | RFC 7959 |
Option Block2:主要用于服务器端响应时,分块传输, 比如设备端发起资源发现时,由于服务器上资源较多,就要启动分块传输。
Option Block1:主要用于客户端发出请求时,分块传输,比如需要上传一个大的数据包到服务器上。
Option Size2: 代表服务器端响应资源总的大小。
Option Block 由三部分组成:
(1)NUM:占用0~3Byte,代表当前块编号,以0开始, 如我们要传10个数据块,则数据块的编号为0~9。
(2)M:占用1bit, 如果设置为1代表还有剩下数据块未传输。如果设置为0,代表数据块都已传输出去。
(3)SZX:占用2bit,取值范围0~6,对应每个block 大小为2(SZX+4),即范围为(16 ~ 1024)Bytes。
7.2.2.2 新增response code说明
新增加的2个response codes如表7-3所示:
Code | Description | Reference |
2.31 | Continue | RFC 7959 |
4.08 | Request Entity Incomplete | RFC 7959 |
3、安全传输
COAP 使用 DTLS 来做安全传输层,该层运行于 UDP 之上,如下图所示:
当前考虑使用 DTLS 时,需要考虑设备终端资源受限情况,有些资源有限设备无法运行 DTLS 安全加密算法。做安全加密,需要根据应用场景需要,对应只上报数据,且数据敏感度不高场景,可以不考虑加入安全层。
最后
以上就是饱满小丸子为你收集整理的【IoT】基于NB-IoT的CoAP协议浅析【IoT】基于NB-IoT的CoAP协议浅析的全部内容,希望文章能够帮你解决【IoT】基于NB-IoT的CoAP协议浅析【IoT】基于NB-IoT的CoAP协议浅析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复