【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类:

1Success 2.xx 代表客户端请求被成功接收并被成功处理;

2Client Error 4.xx 代表客户端请求有错误,比如参数错误等;

3Server Error 5.xx 代表服务器在执行客户端请求时出错。

1.2、 CoAP 消息报文定义

如下图所示为 CoAP 消息报文示意图,CoAP 消息报文是通过在 UDP 上传输消息完成,各部分说明如下:

  1. CoAP消息报文头部(Header)

头部固定为4个Bytes,包含版本号(Ver)、报文类型(T)、CoAP标识符长度(TKL)、功能码/响应码(Code)以及报文编号(Message ID)。各部分说明如下:

Ver版本号占2位,取值为01B,用于指示CoAP协议的版本号。

T:CoAP协议定了4种不同形式的报文,CON报文,NON报文,ACK报文和RST报文。

TKLCoAP协议中具有两种功能相似的标识符,一种为Message ID(消息编号),一种为Token(标识符)。其中每个报文均包含消息编号,但是标识符对于报文来说是非必须的。

CodeCodeCoAP请求报文和响应报文中具有不同的表现形式,Code占一个字节,它被分成了两部分,前3位一部分,后5位一部分,为了方便描述它被写成了c.dd结构。其中0.XX表示CoAP请求的某种方法,而2.XX4.XX5.XX则表示CoAP响应的某种具体表现。

Message ID:消息编号。

  1. Token(可选)

标识符具体内容,通过TKL指定Token长度。通过token,客户端收到响应后,取出Token,就可以知道该响应是针对之前哪个请求回复的。

3Option(可选,0个或者多个)

请求消息 与回应消息都可以0~多个options 主要用于描述请求或者响应对应的各个属性,类似参数或者特征描述。

41111 1111

CoAP报文和具体负载之间的分隔符。

  1. Payload

实际携带数据内容, 若有携带数据, 前面加payload 标志 OxFF

2、块传输

CoAP 协议的特点是传输的内容小巧精简,但是在某些情况下不得不传输较大的数据。在这种情况下可以使用 CoAP 协议中的选项设定分块传输的大小,服务器和客户端即可完成分片和组装。扩展的块传输协议在 COAP 基础协议上增加了 个 options个 response codes 用于块传输大小协商及控制。当请求消息或者响应消息里面有出息 block1/block2 option时,代表这是块传输通信。需要根据 option block 里面M标识,决定是否继续进行块传输。

2.1、新增option说明

新增加的 个 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 安全加密算法。做安全加密,需要根据应用场景需要,对应只上报数据,且数据敏感度不高场景,可以不考虑加入安全层。

  • 9
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
NB-IoT现阶段访问一个服务器只能通过IP地址加端口的方式,省去了DNS解析,如果产品以后的IP变化或者改变了服务端的IP地址,就需要一个DNS解析的功能。 通过DNS解析某个域名的IP地址,获取到IP地址后再进行通信。 如果NB-IoT模块只能绑定一个IP,则可以通过这个IP先获取其他IP列表,然后统一经过这个IP进行转发。 参考: 1.1.2 NB卡准备 模组使用的SIM卡为中国电信物联网专用NB卡,如下图正面(留意NB字样,无此字样的均为不合法的NB卡): 背面(留意其ICCID号,在让运营商开放IP白名单时可能需要此号码,相当于手机卡的手机号): 重要:收到卡后,需要致电背面的客服电话, 使其将您自己的IP地址加入访问白名单,此一步完成后,方能进行下面的步骤,切记切记 。 如何判定服务器IP已被加入访问白名单,使用如下两种方式: 1. AT+NPING 指令,通过PING自己的服务器地址,如返回ERROR,则多半(尚需继续排除防火墙因素)未就绪; 2. UDP通讯,如能与自己的服务器直接连接UDP通讯,那可以证明一定就绪; 1.1.3 服务器准备  首先您需要有一个固定IP的公网服务器,由于目前BC95暂不支持域名解析,故必须使用IP地址配置方式。  服务器可以使用阿里云服务器,目前本CoAP端暂未开源,有Windows 32位、Windows 64位、Linux CentOS 6、CentOS 7的可执行文件,请暂时选择以上指定系统;  CoAP标准协议使用 UDP 5683 端口,当然您也可以自定义此端口,必须让防火墙放通UDP 的指定端口;  CoAP网关需要使用WEB方式进行设备管理、用户管理等,默认使用 TCP 8080 端口,同 理,防火墙必须放通此端口; 1.1.4 模组准备 推荐使用 串口调试助手 sscom 来调试NB模组,如下,首先将您的NB模组上电使其启动,使用AT指令能收到OK的回复,证明已启动完毕,按如下步骤进行: 基础配置 1. 配置 NCDP 服务器,使用的指令序列为 AT+CFUN=0 +NCDP=103.37.149.19,5683 AT+NRB 留意 IP 地址必须为您自己指定的IP地址,如果暂时没有,也可以用 如上 地址临时使用(但 WEB 设备管理地址也需换成这个IP),完成后重启了设备; 2. 等待设备附着网络后,使用 AT+NPING=103.37.149.19 尝试PING自己的服务器,当返回ERROR时,极有可能是 IP 白名单未成功配置的缘故; 3. 使用 AT+CGSN=1 查询设备 IMEI 号,并将设备的 IMEI 注册到 WEB 平台,如果在上面操作 过,可忽略。
基于NB-IoT(Narrowband Internet of Things)的智能门锁协议设计需要考虑以下要点: 1. NB-IoT通信模块:选择符合NB-IoT标准的通信模块,如Quectel BC66或华为的Boudica系列模块。这些模块提供了低功耗和长距离通信的能力,适合于智能门锁应用。 2. 安全性:确保通信过程中的数据安全性和隐私保护。使用加密算法和协议,如TLS(Transport Layer Security)或者DTLS(Datagram Transport Layer Security)来保护通信通道。同时,还需要设计合适的身份验证和访问控制机制,以确保只有授权用户可以访问门锁。 3. 电源管理:考虑门锁的电源管理,包括低功耗设计和有效的电池寿命。NB-IoT通信模块在待机模式下的功耗较低,但仍需要优化设计以延长电池寿命。 4. 远程控制:通过NB-IoT协议,实现远程控制门锁的功能。用户可以通过手机应用或者云平台发送指令来开锁或锁定门。同时,还可以实现远程监控门锁状态和接收报警信息等功能。 5. OTA(Over-The-Air)升级:通过NB-IoT网络,可以实现远程固件升级。这样可以方便地更新门锁的软件功能和安全补丁。 6. 与云平台的集成:将智能门锁与云平台集成,可以实现更多的功能,如远程控制、用户管理、统计分析等。通过云平台,用户可以方便地管理和监控多个门锁设备。 7. 兼容性:考虑与现有智能家居生态系统或者第三方平台的兼容性。这样可以提供更广泛的应用场景和更好的用户体验。 综上所述,基于NB-IoT的智能门锁协议设计需要综合考虑通信模块选择、安全性、电源管理、远程控制、OTA升级、云平台集成和兼容性等因素。希望这些信息对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

产品人卫朋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值