coAP协议的标准定义
NBIoT 中推荐了 CoAP (
Constrained Application Protocol)协议. 类似于以前的 MQTT协议.
-
参考 https://baijiahao.baidu.com/s?id=1609055547851599818&wfr=spider&for=pc
Coap是一种在物联网世界的类web协议,它的详细规范定义在 RFC 7252。COAP名字翻译来就是“受限应用协议”,顾名思义,使用在资源受限的物联网设备上。物联网设备的ram,rom都通常非常小,运行TCP和HTTP是不可以接受的。
COAP协议网络传输层由TCP改为UDP。
它基于REST,server的资源地址和互联网一样也有类似url的格式,客户端同样有POST,GET,PUT,DELETE方法来访问server,对HTTP做了简化
COAP是二进制格式的,HTTP是文本格式的,COAP比HTTP更加紧凑
轻量化,COAP最小长度仅仅4B,一个HTTP的头都几十个B了
支持可靠传输,数据重传,块传输。 确保数据可靠到达。
支持IP多播, 即可以同时向多个设备发送请求。
非长连接通信,适用于低功耗物联网场景。
COAP协议消息类型
COAP协议有4种消息类型
1. CON—— 需要被确认的请求,如果CON请求被发送,那么对方必须做出响应。这有点像TCP,对方必须给确认收到消息,用以可靠消息传输。
2.NON—— 不需要被确认的请求,如果NON请求被发送,那么对方不必做出回应。这适用于消息会重复频繁的发送,丢包不影响正常操作。这个和UDP很像。用以不可靠消息传输
3. ACK —— 应答消息,对应的是CON消息的应答。
4. RST —— 复位消息,可靠传输时候接收的消息不认识或错误时,不能回ACK消息,必须回RST消息。
COAP消息格式
点击(此处)折叠或打开
-
消息头(HEAD)
-
第一行是消息头,必须有,固定4个byte。
-
Ver : 2bit, 版本信息,当前是必须写0x01。
-
T: 2bit, 消息类型,包括 CON, NON. ACK, RST这4种。
-
TKL: 4bit,token长度, 当前支持0~8B长度,其他长度保留将来扩展用。
-
Code:8bit,分成前3bit(0~7)和后5bit(0~31),前3bit代表类型。 0代表空消息或者请求码, 2开头代表响应码,取值如下:
-
1 0.00 Indicates an Empty message
-
2 0.01-0.31 Indicates a request.
-
3 1.00-1.31 Reserved
-
4 2.00-5.31 Indicates a response.
-
5 6.00-7.31 Reserved
-
Message ID:16bit, 代表消息MID,每个消息都有一个ID ,重发的消息MID不变
-
-
token(可选)用于将响应与请求匹配。
-
token值为0到8字节的序列。 ( 每条消息必须带有一个标记, 即使它的长度为零)。 每个请求都带有一个客户端生成的token, 服务器在任何结果响应中都必须对其进行回应。token类似消息ID,用以标记消息的唯一性。token还是消息安全性的一个设置,使用全8字节的随机数,使伪造的报文无法获得验证通过。
-
-
option(可选,0个或者多个)
-
请求消息 与回应消息都可以0~多个options。 主要用于描述请求或者响应对应的各个属性,类似参数或者特征描述,比如是否用到代理服务器,目的主机的端口等。
-
-
payload(可选)
-
实际携带数据内容, 若有, 前面加payload标识符“0xFF”,如果没有payload标识符,那么就代表这是一个0长度的payload。如果存在payload标识符但其后跟随的是0长度的payload,那么必须当作消息格式错误处理
COAP的请求码(requests)和响应码(responses)
-
【0.01】GET方法——用于获得某资源
-
【0.02】POST方法——用于创建某资源
-
【0.03】PUT方法——用于更新某资源
-
【0.04】DELETE方法——用于删除某资源
-
-
CoAP的URL
-
coap的url和HTTP的有很相似的地方,开头是“coap”对应“http”或者“coaps”对应“https”。
-
-
HTTP的默认端口是tcp 80,coap的默认端口是udp 5683(coaps是5684)。
-
-
URL里面的“/”“&”“.”
-
-
下面三个URL的地址是一样的。访问example.com这个域名,端口是udp 5683,访问的资源地址是~sensors/temp.xml。
-
coap://example.com:5683/~sensors/temp.xml
-
coap://EXAMPLE.com/%7Esensors/temp.xml
-
coap://EXAMPLE.com:/%7esensors/temp.xml
-
COAP的安全性
-
-
COAP的安全性是用DTLS加密实现的。DTLS的实现需要的资源和带宽较多,如果是资源非常少的终端和极有限的带宽下可能会跑不起来。DTLS仅仅在单播情况下适用。
用华为方案的NB-IoT难免要进行数据通信,经常会看到各类AT文档中首推的CoAP协议方式。CoAP这几年随着物联网的浪潮也火了起来,和MQTT有并驾齐驱的势头,在一些物联网云平台中都有运用。
华为 NB-IoT CoAP总体方案拓扑
华为提供NB-IoT端到端解决方案的支持,提供多种开放能力供合作伙伴快速集成应用。提供海思的NB-IoT芯片,基站网络和Ocean Connect连接管理平台。开发者可以根据芯片/模组开发手册进行终端的开发,基于IoT平台进行APP Server开发。
-
Device:NB-IoT终端(如智能水表、智能气表等)通过空口连接到eNodeB。
-
eNodeB:主要承担空口接入处理和小区管理等相关功能,通过S1-lite接口与IoT核心网进行连接,将非接入层数据转发给高层网元处理。
-
IoT Core:承担与终端非接入层交互的功能,将IoT业务相关数据转发到IoT平台进行处理。
-
IoT Platform:IoT联接管理平台汇聚从各种接入网得到的IoT数据,根据不同类型转发给相应的业务应用进行处理。
-
APP Server:是IoT数据的最终汇聚点,根据客户的需求进行数据处理等操作。
从总体拓扑中可以看到,华为在这里放置了一个CoAP Server,所有使用CoAP的模组,都得先连接到华为这边。
当然,有办法绕过这个限制,那就是不使用模组内置的CoAP相关的AT指令。自己在UDP基础上做这个协议。
华为 NB-IoT CoAP 相关指令
服务器配置
查看《Quectel_BC95_AT_Commands_Manual》
5.9. AT+NCDP Configure and Query CDP Server Settings
The command is used to set and query the server IP address and port for the CDP server. It is used when
there is a HiSilicon CDP or Huawei IoT platform acting as gateway to network server applications. Please
refer to Chapter 7 for possible <err> values. CoAp要实现的话,是使用 海思CDP 或者 华为IoT 平台。
接收数据
方式一,主动查询方式
5.2. AT+NMGR Get a Message
Receive a message from the CDP server. The command returns the oldest buffered message and deletes from the buffer. If there are no messages
then no command response will be given. If new message indications (AT+NNMI) are turned on then
received messages will not be available via this command.
方式二,被动异步通知方式,从CDP平台上推送数据下来。
5.3. AT+NNMI New Message Indications
The command sets or gets new message indications that are sent. New message indications can be sent
when a downstream message is received by the terminal from the CDP server. Please refer to Chapter 7 for possible <err> values. When new message indications and messages are enabled (AT+NNMI=1), all currently buffered
messages will be returned in the format of “+NNMI:<length>,<data>”. For example: “+NNMI:5,48656C6C6F”.
阅读(1757) | 评论(0) | 转发(0) |