概述CoAP协议

目录

概述

1 认识CoAP协议

2 CoAP的消息

2.1 CoAP消息类型

2.2 可靠传输和不可靠传输 

2.2.1 可靠传输

2.2.2 不可靠消息

2.3 Request/Response Model

3 CoAP消息的格式

3.1 格式介绍

3.2 协议分析

4 CoAP URL

4.1  coap URI Scheme

4.2 coaps URI Scheme

5  CoAP-HTTP Proxying

5.1 GET

5.2 PUT

5.3 DELETE

5.4 POST

6 HTTP-CoAP Proxying

6.1 GET

6.2 HEAD

6.3 POST

6.4 PUT

6.5 DELETE

6.6 CONNECT

7 CoAP Code

7.1  Method Codes

7.2  Response Codes

8 参考资料:


概述

本文主要介绍CoAP的一些知识,CoAP协议是一个非常庞大的系统,不可能在一篇文章中面面俱到。笔者根据自己实际应用的需要,将一些可能使用的重要知识点罗列出来,便于工作和学习中查阅。

1 认识CoAP协议

CoAP(Constrained Application Protocol)是一种专为物联网设备设计的轻量级通信协议。它在UDP(User Datagram Protocol)上运行,具有低带宽和低能耗的特点,适用于资源受限的网络环境。

以下是CoAP协议的一些重要特性:

  1. 轻量级:COAP协议使用简单的二进制格式,占用较少的网络带宽和资源。它可以在嵌入式系统等资源受限的设备上运行。

  2. 简单性:COAP协议定义了一组简单的方法来进行通信,包括GET、POST、PUT和DELETE等。这使得开发者可以轻松地实现和使用COAP协议。

  3. 可靠性:COAP协议在传输层使用了可靠的确认和重传机制,以确保数据的可靠传输。它还支持重复消除,以避免重复请求。

  4. 低能耗:COAP协议的设计考虑了物联网设备的低能耗需求。它使用了一些技术来减少通信的能耗,如触发式通信和低功耗传输模式。

  5. 安全性:COAP协议支持基于DTLS(Datagram Transport Layer Security)的安全传输。它可以使用加密和身份验证来保护通信的安全性。

COAP协议主要用于物联网设备之间的通信,支持各种应用场景,如智能家居、工业自动化和智能城市等。它提供了一种简单、可靠和高效的通信方式,以满足物联网设备的通信需求。

2 CoAP的消息

2.1 CoAP消息类型

CoAP的消息类型总共有四种,其总结如下

消息类型说明
CON需要被确认的请求,如果CON请求被发送,那么对方必须做出响应。这有点像TCP,对方必须给确认收到消息,用以可靠消息传输。
NON不需要被确认的请求,如果NON请求被发送,那么对方不必做出回应。这适用于消息会重复频繁的发送,丢包不影响正常操作。这个和UDP很像。用以不可靠消息传输。
ACK应答消息,对应的是CON消息的应答。
RST复位消息,可靠传输时候接收的消息不认识或错误时,不能回ACK消息,必须回RST消息。

2.2 可靠传输和不可靠传输 

2.2.1 可靠传输

在CoAP协议框架下,CON类型的消息被称作为可靠传输,Client发送消息至Server。Server在接收到消息后,必须对其作出响应。

2.2.2 不可靠消息

 在CoAP协议框架下,NON类型的消息被称作为不可靠传输,Client发送消息至Server。Server在接收到消息后,不需要对其作出响应。

2.3 Request/Response Model

CoAP请求和响应语义在CoAP消息中携带,其中分别包括方法代码或响应代码。可选的(或默认的)请求和响应信息,例如URI和有效负载媒体类型作为CoAP选项携带。令牌是用于独立于底层匹配对请求的响应消息。(请注意,Token是一个单独的概念从消息ID。)

请求以可确认(CON)或非可确认(NON)方式传送。消息,如果立即可用,则返回对请求的响应
在可确认消息中携带的消息在结果中携带确认(ACK)消息。这被称为“piggy-backed”响应)没有必要像客户端那样,单独确认一个附带的响应如果确认消息携带不抱希望的回应是失败的。)两个基本GET请求的示例如图4所示,一个成功,一个导致4.04(未找到)响应。

