CoAP学习--通讯流程

CoAP基础学习

上一篇我们介绍CoAP的协议详解,下面我们介绍CoAP的通讯流程

CoAP跟HTTP非常类似,主要是以下几点:

1.coap的url和HTTP的有很相似的地方,开头是“coap”对应“http”或者“coaps”对应“https”。

2.HTTP的默认端口是tcp 80,coap的默认端口是udp 5683(coaps是5684)。

3.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的通讯过程

在这里插入图片描述上面以get流程为例子,有没有发现,其实跟http相类似。

1.Client发起请求,类型是CON,0.01代表GET请求,MID是请求消息ID,Uri-Path:temperature代表请求温度。例如
coap://example.com:5683/~sensors/temperature

2.Server收到请求后,就会返回应答2.05,MID保持不变,并且返回具体参数payload温度22.3 C。

双向收发

Coap虽然定义了client和server角色,如下图所示,每次数据传输都是由client段发起资源请求,server端进行响应。但在实际操作中,client和server的角色并不是固定的,即设备和服务器都有可能充当client或者server的角色,两者都存在对方可能要访问的资源,这是和http协议最大的不同,也是coap协议解决物联网场景问题的关键所在。
从http协议看coap协议解决物联网问题

在这里插入图片描述
对于物联网场景,服务器会主动获取设备资源或者下发资源到设备,这时设备充当coap的server角色;设备也会主动上报资源或者注册到服务器,这时设备充当coap的client角色。

订阅与发布

MQTT协议是基于订阅与发布模型的,coap通过扩展协议方式也简单的实现了订阅与发布模型。

当一个客户端需要定期去查询服务器端某个资源的最新状态时,订阅与发布模型就非常有用,不用这个模型,客户端就要周期的不断发送请求到服务器端。

模型框架

在这里插入图片描述关键概念
主题Subject: 代表coap的某个资源
观察者Observer:代表对某个coap资源感兴趣的客户端
登记Registration: 观察者需要向服务器登记感兴趣的主题。
通知Notification:当观察者感兴趣的主题发生内容变化时,服务器主动通知到观察者。

观察协议在COAP基础协议上增加了1个Observe option, 其值为整数,通过该options来实现订阅与发布模型管理

在get请求消息里面
oberser value 为 0: 代表向服务器端订阅一个主题。
oberser value 为 1: 代表向服务器端移除一个已订阅主题。

在notification消息里面
oberser value 代表 主题发生变化时,检测到顺序,以便客户端可以知道状态变化的先后。

在这里插入图片描述
客户端向服务器端登记感兴趣的主题 /temperature
当temperature发生状态改变时,服务器端主动通知到客户端。
客户端根据token,就可以与之前订阅主题关联起来,以此确定是哪个主题订阅的。

一个CoAP Client可以分次向CoAP server订阅多个资源主题。 一个CoAP server上的主题可以被多个观察者(CoAP Client)订阅。 这样就通过了CoAP server实现了CoAP Client之间直接数据转发通信。

可以通过灵活设计服务器上的资源链接,来实现对某个主题的条件订阅(类似触发器或者阀值等)。
比如订阅主题是:

coap://server/temperature/critical?above=42

当温度超过42,CoAP Server需要发送通知。

寻址

物联网设备一般位于局域网中,IP地址为局域网IP地址;服务器一般位于公网中,ip地址为公网IP地址,因此服务器无法直接访问设备,必须在设备主动访问服务器之后,服务器获取到设备IP地址后。因此在物联网应用场景中,第一条数据一定是设备主动发送给服务器的,比如中移onenet平台,设备首先要发注册消息,注册到平台;比如联通ayla平台,设备首先要发送oberve消息订阅某一资源,ayla平台才会下发数据到设备。

在这里插入图片描述

因此物联网平台的协议定义中,都会首先有一条设备主动发送数据的协议要求,协议上是描述设备的需求,根本问题是解决设备寻址。

安全

COAP使用DTLS来做安全传输层,该层运行于UDP之上.
在这里插入图片描述
当前考虑使用DTLS时,需要考虑设备终端资源受限情况, 有些资源有限设备无法运行DTLS安全加密算法。

做安全加密,需要根据应用场景需要,对应只上报数据,且数据敏感度不高场景,可以不考虑加入安全层。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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 平台,如果在上面操作 过,可忽略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值