初识CoAP协议

前言
本文介绍什么是CoAP,以及如何在物联网设备上使用它。CoAP是一种物联网协议,具有一些专门为受约束的设备而设计的有趣功能。还有其他一些可用于构建物联网解决方案的IoT协议,例如MQTT等。
物联网是最有趣和最有前途的技术趋势之一。在这个生态系统中,对象,人员,设备相互连接并交换数据。在此博客中,我们从多个角度介绍了物联网和开发物联网项目,并涵盖了与物联网相关的多个方面。
什么是CoAP协议?
如前所述,CoAP是一种物联网协议。CoAP意思为Constrained Application Protocol,在RFC 7252中所定义。CoAP是一种低开销的简单协议,专门针对受限设备(例如微控制器)和受限网络而设计。该协议用于M2M数据交换中,并且与HTTP非常相似,即使稍后我们将介绍重要的区别。
CoAP协议的主要特征是:
- 受限制的小型设备的Web传输协议(类似于HTTP)
- 异步消息交换
- 低开销,非常易于解析
- URI和内容类型支持
- 代理和缓存功能
您可能会注意到,CoAP某些功能也与HTTP非常相似,但是不能将CoAP视为压缩版本的HTTP协议,因为CoAP是专门为IoT设计的,并且更详细地针对M2M,因此针对这些要求必须有所优化。
从抽象协议层,CoAP可以表示为:

正如你所看到的,CoAP协议有两个不同的层:消息负载和请求/响应。消息层处理UDP和异步消息。请求/响应层基于请求/响应消息来管理请求/响应交互。
CoAP支持四种不同的消息类型:
- 可确认的 Confirmable(CON)
- 无法确认 Non-confirmable(NON)
- 确认 Acknowledgment
- 重置 Reset
在深入研究CoAP协议之前,以下必要的术语有助于我们更好的了解CoAP协议:
- 节点(Endpoint):参与CoAP协议的实体。通常,将端点标识为主机
- 发件人(Sender):发送消息的实体
- 收件人(Recipient):接受消息的实体
- 客户端(Client):发送请求的实体和接受消息的实体
- 服务器(Server):接收来自客户端的请求并向客户端发送回响应的实体
CoAP消息模型
这是CoAP的最低层。该层处理端点之间的UDP交换消息。每个CoAP消息都有一个唯一的ID。这对于检测消息重复很有用。CoAP消息由以下部分构建:
- 二进制标志头
- 可选项
- 载荷消息
稍后,我们将更详细地描述消息格式。
如前所述,CoAP协议使用两种消息:
- 确认消息
- 不可确认的消息
可确认消息是可靠消息。在两个端点之间交换消息时,这些消息可能是可靠的。在CoAP中,使用确认消息(CON)获得可靠的消息。使用这种消息,客户端可以确保消息将到达服务器。反复发送确认消息,直到另一方发送确认消息(ACK)。ACK消息包含与确认消息(CON)相同的ID。
下图显示了消息交换过程:

如果服务器在管理传入请求时遇到问题,则可以发送回Rest消息(RST)而不是Acknowledge消息(ACK):

另一个消息类别是“不可确认(NON)”消息。这些是不需要服务器确认的消息。它们是不可靠的消息,或者换句话说,这些消息不包含必须传递给服务器的关键信息。包含从传感器读取的值的消息属于此类别。
即使这些消息不可靠,它们也具有唯一的ID。

CoAP请求/响应模型
CoAP请求/响应是CoAP抽象层中的第二层。使用“确认”(CON)或“非确认”(NON)消息发送请求。根据服务器是否可以立即响应客户端请求或答案(如果不可用),有几种方案。
如果服务器可以立即响应客户端请求,则如果使用确认消息(CON)承载了请求,则服务器将包含响应或错误代码的确认消息发送回客户端:

如您在CoAP消息中所注意到的,有一个令牌。令牌不同于消息ID,它用于匹配请求和响应。
如果服务器无法立即响应来自客户端的请求,则它将发送带有空响应的确认消息。一旦响应可用,服务器就会向客户端发送一条新的Confirmable消息,其中包含响应。此时,客户端发送回确认消息:

如果来自客户端的请求是使用不可确认消息承载的,则服务器将使用不可确认消息进行应答。
CoAP消息格式
本段涵盖了CoAP消息格式。到目前为止,我们已经讨论了客户端和服务器之间交换的各种消息。现在是时候分析消息格式了。受限的应用程序协议是受限环境中的关键,因此,它使用紧凑的消息。为了避免分段,消息占用UDP数据报的数据部分。一条消息由几个部分组成:

Version(VER)(2 bits): CoAP版本号
Type(2 bits)
这描述了请求和响应着两种消息类型上下文的数据包消息类型。
- 请求
- 0 : 可确认: 该消息需要相应的确认消息。
- 1 : 不可确认:此消息不需要确认消息。
- 响应
- 2 : 确认: 此消息是确认可确认消息的响应。
- 3 : 重置: 此消息表明它已收到消息,但无法处理。
Token Length(4 bits): 指示可变长度令牌字段的长度,其长度可以为0-8字节。
Request/Response(8 bits): CoAP请求/响应代码
Message ID(16 bits): 用于检测消息重复并将“确认/重置”类型的消息与“确认” /“不可确认”类型的消息进行匹配。:响应消息将具有与请求相同的消息ID。
CoAP安全方面
处理物联网协议时的一个重要方面是安全性方面。如前所述,CoAP使用UDP传输信息。CoAP依靠UDP安全性方面来保护信息。由于HTTP使用基于TCP的TLS,因此CoAP使用基于UDP的数据报TLS。DTLS支持RSA,AES等。无论如何,我们应该考虑在某些受限设备中可能无法使用某些DTLS密码套件。重要的是要注意,某些密码套件引入了一些复杂性,并且受约束的设备可能没有足够的资源来管理它。