如果服务器不能立即响应承载的请求在Confirmable消息中,它只是用一个Empty来响应确认消息,以便客户端可以停止重传请求。当响应准备好时,服务器将其发送到新的可确认消息(然后需要确认)由客户端决定。

如果请求以非确认消息的形式发送,则响应使用新的非确认消息发送,尽管服务器可以
而是发送一条confirable消息。 

3 CoAP消息的格式

3.1 格式介绍

CoAP消息的格式如下:

CoAP头部:包含了消息的版本、类型、代码、标识符和选项字段的信息。

CoAP头部信息说明
版本CoAP协议的版本号。
类型消息的类型,包括CON(可靠性传输)、NON(非可靠性传输)、ACK、RST等。
代码消息的操作码,表示请求类型(GET、POST、PUT、DELETE)或响应类型(成功、错误等)。
标识符用于区分不同CoAP消息的唯一标识符。
选项字段可选的参数,用于传输额外的信息。

CoAP选项:可选的参数,用于传输额外的信息。

CoAP选项说明
编号表示此选项的类型。
长度选项值的长度。
选项值具体的选项值。


CoAP负载:用于传输应用层数据。

3.2 协议分析

CoAP基于压缩消息的交换,默认情况下,通过UDP传输(即,每个CoAP消息占用数据一个UDP数据报的部分)。CoAP也可以在数据报上使用传输层安全性(DTLS)。也可能是在其他传输(如SMS、TCP或SCTP)上使用的其规格超出了本文档的范围

CoAP消息以简单的二进制格式编码。的消息Format以固定大小的4字节头开始。后面跟着a
variable-length令牌值,长度在0到8字节之间。以上翻译结果来自有道神经网络翻译(YNMT)· 通用场景。Token值之后是一个由0个或多个CoAP组成的序列TLV (Type-Length-Value)格式的选项,后面可选地跟一个占用数据报其余部分的有效负载。

消息头部分内容

Version (Ver): 

 2位无符号整数。CoAP版本号号码。此规范的实现必须设置此字段到1(01二进制)。其他值为以后的版本保留。版本号未知的消息必须被静默忽略。

Type (T): 

2位无符号整数。指示此消息是否为类型可确认(0)、不可确认(1)、确认(2)或Reset(3)

Token Length (TKL):    

4位无符号整数。的长度。可变长度Token字段(0-8字节)。长度9-15是保留,MUST不能发送,并且必须作为消息处理格式错误。

Code:     

数据类型:8位无符号整数。拆分为3位类(大多数)有效位)和5位细节(最低有效位),文档记录为"c.d ",其中"c"是0到7之间的数字3位子字段和“dd”是5位从00到31的两位数字子域。该类可以指示一个请求(0),一个成功响应(2)、客户端错误响应(4)或服务器错误response(5).(保留所有其他类的值。)作为一个特殊情况下,代码0.00表示空消息。如果…请求时,Code字段表示请求方法;如果…response,一个响应代码。

Message ID: 

数据类型:16位无符号整数网络字节顺序。用于检测消息重复并匹配类型的消息确认/重置为可确认/非确认类型的消息可证实的。

4 CoAP URL

CoAP使用“CoAP”和“coaps”URI模式来标识CoAP资源并提供定位资源的方法。资源是否按等级组织并由潜在的CoAP起源管理侦听CoAP请求(“CoAP”)或dtls安全CoAP的服务器在给定的UDP端口上请求(“coaps”)。CoAP服务器为通过泛型语法的权限组件标识,该组件包括一个主机组件和可选的UDP端口号。的URI的剩余部分被认为是标识一个资源可以通过CoAP协议定义的方法进行操作。因此,可以将“coap”和“coaps”URI模式与“http”和“coaps”URI模式进行比较"https" URI方案。

4.1  coap URI Scheme

coap-URI = "coap:" "//" host [ ":" port ] path-abempty [ "?" query ]

如果主机组件作为ip字面值或IPv4address提供,那么就可以通过该IP地址访问CoAP服务器。如果host是已注册的名称,则该名称被视为间接标识符端点可以使用名称解析服务(如DNS)来找到该主机的地址。主机不能为空;如果一个URI接收到的权限缺失或主机空,那么必须被认为无效。port子组件表示UDP端口CoAP服务器所在的位置。如果它是空的或者没有给出,然后假定缺省端口为5683

