题目

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

CoAP协议报文结构图

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

我们先看第一个字节的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

报文格式_报文_报文解析

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

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

报文解析_报文格式_报文

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

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

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

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

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

限 时 特 惠: 本站每日持续更新海量各大内部创业教程,加站长微信免费获取积分,会员只需38元,全站资源免费下载 点击查看详情
站 长 微 信: thumbxmw