本片文章通过协议的产生背景、应用场景、与MQTT对比三方面来阐述CoAP协议。
完成该文的阅读能初步了解CoAP协议是什么、解决什么。
CoAP协议产生的背景以及意义
想要弄明白CoAP协议需要对MQTT有一定的了解,物联网的应用层面MQTT是一个绕不开的话题。
而且在物联网发展的当下来说,大量的工作还是在MQTT相关的设备方面。
那为什么还会出现CoAP呢?
答:因为部分的环境信息对于MQTT来说就有些浪费资源,所以为了解决这类问题的解决物联网的方向会出现一些更简单更加容易操作的芯片,专门用于环境的采集。
这样一是节省资源开销、在一个对于设备来说也可以在硬件方面节约资金。
于是CoAP出现了!
在农业物联网的应用中类似传感器相关的设备想要把数据发送到云端还是基于的CoAP协议来实现,
MQTT是应用层的协议,它的传输层是TCP,是可靠连接并且是属于长连接的。
CoAP协议如果要保持长连接需要设备保持供电的状态,
为了解决这种情况CoAP协议的传输层是UDP,但是UDP属于不可靠传输,所以在应用层进行了改造,这里简单理解为UDP不可靠的性被应用层解决了。
固CoAP协议也属于可靠连接协议
MQTT与CoAP对比
MQTT:上行数据可下行数据量相对大一些
MQTT:相对来说对设备的电池容量也要比CoAP大一些,一些设备的内部多加一些电池的目的就是为了保持长连接,及时设备休眠也可以重新唤醒连接。
CoAP:因为传输层是用的UDP,设备唤醒之后会直接发送数据,发送后可以直接休眠。比MQTT协议更加省电
CoAP在资源量特别小的时候也可以使用
CoAP的主要应用场景
只进行数据的上报不进行控制的下发,如:水表、电表、烟雾报警器等
CoAP协议的官方报文格式(了解)
Ver => 版本号,可以自己通过版本号判断属于什么设备
T => type
TKL => COAP标识符长度。COAP协议中具有两种功能相似的标识符,一种为MessageID(报文编号),一种为Token(标识符)。其中每个报文均包含消息编号,但是标识符对于报文来说是非必须的。
Message ID => 一般用来定位问题
Code => 操作码/功能码/响应码。Code在COAP请求报文和响应报文中具有不同的表现形式,Code占一个字节,它被分成了两部分,前3位一部分,后5位一部分,为了方便描述它被写成了c.dd结构。其中0.XX表示COAP请求的某种方法,而2.X、4.X或5.X则表示CoAP响应的某种具体表现。
Token => 标识符具体内容。
Option => 报文选项,通过报文选项可设定COAP主机,COAP URI,COAP请求参数和负载媒体类型等等。