路径标识主机和端口范围内的资源。它由一系列用斜杠分隔的路径段组成字符(U+002F SOLIDUS "/")。该查询用于进一步参数化资源。它由由一个&字符 (U+0026 AMPERSAND "&")分隔的参数序列。常用的格式为:“key=value”

4.2 coaps URI Scheme

coaps-URI = "coaps:" "//" host [ ":" port ] path-abempty  [ "?" query ]

上述“覆盖”计划的所有要求也是除了一个默认的UDP端口如果端口子组件为空或,则假设[IANA_TBD_PORT],并且UDP数据报必须通过使用DTLS。

通过“coaps”方案提供的资源没有共享使用“coap”方案标识,即使它们的资源标识符也是如此
表示相同的授权机构(侦听相同UDP的相同主机)端口)。它们是不同的名称空间,并且被认为是
不同的原始服务器。

5  CoAP-HTTP Proxying

如果请求包含代理uri或代理方案选项'http'或'https' URI ,然后是接收CoAP端点(以后称为“代理”)被请求执行操作由请求方法指定的HTTP资源和将结果返回给客户端。此部分为任何CoAP请求指定CoAP响应代理应该返回到客户端。代理是如何满足请求是一个实现细节,尽管典型的预期案例是代理翻译和转发将请求发送到HTTP源服务器。由于HTTP和CoAP共享基本的请求方法集,在HTTP资源上执行CoAP请求并没有太大的不同在CoAP资源上执行它。的含义在HTTP资源上执行单个CoAP方法时在本节的子节中解释。如果代理不能或不愿意使用HTTP URI,则返回5.05(不支持代理)响应客户端。如果代理通过与第三方(如HTTP源服务器),无法获取在一个合理的时间框架内得到一个结果,一个5.04(网关超时)返回响应;如果一个结果可以得到,但没有得到理解后,返回5.02(坏网关)响应。

5.1 GET

方法请求代理返回控件的表示形式由请求URI标识的HTTP资源。如果成功,应该返回一个2.05 (Content)响应码。的响应的有效载荷必须是目标HTTP的表示形式资源,并相应地设置内容格式选项。响应必须指示一个Max-Age值,该值不能大于剩下的时间可以被认为是新鲜的。如果HTTP实体有一个实体标签,代理应该包含一个ETag响应中的选项和处理请求中的ETag选项下面描述。

客户端可以通过以下方式影响GET请求的处理:

接受:  请求可能包括一个接受选项,该选项标识首选的响应内容格式。

ETag:   请求可能包括一个或多个ETag选项,标识客户端存储的响应。这请求代理发送一个2.03(有效)响应时,它将发送一个2.05(内容)响应,在请求的集合中包含实体标记.否则。注意,CoAP etag总是强etagHTTP的感觉;CoAP没有HTTP弱etag的等价物,在交叉代理中没有很好的方法来利用这些。

5.2 PUT

PUT方法请求代理更新或创建HTTP由请求,是通过URI标识的资源来表示。

如果在请求URI处创建了新资源,则2.01(已创建)响应必须返回给客户端。如果现有资源是
修改后,必须返回2.04(已更改)响应来指示请求成功完成。

5.3 DELETE

DELETE方法请求代理删除HTTP资源由HTTP源服务器上的请求URI标识。

2.02(已删除)响应必须返回给客户端如果在请求时资源不存在。

5.4 POST

POST方法请求代理具有该表示请求中包含的内容将由HTTP源服务器处理。POST方法执行的实际功能由源服务器,并依赖于请求所标识的资源URI。

如果POST方法执行的操作没有导致可以通过URI标识的资源,即2.04(已更改)响应必须返回给客户端。如果资源已创建在对于源服务器,必须返回2.01(已创建)响应。

6 HTTP-CoAP Proxying

