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

CoAP学习--通讯流程_第1张图片上面以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学习--通讯流程_第2张图片
对于物联网场景,服务器会主动获取设备资源或者下发资源到设备,这时设备充当coap的server角色;设备也会主动上报资源或者注册到服务器,这时设备充当coap的client角色。

订阅与发布

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

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

模型框架

CoAP学习--通讯流程_第3张图片关键概念
主题Subject: 代表coap的某个资源
观察者Observer:代表对某个coap资源感兴趣的客户端
登记Registration: 观察者需要向服务器登记感兴趣的主题。
通知Notification:当观察者感兴趣的主题发生内容变化时,服务器主动通知到观察者。

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

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

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

CoAP学习--通讯流程_第4张图片
客户端向服务器端登记感兴趣的主题 /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学习--通讯流程_第5张图片

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

安全

COAP使用DTLS来做安全传输层,该层运行于UDP之上.
CoAP学习--通讯流程_第6张图片
当前考虑使用DTLS时,需要考虑设备终端资源受限情况, 有些资源有限设备无法运行DTLS安全加密算法。

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

你可能感兴趣的:(CoAP,网络协议)