CoAP学习笔记(1)CoAP报文结构

CoAP报文结构

CoAP基于UDP的应用层协议,报文结构如下
在这里插入图片描述

  • Ver 版本号占2bit,固定为01
  • T 报文类型,占2bit,CoAP中有4种报文类型,如下
类型描述T值
CON报文Confirmable,需要被确认的报文T=00
NON报文Non-Confirmable,不需要被确认的报文T=01
ACK报文Acknowledgement,应答报文T=10
Reset报文复位报文T=11
  • TKL标签长度指示,占4bit用于指示后面的Token占几个字节,可以取值为0000、0001、0010、0100,分贝表示没有Token,Token占1字节、Token占2字节、Token占4字节

  • Code,占8bit,其中前3bit为Class部分,后5bit为Detail部分,采用c.dd形式来描述。在CoAP请求报文种Code表示请求方法,在CoAP响应报文种Code表示响应状态。

Code值CoAP请求方法
0.01GET方法
0.02POST方法
0.03PUT方法
0.04DELETE方法
Code值CoAP响应状态
0.00空报文
2.xx正确响应
4.xx表示客户端错误
5.xx表示服务器错误
  • Messages ID,报文序号,占2字节,大段格式,一组对应的CoAP请求和响应使用相同的报文序号
  • Token,标签,长度由TKL标签长度指示确定,与是资源的"身份证",CoAP有3种不同的请求/响应模式:携带模式、分离模式,非确认模式,Token在分离模式起重要作用,携带模式可以忽略。
  • Options,选项,后续细讲
  • 分隔符 0xFF,占1字节
  • Payload ,负载
T 报文类型

CON:请求必须要接收者发送ACK或者RST确认,如果发送者规定时间内内有收到ACK或者RST,则会重发。

NON:不要求接收者确认。

ACK:用于确认Messages ID一致的CON报文,ACK的payload可能为空(在分离模式)

RST:用于对应无法处理CON的报文,Messages ID需要与CON一致,且payload一定为空。

请求/响应模式
  • 携带模式
    ACK的payload部分包含响应负载,最少2包得到数据
    在这里插入图片描述

  • 分离模式
    客户端同样发CON请求,服务器立刻会意ACK,但是ACK种没有payload,而是过段时间后服务器再回应CON,其中这个CON的Token要与客户端之前发送CON的Token一致,该CON还包含payload,客户端收到后用ACK回应。至少需要4个报文。
    在这里插入图片描述

  • 非确认模式
    这种客户端发送NON报文,不需要服务器回应
    在这里插入图片描述

CoAP重传机制

重传涉及3个参数

  • ACK_TIMEOUT 响应等待超时时间,典型值 2秒
  • ACK_RANDOM_FACTOR 随机系数 ,典型值1.5
  • MAX_RETRANSMIT 最大重传次数,典型值 4
    如果客户端在首次发送CON报文后,在ACK_TIMEOUT到ACK_TIMEOUT*ACK_RANDOM_FACTOR之间还没有收到ACK、或RST报文,则重发CON报文,下一次的超时等待时间计算中,ACK_RANDOM_FACTOR时上次的2倍。一个报文最多会被发1+MAX_RETRANSMIT 次
CoAP方法
  • GET
    查询资源
  • POST
    要求请求中的资源描述内容被服务器处理,比如创建(返回2.01 create)、修改(返回2.04 changed)、删除(返回2.02 delete)
  • PUT
    要求服务器根据请求中的URI和payload更新服务器指定资源,比如创建(返回2.01 create)、修改(返回2.04 changed)
  • DELETE
    要求根据请求中的URI删除服务器指定资源内容,返回删除(返回2.02 delete)
选项Options

选项Options由选项偏移量(Option Delete)、选项长度(Option Length)和选项值(Option Value)组成。CoAP不是直接确定选项值,而是用累加选项偏移量(Option Delete)的方式确定。
在这里插入图片描述

  • 选项偏移量(Option Delete)
    4bit无符号整数,0~12指示选项偏移量,13、14、15特殊意义
    13:Option Delete占8位无符号整数,此时选项偏移量为 该8位无符号整数+13
    14:Option Delete占16位无符号整数,此时选项偏移量为 该16位无符号整数+269
    15,保留

  • 选项长度(Option Length)
    4bit无符号整数,0~12指示选项偏移量,13、14、15特殊意义
    13:Option Length占8位无符号整数,此时选项偏移量为 该8位无符号整数+13
    14:Option Length占16位无符号整数,此时选项偏移量为 该16位无符号整数+269
    15,保留

  • 选项定义
    上面的选项偏移量(Option Delete)累加起来查这张表就时对应的选项名称
    在这里插入图片描述

1.URI选项
比如coap://wsncoap.org:5683/device/1234CDEF?limit=10&offest=20
Uri-Host 定义服务器域名,上面示例Uri-Host就是wsncoap.org
Uri-Port 定义端口,上面示例Uri-Port就是5683
Uri-Path定义路径,上面例子是2个Uri-Path,分别为device1234cdefUri-Path不会出现/这类分隔符
Uri-Query定义参数,上面例子是2个Uri-Query,分别为limit=10offest=20,Uri-Query不会出现? &这类分隔符
下面是
coap://wsncoap.org:5683/device/1234CDEF?limit=10的例子
在这里插入图片描述

下面是选项长度扩展例子Uri-Path为16字节
在这里插入图片描述

2.Content-Format选项
Content-Format选项指示CoAP负载payload媒体类型,用无符号整数表示,如二进制负载编号42,json负载编号50
3.Accept选项
Accept选项表示客户端期望接受到的payload媒体类型,编号定义与Content-Format选项编号定义相同
在这里插入图片描述
下面是媒体类型编号

媒体类型编号
text/plain0
application/link-format40
application/xml41
application/octet-stream42
application/exi47
application/json50
application/cbor60

4.Etag选项
Etag选项作为标记实体资源的 "新旧"程度,当客户端的Etag和服务器中实体资源Etag一致时,服务器会回应2.03Valid,无响应内容。如下
在这里插入图片描述
5.If-Match选项
If-Match选项是CoAP条件请求,一般用于更新服务器资源,和Etag组合使用,当服务器收到待更新资源的Etag和If-Match的Etag相同则更新资源,返回2.04(changed),否则不更新,返回4.12(Precondition Failed),如下图
在这里插入图片描述
6.If-None-Match选项
If-None-Match选项,一般用于在服务器上创建新资源
在这里插入图片描述

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值