如果HTTP请求包含带有'coap'或'coaps'的请求uriURI,然后是接收HTTP端点(以后称为“代理”)被请求执行由请求方法指定的操作在指定的CoAP资源上执行,并将结果返回给客户端。此部分为任何HTTP请求指定HTTP响应代理应该返回到客户端。除非另有规定所做的所有陈述都是推荐行为;一些高度受约束的实现可能需要求助于捷径。如何代理实际满足请求是一个实现细节,虽然典型的情况预计是代理翻译和将请求转发到CoAP源服务器。的含义在CoAP资源上执行单个HTTP方法时在本节的子节中解释。如果代理不能或不愿意使用CoAP为请求提供服务URI,则将501(未实现)响应返回给客户端。如果代理通过与第三方交互来为请求提供服务(如CoAP源服务器),并且无法获得结果在合理的时间范围内,504(网关超时)响应是返回;如果可以得到一个结果,但不能理解,则502返回(坏网关)响应。

6.1 GET

GET方法: 请求代理返回控件的表示形式由请求uri标识的CoAP资源。成功后,返回一个200 (OK)响应。有效载荷响应必须是目标CoAP资源的表示形式,并且设置报头字段Content-Type和Content-Encoding相应的行动。响应必须指示一个最大年龄指令指定的值不大于系统的剩余时间代表可以被认为是新鲜的。如果CoAP响应具有选项时,代理应该被响应。

客户端可以通过以下方式影响GET请求的处理以下选项:

Accept: 

 HTTP Accept报头的首选媒体类型字段映射到CoAP Accept选项。HTTP接受不支持媒体类型范围、参数和扩展名CoAP接受选项。如果代理不能发送响应是可接受的,那么代理发送406(不可接受)响应。代理人可以然后用来自HTTP的其他媒体类型重试请求接受报头字段。

Conditional GETs:

Conditional HTTP GET 请求包含“If-”“Match”或“If-None-Match”请求头字段可以映射到相应的CoAP请求。“If- modified - since”和“If-。未修改-因为“请求头”字段不直接支持通过CoAP,但由缓存代理在本地实现。

6.2 HEAD

HEAD方法与GET方法相同,只是服务器必须不这样做在响应中返回消息体。尽管CoAP中没有直接对应HTTP的HEAD方法,HTTP-CoAP代理响应对CoAP资源的HEAD请求返回的HTTP报头没有消息体。

6.3 POST

