Coap协议学习(二)
1、基础了解
1.1 CoAP消息类型
CoAP采用与HTTP协议相同的请求响应工作模式。CoAP协议共有4中不同的消息类型。
HTTP 与 COAP协议都是通过4个请求方法(GET, PUT, POST, DELETE)对服务器端资源进行操作。 两者之间明显的区别在于HTTP是通过文本描述方式描述协议包内容,协议包里面会包含一些空格符,换行符等,协议包可读性很强。而COAP是通过定义 二进制各位段功能来描述协议包内容。 因此COAP协议包大小更小,更紧凑。COAP协议最小的协议包只有4B。 协议包需要经过解析后才能知道里面具体内容,另还有一个明显的区别是传统的HTTP协议是主机与web服务器之间是单向通信的(用websocket除外)。而CoAP系统中CoAP Client与CoAP server是可以双向通信,双方都可以主动向对方发送请求。
CON——需要被确认的请求,如果CON请求被发送,那么对方必须做出响应。
NON——不需要被确认的请求,如果NON请求被发送,那么对方不必做出回应。
ACK——应答消息,接受到CON消息的响应。
RST——复位消息,当接收者接受到的消息包含一个错误,接受者解析消息或者不再关心发送者发送的内容,那么复位消息将会被发送。
1.2 COAP具体协议介绍:
协议框架运行在UDP上
COAP协议通信是通过在UDP上传输消息类完成。UDP比作公路话,消息就是公路上汽车。
COAP定义了4种类型消息,来实现设备端与云端之间双向通信
CON——需要被确认的请求,如果CON请求被发送,那么对方必须做出响应。
NON——不需要被确认的请求,如果NON请求被发送,那么对方不必做出回应。
ACK——应答消息,接受到CON消息的响应。
RST——复位消息,当接收者接受到的消息包含一个错误,接受者解析消息或者不再关心发送者发送的内容,那么复位消息将会被发送。基于4种消息类型,可以实现2种传输质量。即可靠消息传输 与 不可靠消息传输。#####怎么是可靠消息传输?主要是通过确认及重传机制来实现的,客户端发送消息后,需要等待服务器收到通知,
如果在规定时间内,没有收到需要重新发送数据。 可靠传输是基于CON消息传输的,
服务器端收到CON类型的消息后,需要返回ACK消息,客户端到在指定时间ACK_TIMEOUT内收到ACK消息后,
才代表这个消息以可靠到服务器端。#####怎么是不可靠消息传输?
客户端只管发送消息, 不管服务器端有没有收到,因此可能存在丢包。
不可靠传输是基于NON消息传输的。服务器端收到NON类型的消息后,不用回复ACK消息。
资源请求/响应模型 Requests/Responses
对于物联网,服务器上的资源可以简单的认为是物联网设备的实时运行影子, 通过访问服务器上资源就可以实现与设备间数据的交互。 上面谈到的消息模型比如汽车话, 资源请求及响应好比汽车上货物。 资源请求及响应内容最终会被放在CoAP消息包里面。CoAP请求与响应,类似HTTP,且根据RESTful架构设计的。 CoAP客户端发出请求,CoAP服务端进行请求处理然后发送响应。
COAP 请求Request方法: 请求方法与HTTP协议类似,有4个。
GET, PUT, POST, DELETE, 所有的请求方法都会放在CoAP CON/NON消息里面进行传输。
COAP 请求响应Response代码: 响应内容也与HTTP协议类似。 主要有如下3类:
Success 2.xx 代表客户端请求被成功接收并被成功处理
Client Error 4.xx 代表客户端请求有错误,比如参数错误等
Server Error 5.xx 代表服务器在执行客户端请求时出错。
所有的请求服务器响应可以放在CoAP CON/NON/ACK消息里面进行传输。针对CoAP 带CON消息请求,响应如果快速处理完(有些请求的处理需要耗时多,服务器无法立即响应),则可直接放在ACK消息包里面返回。对于无法立即响应的,服务器带资源ready后,会单独发一个响应消息包给客户端
服务器上可访问资源统一用URL来定位(比如/deviceID/temp 访问某个设备的温度信息)。客户端通过某个资源的URL来访问服务器具体资源,通过4个请求方法(GET,PUT,POST,DELETE)完成对服务器上资源增删改查操作。
举个例子:
比如某个设备需要从服务器端查询当前温度信息。
请求消息(CON): GET /temperature , 请求内容会被包在CON消息里面
响应消息 (ACK): 2.05 Content “22.5 C” ,响应内容会被放在ACK消息里面
1.3 CoAP帧格式
一个CoAP消息最小为4个字节,以下是CoAP协议不同部分的描述。
Ver: 2bit, 代表版本信息,当前是1
T: 2bit, 代表该消息类型, CON, NON. ACK, RST
TKL: 4bit, token长度, 当前支持0~8B长度,其他长度保留将来扩展用
Code: 8bit, 分成前3bit(0-7)和后5bit(0-31),前3bit代表类型。 0代表空消息或者请求码, 2开头代表响应码,取值如下:0.00 Indicates an Empty message0.01-0.31 Indicates a request. 1.00-1.31 Reserved2.00-5.31 Indicates a response. 6.00-7.31 ReservedMessage ID: 16bit, 代表消息MID,每个消息都有一个ID ,重发的消息MID不变。token(可选):也叫做请求ID。把响应与之前的请求关联起来。有时候客户端发送出请求带上token,服务器端有时不能立即响应, 带服务器端准备好数据后,会单独发送一个消息给客户端, 这时候客户端需要判断这个消息是针对之前的哪个请求回复的,token用途就在这里,通过token,客户端收到响应后,取出TOKEN,就可以知道该响应是针对之前哪个请求回复的Options: CoAP选项类似于HTTP请求头,它包括CoAP消息本身,例如CoAP端口号,CoAP主机和CoAP查询字符串等。
Payload: 真正有用的被交互的数据 若有,前面加payload 标志 OxFF。
Coap协议学习(二)相关推荐
- CoAP协议学习笔记 1.3 用UDP工具来调试CoAP
1 前言 CoAP的调试,目前没找到好用的工具,网上说的火狐插件现在也不能用了,多希望手头的TCP/UDP网络调试工具就可以支持. 既然CoAP是基于UDP来组包的,那肯定是可以实现. 所以这篇文章给 ...
- CoAP协议学习笔记 1.2 一张表了解 CoAP 协议
1 前言 对于CoAP协议的学习,这份100多页的文档肯定没法背下来.我们只需把协议当作工具书,大体知道主体的内容,在遇到细节问题时再去具体章节找问题. 本篇笔记中先对 CoAP 协议内容做个基础了解 ...
- CoAP协议学习笔记 3.1 CoAP协议翻译 加密基础介绍
CoAP协议学习笔记可点此查看. 1 前言 在之前的学习中,没有过多关注加密.但实际部分厂家的IoT平台(阿里云.OneNET)已经启用了相关安全处理,有必要深入学习下. 在 CoAP 协议 RFC7 ...
- CoAP协议学习——CoAP基础
[原连接地址] 更多CoAP文章请参考博文索引--[物联网学习笔记--索引博文] 推广 <IoT开发实战:CoAP卷>已经由机械工业出版社出版,如果想学习CoAP的更多内容请于淘宝.天猫或 ...
- CoAP协议学习笔记——CoAP格式详解
CoAP是受限制的应用协议(Constrained Application Protocol)的代名词.在当前由PC机组成的世界,信息交换是通过TCP和应用层协议HTTP实现的.但是对于小型设备而言, ...
- coap协议学习之搭建coap测试环境
本篇目标:简单初步认识coap,以及怎么去测试自己搭建的coap协议应用. 材料准备: 谷歌浏览器/火狐浏览器(55.0)与 copper插件 linux系统(搭建在虚拟机下的 Ubantu)与 li ...
- CoAP协议学习笔记(一)
目录 CoAP协议定义 CoAP协议特点 协议模型 Message Format Message Hader(CoAP报文结构) CoAP的响应码 Message分类 Message的可靠传输 Mes ...
- 《SpringBoot框架学习二之HTTP协议》
<SpringBoot框架学习二之HTTP协议> 文章目录 <SpringBoot框架学习二之HTTP协议> 一.HTTP介绍 (1)概述 (2)HTTP版本协议 1.HTTP ...
- 一个用来学习CoAP协议的小例子
1 CoAP简介 CoAP 是受限制应用协议的简称,是物联网应用层协议之一.物联网应用层协议主要还有HTTP和MQTT,这三种协议有各自不同的应用场景.其中HTTP和MQTT使用TCP作为传输层协议, ...
- H.264协议CABAC熵编码学习(二)
目录: H.264协议CABAC熵编码学习(一) H.264协议CABAC熵编码学习(二) H.264协议CABAC熵编码学习(三) H.264协议CABAC熵编码学习(四) H.264协议CABAC ...
最新文章
- 如何禁止NumPy自动跳过数组的中心部分并仅打印角点
- 最先进的计算机视觉|AI和工业4.0之间,还有多远的差距?
- 微信小程序 - 支持html空格(提示)
- Vue-router路由基础总结(一)
- 四、Vue组件化开发学习笔记——父子组件通信,父级向子级传值(props),子级向父级传值(自定义事件),slot插槽
- Linux进程调度:完全公平调度器 Completely Fair Scheduler 内幕| linux-2.6
- android (12) Fragment使用
- 待办事项列表,敏捷项目管理的核心工件
- hadoop服务器中断,Hadoop服务器上的虚拟内存错误
- 去掉串口硬盘的安全删除硬件图标
- Cesium场景泛光
- ajax+JS实现分页
- 【QT开发笔记-基础篇】| 第五章 绘图QPainter | 5.13 抗锯齿
- Rsync 实现 Windows 与 CentOS 之间数据同步
- linux hard link和soft link(硬链接和软链接)的简单介绍
- Nginx访问日志(access_log)配置
- mysql数据库根据引擎备份_MySQL数据库备份的几种方式
- 计算机辅助设计高级绘图员技能鉴定试题,计算机辅助设计高级绘图员技能鉴定试题第二卷...
- 【MODIS】MODIS数据的两种批量下载方法 - Python和Wget
- Android开发——今日头条APK瘦身之路