03.01 阿里云物联网平台使用心得(37)详解CoAP协议报文结构


阿里云物联网平台使用心得(37)详解CoAP协议报文结构

题目

大家好,超子又和大家见面了,超子我能力有限,水平不高,有什么错误的地方,欢迎板砖。超子接下来先介绍一下CoAP协议中的报文结构,只有了解了报文的基本结构之后,我们才能具体的构建对接阿里云物联网平台是的认证还有上传数据时需要的报文。

阿里云物联网平台使用心得(37)详解CoAP协议报文结构

CoAP协议报文结构图

CoAP协议报文结构的概览图,如上图所示,注意一行是4个字节,每个字节的Bit7在左,Bit0在右。

阿里云物联网平台使用心得(37)详解CoAP协议报文结构

我们先看第一个字节的Bit7~4。Ver是版本号,当前的版本要求Bit7是0 ,Bit6是1。再看T,其代表报文类型,有四种选项,分别是CON报文,NON报文,ACK报文和RST报文。

CON报文:如果我发给你一个CON报文,你必须回复一个报文,不管正确与否,总之不能不吭声。

NON报文:如果我发给你一个NON报文,你不必做出回复 。

ACK报文:针对CON的回复报文,你发我一个CON报文,正确的情况下,我得回你一个ACK报文。

RST报文:假如你发的CON报文错误,我不能回你ACK报文,我得回你RST报文。

不同的报文Bit5和Bit4的值如下所示:

CON报文: Bit5是0, Bit4是0

NON报文: Bit5是0, Bit4是1

ACK报文 :Bit5是1, Bit4是0

RST 报文: Bit5是1, Bit4是1

阿里云物联网平台使用心得(37)详解CoAP协议报文结构

再看Message ID,是2个字节的报文编号,这个作用和MQTT中的报文标识符类似。假设我连着上传3次数据,1个出错,2个正确,如果Message ID一样,阿里云回复的时候,我们无法区分出谁正确谁失败,因为我们发送的顺序和阿里云回复的顺序没关系,所以需要用Message ID来区分。其占用2个字节,我们可以从0x0001开始,每发一次报文,累加1即可。

阿里云物联网平台使用心得(37)详解CoAP协议报文结构

再看TKL和Token,TKL用于指定Token占用多少字节,目前支持的范围是0~8个字节。Token类似于Message ID,发送和回复的双方要一致,Message ID一般是累加的,用一个之后加1。Token的一个用法是增加安全性,比如使用最多的8字节随机Token,有助于提高安全性,防止伪造报文。但是阿里云使用了对称加密方式,提高对数据的安全保护,所以就不使用这个Token了。如此一来TKL是0,表示没有Token,所以Bit3/2/1/0都是0。

阿里云物联网平台使用心得(37)详解CoAP协议报文结构

Code是功能码,占用1个字节,共有4种,GET、POST、PUT和DELETE。和HTTP的差不多。

GET:获取数据,取值0x01。

POST:上传数据,取值0x02。

PUT:更新数据,取值0x03。

DELETE:删除数据,取值0x04。

和HTTP协议一样,阿里云的CoAP只支持POST。

阿里云物联网平台使用心得(37)详解CoAP协议报文结构

Payload是要上传的数据,认证的时候要传三元组的信息,传数据的时候就是温湿度值,当然都需要经过加密。注意Payload前的7个都是1的Bit位,换成16进制就是0xFF,这个是分割符,将数据Payload同前面的报文内容分开,类似于HTTP协议中header和body之间的一个空行。

阿里云物联网平台使用心得(37)详解CoAP协议报文结构

Options包含许多参数,类似于HTTP的头部header,比如设置HOST,PATH,URL,端口号等等,这个就要根据阿里云的要求来设置了,超子今天就先总体的介绍下CoAP协议的报文结构,掌握了报文的结构之后,我们在一起构建具体的报文。


分享到:


相關文章: