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.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,分别为device
和1234cdef
Uri-Path不会出现/
这类分隔符
Uri-Query定义参数,上面例子是2个Uri-Query,分别为limit=10
和offest=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报文结构相关推荐
- CoAP学习笔记——服务器端繁忙时的处理请求流程
CoAP学习笔记--服务器端繁忙时的处理请求流程 CoAP是一个简单的请求响应机制,对于一个给定的请求便有一个相应的响应. 很多时候,如果服务器不能立即响应一个CON请求,服务器只能返回一个空应答,这 ...
- 《Go语言圣经》学习笔记 第二章 程序结构
Go语言圣经学习笔记 第二章 程序结构 目录 命名 声明 变量 赋值 类型 包和文件 作用域 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语言小白学习笔记,几乎是书上的内 ...
- SQL学习笔记 | 02 SQL语句结构
SQL学习笔记 | 02 SQL语句结构 一.表的导入 1.表的命名 2.导入步骤 3.导入需注意 二.标准SQL语法 1.语句结构 2.数据表的其他关键词 3.SQL语句的分类 一.表的导入 1.表 ...
- CoAP学习笔记——CoAP格式详解
0 前言 CoAP是受限制的应用协议(Constrained Application Protocol)的代名词.在当前由PC机组成的世界,信息交换是通过TCP和应用层协议HTTP实现的.但是对于小型 ...
- CoAP学习笔记——CoAP资源发现
[原文链接] (2015年4月15日,ct表述错误,待修改) 更多CoAP文章请参考博文索引--[物联网学习笔记--索引博文] CoAP协议专门为M2M通信设计(设备间通信),在设备通信过程中很少会有 ...
- 2022软考网络工程师学习笔记——计算机组成与结构(Day2)
前言 本篇主要讲解我在 计算机组成与结构 中的所学所悟, 旨在分享学习笔记, 交流学习经验.
- LWIP学习笔记---网际控制报文协议ICMP
网际控制报文协议 背景 相关概念 报文类型 报文格式 差错报文 查询报文 代码实现 数据结构 发送差错报文代码实现 回送报文请求 背景 IP协议并不完美,在传递数据时提供的是一种无连接的不可靠数据报交 ...
- 深度学习笔记第三门课 结构化机器学习项目 第一周 机器学习(ML)策略(1)...
本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...
- 深度学习笔记第三门课 结构化机器学习项目 第二周 机器学习(ML)策略(2)...
本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...
最新文章
- Runnable接口和贪心算法
- 亿级用户基于微服务的互联网系统稳定性~
- 年入50万,程序员众生相
- spring源码分析之spring-core-io
- my paper in EI
- 联想天工 802.1x认证 主程序
- Silverlight/Windows8/WPF/WP7/HTML5周学习导读(7月30日-8月5日)
- 【项目经验】之线程基本知识
- html中span不显示背景
- LeetCode – Refresh – Exceel Sheet Column Number
- View如何设置16进制颜色值
- 计算机设备硬件设备,计算机硬件设备有哪些
- 十六进制编辑器--ImHex
- qcc300x笔记之固件升级(六)
- Oracle中的函数(详细!!!)
- 防御windows系统激活工具的后门入侵
- 高中数学必修一,集合知识概念运算归纳总结
- JS加密小结---银行卡号,手机号,姓名加密显示星号
- Dojo 1.6 官方教程:Dojo中的事件
- 【入门】算法初步1 排序