相关物联网技术指导更新于: https://github.com/IoT-Technology/IOT-Technical-Guide
初识CoAP协议的更多相关文章
- 初识HTTP协议
本篇文章从概念上初识HTTP协议,参考链接:http://www.runoob.com/http/http-tutorial.html 目录: 一.HTTP协议 HTTP 工作原理 HTT ...
- 转:XMPP协议、MQTT协议、HTTP协议、CoAP协议的基本比较
一.先看下相关国外的专业数据对四大协议的比较: Protocol CoAP XMP ...
- CoAP 协议解析说明(转)
CoAP 协议全面分析 HTTP与COAP 请求与响应示例 HTTP请求(文本格式) POST https://getman.cn/echo HTTP/1.1 User-Agent: Fiddler ...
- Coap协议学习笔记-第一篇
1. 物联网应用上一般使用单片机(或者其他SOC),单片机的RAM内存一般只有20KB~~128KB左右,然而一个TCP协议栈可能就20KB,所以只能用UDP,因为UDP相对小很多,然后在UDP上加了 ...
- Android之Http通信——1.初识Http协议
Android之Http通信--1.初识Http协议 引言: 今天是六一儿童节,先在这里给各位超龄儿童说声节日快乐哈~( ╯□╰ ),小猪也象征性地给群里的小朋友们派了红包-嗯,忙碌的五月最终过去了, ...
- 无线物联网中CoAP协议的研究与实现【转】
无线物联网中CoAP协议的研究与实现 时间:2013-04-09 来源:电子科技 作者:汤春明,张 荧,吴宇平 关键字:CoAP 无线 物联网 协议 摘要:由于物联网中的很多设备都是资源受 ...
- 转战物联网·基础篇09-选择MQTT协议还是CoAP协议
前面章节介绍过,MQTT协议和CoAP协议都是物联网中比较流行的协议,都对传输量做了很大的精简,传输开销小,以适应物理网的网络环境. XMPP协议也有人说是适合物联网通信的,但它是基于XML, ...
- MQTT研究之EMQ:【CoAP协议应用开发】
本博文的重点是尝试CoAP协议的应用开发,其中包含CoAP协议中一个重要的开源工具libcoap的安装和遇到的问题调研.当然,为了很好的将EMQ的CoAP协议网关用起来,也调研了下EMQ体系下,CoA ...
- MQTT研究之EMQ:【CoAP协议的ECC证书研究】
今天研究的内容,是CoAP这个协议在EMQ消息队列的支持,CoAP是一个受限资源的协议,基于UDP实现的多用于物联网环境的通信协议.相关介绍不多说,可以看RFC. CoAP协议下,基于DTLS通信,同 ...
随机推荐
- Golang 性能测试 (3) 跟踪刨析 golang trace
简介 对于绝大部分服务,跟踪刨析是用不到的.但是如果遇到了下面问题,可以不妨一试: 怀疑哪个协程慢了 系统调用有问题 协程调度问题 (chan 交互.互斥锁.信号量等) 怀疑是 gc (Garbage ...
- http的请求头都有那些信息
每个HTTP请求和响应都会带有相应的头部信息.默认情况下,在发送XHR请求的同时,还会发送下列头部信息: Accept:浏览器能够处理的内容类型 Accept-Charset:浏览器能够显示的字符集 ...
- web 应用 为啥 需要用到 tomcat 之类的 部署
首先了解C/s架构 比如我们常见的QQ,魔兽世界等 这种结构的程序是有服务器来提供服务的,客户端来使用服务 而B/S架构是这样的 它不需要安装客户端,只需要浏览器就可以了 例如QQ农场,这样对客户端的 ...
- Xray安装与使用
0×00 Xray简介 xray是从长亭洞鉴核心引擎中提取出的社区版漏洞扫描神器,支持主动.被动多种扫描方式,自备盲打平台.可以灵活定义 POC,功能丰富,调用简单,支持 Windows / macO ...
- 化繁为简,弱监督目标定位领域的新SOTA - 伪监督目标定位方法(PSOL) | CVPR 2020
论文提出伪监督目标定位方法(PSOL)来解决目前弱监督目标定位方法的问题,该方法将定位与分类分开成两个独立的网络,然后在训练集上使用Deep descriptor transformation(DDT ...
- python干货-类属性和方法,类的方法重写
类属性与方法 类的私有属性 __private_attrs: 两个下划线开头,表明为私有,外部不可用,内部使用时self.__private_attrs. 类的方法 在类的内部,使用 def 关键字来 ...
- ATcoder E - Flatten 质因子分解求LCM
题解:其实就是求n个数的lcm,由于数据特别大,求lcm时只能用质因子分解的方法来求. 质因子分解求lcm.对n个数每个数都进行质因子分解,然后用一个数组记录某个质因子出现的最大次数.然后累乘pow( ...
- SpringBoot 集成 Elasticsearch
前面在 ubuntu 完成安装 elasticsearch,现在我们SpringBoot将集成elasticsearch. 1.创建SpringBoot项目 我们这边直接引入NoSql中Spring ...
- 068.Python框架Django之DRF视图集使用
一 视图集与路由的使用 使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中: list() 提供一组数据 retrieve() 提供单个数据 create() 创建数据 update() ...
- mysql datetime类型 按格式在页面输出
mysql datetime类型对应java Date类型 java.util.Date类型会显示时间戳 java.sql.Date 只显示年月日不显示时分秒 只需要重写get方法 就能按格式输出 ...