POST方法请求代理具有该表示请求中包含的内容将由CoAP源服务器处理。POST方法执行的实际功能由源服务器,并依赖于请求所标识的资源URI。如果POST方法执行的操作没有导致资源,可以通过URI, 200 (OK)或204 (No内容响应必须返回给客户端。如果一个资源如果在源服务器上已创建,则必须是201(已创建)响应返回。

如果CoAP响应中存在任何Location-*选项,则由这些选项的值构造的位置报头字段为返回。

6.4 PUT

PUT方法请求代理更新或创建CoAP由Request-URI标识的资源表示。

如果在Request-URI处创建了新资源,则201 (created)将响应返回给客户端。如果现有资源是修改后,响应码为200 (OK)或204 (No Content)发送以指示请求成功完成。

6.5 DELETE

DELETE方法请求代理删除CoAP资源由CoAP源服务器上的请求uri标识。

如果响应包含实体,则成功响应为200 (OK)描述状态或204(无内容),如果操作已完成已制定,但响应不包括实体。

6.6 CONNECT

HTTP-CoAP代理目前无法满足此方法作为TLS到DTLS隧道的功能尚未指定。现在,一个501(未实现)错误返回给客户端。

7 CoAP Code

7.1  Method Codes

子注册表的名称是“CoAP Method Codes”。子注册表中的每个条目必须包含方法代码
范围0.01-0.31,方法的名称,以及对方法的文档。

此子注册表的初始条目如下:

7.2  Response Codes

子注册中心的名称是“CoAP Response Codes”。子注册中心中的每个条目必须包含响应代码
范围2.00-5.31。

此子注册表的初始条目如下:

8 参考资料:

  https://datatracker.ietf.org/doc/html/draft-ietf-core-coap-00   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/660953.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Laravel5.4 反序列化

文章目录 0x01 环境搭建0x02 POP 链0x03 exp0x04 总结 前言:CC 链复现的头晕,还是从简单的 Laravel 开始吧。 laravel 版本:5.4 0x01 环境搭建 laravel安装包下载地址 安装后配置验证页面。在 /routes/web.php 文件中添加一条路由&#xf…

牛客NC275 和为S的两个数字【简单 map C++/Java/Go/PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/390da4f7a00f44bea7c2f3d19491311b 思路 map参考答案C #include <vector> class Solution {public:vector<int> FindNumbersWithSum(vector<int> array, int sum) {vector<int> ans;m…

css div块标签内的多个英语单词怎样设置换行

背景&#xff1a; 在<div>标签内&#xff0c;当接口返回的字符串全是英文字母&#xff0c;不会自动换行。 原因&#xff1a;查过相关资料后才知道&#xff0c;只有英文文本才会出现不能自动换行的情况&#xff0c;&#xff08;中文不存在&#xff09;而原因是因为英文文本…

ubuntu搭建jupyter_notebook服务器

环境&#xff1a;ubuntu 22.04 目录 环境&#xff1a;ubuntu 22.04 一、创建一个anaconda用户 创建用户condaUser 为用户condaUser设置密码 开放opt文件夹的权限 登录condaUser用户 二、安装anaconda 下载anaconda 安装anaconda 三、添加环境变量 四、anaconda换源 …

Django后台项目开发实战二

我们的需求是开发职位管理系统 三个功能&#xff1a; 管理员发布职位候选人能浏览职位用户能投递职位 第二阶段 创建应用 jobs&#xff0c;实现职位数据的建模 python manage.py startapp jobs 然后再 setting .py 注册应用&#xff0c;只需添加应用名称到最后一行 INST…

Maven入门:1.简介与环境搭建

一.简介与环境搭建 1.Maven&#xff1a;用于自动化构建项目&#xff08;按照企业主流模板构建完善的项目结构&#xff09;和管理项目依赖&#xff08;依赖就是项目的jar包&#xff0c;通过配置的方式进行添加和管理&#xff0c;自动下载和导入&#xff09;的工具。即更加方便构…

LangChain入门2 RAG详解

RAG概述 一个典型的RAG应用程序,它有两个主要组件&#xff1a; 索引&#xff1a;从源中获取数据并对其进行索引的管道。这通常在脱机情况下发生。检索和生成&#xff1a;在运行时接受用户查询&#xff0c;并从索引中检索相关数据&#xff0c;然后将其传递给模型。 从原始数据…

分享一份物联网 SAAS 平台架构设计

一、架构图**** 二、Nginx**** 用于做服务的反向代理。 三、网关**** PaaS平台所有服务统一入口&#xff0c;包含token鉴权功能。 四、开放平台**** 对第三方平台开放的服务入口。 五、MQTT**** MQTT用于设备消息通信、内部服务消息通信。 六、Netty**** Socket通信设…

标准汽车试验铁地板的技术要求

在现代科技化发展的工作中&#xff0c;试验平台被广泛使用。铸铁试验平台&#xff08;试验铁地板&#xff09;又叫试验工作平台&#xff0c;听名字大家也不难想象出来这是一款带有箱式体的台面&#xff0c;这是一种有长方形或者圆形又或者正方形的试验工作台。 铸铁试验平台&a…

spring boot运行过程中动态加载Controller

1.被加载的jar代码 package com.dl;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication public class App {public static void main(String[] args) {SpringApplication.run(A…

基于FPGA的数字信号处理(1)--什么是无符号数?什么是有符号数?

进制 虽然在日常生活中&#xff0c;我们已经习惯了使用10进制数字&#xff0c;但在由数字电路构成的数字世界中&#xff0c;2进制才是效率更高的选择。 10进制与2进制 10进制&#xff08;decimal&#xff09;计数法&#xff08;一般也叫阿拉伯计数法&#xff09;是在日常生活…

DS高阶:图论基础知识

一、图的基本概念及相关名词解释 1.1 图的基本概念 图是比线性表和树更为复杂且抽象的结&#xff0c;和以往所学结构不同的是图是一种表示型的结构&#xff0c;也就是说他更关注的是元素与元素之间的关系。下面进入正题。 图是由顶点集合及顶点间的关系组成的一种数据结构&…