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.01 GET方法
0.02 POST方法
0.03 PUT方法
0.04 DELETE方法
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/plain 0
application/link-format 40
application/xml 41
application/octet-stream 42
application/exi 47
application/json 50
application/cbor 60

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选项,一般用于在服务器上创建新资源

CoAP学习笔记(1)CoAP报文结构相关推荐

  1. CoAP学习笔记——服务器端繁忙时的处理请求流程

    CoAP学习笔记--服务器端繁忙时的处理请求流程 CoAP是一个简单的请求响应机制,对于一个给定的请求便有一个相应的响应. 很多时候,如果服务器不能立即响应一个CON请求,服务器只能返回一个空应答,这 ...

  2. 《Go语言圣经》学习笔记 第二章 程序结构

    Go语言圣经学习笔记 第二章 程序结构 目录 命名 声明 变量 赋值 类型 包和文件 作用域 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语言小白学习笔记,几乎是书上的内 ...

  3. SQL学习笔记 | 02 SQL语句结构

    SQL学习笔记 | 02 SQL语句结构 一.表的导入 1.表的命名 2.导入步骤 3.导入需注意 二.标准SQL语法 1.语句结构 2.数据表的其他关键词 3.SQL语句的分类 一.表的导入 1.表 ...

  4. CoAP学习笔记——CoAP格式详解

    0 前言 CoAP是受限制的应用协议(Constrained Application Protocol)的代名词.在当前由PC机组成的世界,信息交换是通过TCP和应用层协议HTTP实现的.但是对于小型 ...

  5. CoAP学习笔记——CoAP资源发现

    [原文链接] (2015年4月15日,ct表述错误,待修改) 更多CoAP文章请参考博文索引--[物联网学习笔记--索引博文] CoAP协议专门为M2M通信设计(设备间通信),在设备通信过程中很少会有 ...

  6. 2022软考网络工程师学习笔记——计算机组成与结构(Day2)

    前言 本篇主要讲解我在 计算机组成与结构 中的所学所悟, 旨在分享学习笔记, 交流学习经验.

  7. LWIP学习笔记---网际控制报文协议ICMP

    网际控制报文协议 背景 相关概念 报文类型 报文格式 差错报文 查询报文 代码实现 数据结构 发送差错报文代码实现 回送报文请求 背景 IP协议并不完美,在传递数据时提供的是一种无连接的不可靠数据报交 ...

  8. 深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)...

    本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...

  9. 深度学习笔记第三门课 结构化机器学习项目 第二周 机器学习(ML)策略(2)...

    本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...

最新文章

  1. Runnable接口和贪心算法
  2. 亿级用户基于微服务的互联网系统稳定性~
  3. 年入50万,程序员众生相
  4. spring源码分析之spring-core-io
  5. my paper in EI
  6. 联想天工 802.1x认证 主程序
  7. Silverlight/Windows8/WPF/WP7/HTML5周学习导读(7月30日-8月5日)
  8. 【项目经验】之线程基本知识
  9. html中span不显示背景
  10. LeetCode – Refresh – Exceel Sheet Column Number
  11. View如何设置16进制颜色值
  12. 计算机设备硬件设备,计算机硬件设备有哪些
  13. 十六进制编辑器--ImHex
  14. qcc300x笔记之固件升级(六)
  15. Oracle中的函数(详细!!!)
  16. 防御windows系统激活工具的后门入侵
  17. 高中数学必修一,集合知识概念运算归纳总结
  18. JS加密小结---银行卡号,手机号,姓名加密显示星号
  19. Dojo 1.6 官方教程:Dojo中的事件
  20. 【入门】算法初步1 排序

热门文章

  1. 【LC刷题笔记】第四天:23+26+33(1-16)
  2. 时间合并、周一至周五
  3. python中图例legend标签内容_matplotlib设置legend图例代码示例
  4. 京东商城之手机购买推荐
  5. 正负用c语言表示,用C表示负数?
  6. 电子计算机制作探测,金属探测器DIY,你真正了解过多少?
  7. 函数中参数的调用*args **kwargs
  8. mysql事务的四个特点和实现原理
  9. bool-布尔型变量
  10. 【好文推荐】Activity之间的数据传递方法汇总