CoAP协议学习笔记——CoAP格式详解

article/2025/8/19 10:53:43

CoAP是受限制的应用协议(Constrained Application Protocol)的代名词。在当前由PC机组成的世界,信息交换是通过TCP和应用层协议HTTP实现的。但是对于小型设备而言,实现TCP和HTTP协议显然是一个过分的要求。为了让小设备可以接入互联网,CoAP协议被设计出来。CoAP是一种应用层协议,它运行于UDP协议之上而不是像HTTP那样运行于TCP之上。CoAP协议非常小巧,最小的数据包仅为4字节。

  1 CoAP协议综述

  和其他TCP IP协议簇中的协议一样,CoAP协议总是以“头”的形式出现在负载之前,而负载和CoAP头之间使用单字节0xFF分离。学习CoAP协议最好的方法便是结合RFC文档,详细分析CoAP协议报文格式的每一部分,便是CoAP协议报文结构示意图。

图1.1 CoAP协议报文结构示意图

  图1.1 CoAP协议报文结构示意图

  2 CoAP协议报文各部分

  【Ver】 版本编号,指示CoAP协议的版本号。类似于HTTP 1.0 HTTP 1.1。版本编号占2位,取值为01B。

  【T】报文类型,CoAP协议定了4种不同形式的报文,CON报文,NON报文,ACK报文和RST报文。

  【TKL】CoAP标识符长度。CoAP协议中具有两种功能相似的标识符,一种为Message ID(报文编号),一种为Token(标识符)。其中每个报文均包含消息编号,但是标识符对于报文来说是非必须的。

  【Code】功能码/响应码。Code在CoAP请求报文和响应报文中具有不同的表现形式,Code占一个字节,它被分成了两部分,前3位一部分,后5位一部分,为了方便描述它被写成了c.dd结构。其中0.XX表示CoAP请求的某种方法,而2.XX、4.XX或5.XX则表示CoAP响应的某种具体表现。

  【Message ID】报文编号

  【Token】标识符具体内容,通过TKL指定Token长度。

  【Option】报文选项,通过报文选项可设定CoAP主机,CoAP URI,CoAP请求参数和负载媒体类型等等。

  【1111 1111B】CoAP报文和具体负载之间的分隔符。

  3 Code部分详解

  Code部分被分成了两部分,为了便于阅读,Code被描述为c.dd形式。具体内容可参考RFC7252 #12.1.1 Method Codes

  3.1 请求

  在CoAP请求中,Code被定义为CoAP请求方法,这些方法有GET、POST、PUT和DELETE,这些方法和HTTP协议非常相似。

  【0.01】GET方法——用于获得某资源

  【0.02】POST方法——用于创建某资源

  【0.03】PUT方法——用于更新某资源

  【0.04】DELETE方法——用于删除某资源

  3.2 响应

  在CoAP响应中,Code被定义为CoAP响应码,类似于HTTP 200 OK等等。

  【2.01】Created

  【2.02】Deleted

  【2.03】Valid

  【2.04】Changed

  【2.05】Content。类似于HTTP 200 OK

  【4.00】Bad Request 请求错误,服务器无法处理。类似于HTTP 400。

  【4.01】Unauthorized 没有范围权限。类似于HTTP 401。

  【4.02】Bad Option 请求中包含错误选项。

  【4.03】Forbidden 服务器拒绝请求。类似于HTTP 403。

  【4.04】Not Found 服务器找不到资源。类似于HTTP 404。

  【4.05】Method Not Allowed 非法请求方法。类似于HTTP 405。

  【4.06】Not Acceptable 请求选项和服务器生成内容选项不一致。类似于HTTP 406。

  【4.12】Precondition Failed 请求参数不足。类似于HTTP 412。

  【4.15】Unsuppor Conten-Type 请求中的媒体类型不被支持。类似于HTTP 415。

  【5.00】Internal Server Error 服务器内部错误。类似于HTTP 500。

  【5.01】Not Implemented 服务器无法支持请求内容。类似于HTTP 501。

  【5.02】Bad Gateway 服务器作为网关时,收到了一个错误的响应。类似于HTTP 502。

  【5.03】Service Unavailable 服务器过载或者维护停机。类似于HTTP 503。

  【5.04】Gateway Timeout 服务器作为网关时,执行请求时发生超时错误。类似于HTTP 504。

  【5.05】Proxying Not Supported 服务器不支持代理功能。

  4 Option部分详解

  CoAP支持多个Option,CoAP的Option的表示方法比较特殊,采用增量的方式描述,细节可参考RFC7252 #3.1

图4.1 CoAP部分Option定义

  图4.1 CoAP部分Option定义

  一般情况下Option部分包含Option Delta、Option Length和Option Value三部分。

  【Option Delta】表示Option的增量,当前的Option的具体编号等于之前所有Option Delta的总和。

  【Option Length】表示Option Value的具体长度。

  【Option Value】表示Option具体内容

  CoAP中所有的Option都采用编号的方式,这些Option及编号的定义如下图所示。

图4.2 Option编号内容

  图4.2 Option编号内容

  在这些option中,Uri-Host、Uri-Port、Uri-Path和Uri-Query等和资源“位置”和参数有关。

  【3】Uri-Host:CoAP主机名称,例如iot.eclipse.org

  【7】Uri-Port:CoAP端口号,默认为5683

  【11】Uri-Path:资源路由或路径,例如\temperature。资源路径采用UTF8字符串形式,长度不计第一个"\"。

  【15】Uri-Query:访问资源参数,例如?value1=1&value2=2,参数与参数之间使用“&”分隔,Uri-Query和Uri-Path之间采用“?”分隔。

  在这些option中,Content-Format和Accept用于表示CoAP负载的媒体格式

  【12】Content-Format:指定CoAP复杂媒体类型,媒体类型采用整数描述,例如application/json对应整数50,application/octet-stream对应整数40。

  【17】Accept: 指定CoAP响应复杂中的媒体类型,媒体类型的定义和Content-Format相同。

  CoAP协议中支持多个Option,例如

  第一个Option Delta=11,表示该Option表示Uri-Path(11)

  第二个Option Delta=1,表示该Option=1+11,表示Content-Format(12)

  第三个Option Delta=3,表示该Option=3+1+11,表示Uri-Query(15)

  CoAP采用这样的方式表示多个Option,而每种Option都可以在HTTP协议中找到对应项。

  5 Content-Format描述

  CoAP支持多种媒体类型,具体可参考RFC7252 #12.3。从下图的信息可以发现,CoAP协议中关于媒体类型的定义比较简单,未来应该会根据实际情况扩展。

图5.1 Content-Format编号内容

  图5.1 Content-Format编号内容

  【text/plain】 编号为0,表示负载为字符串形式,默认为UTF8编码。

  【application/link-format】编号为40,CoAP资源发现协议中追加定义,该媒体类型为CoAP协议特有。

  【application/xml】编号为41,表示负载类型为XML格式。

  【application/octet-stream】编号为42,表示负载类型为二进制格式。

  【application/exi】编号为47,表示负载类型为“精简XML”格式。(翻译不一定准确)

  另外,还有一种格式也北IANA认定,也会在CoAP协议中广泛使用那便是CBOR格式,该格式可理解为二进制JSON格式。

  【applicaiton/cbor】编号为60。

  6 示例

  该示例来自于RFC7252。

  【流程描述】

  CoAP客户端通过GET方法从Server端获得温度传感器数据,CoAP URI如下

  coap://www.server.com/temperautre

  CoAP请求采用CON报文,Server接收到CON报文必须返回一个ACK报文。CoAP请求采用0.01 GET方法,若操作成功CoAP Server返回2.05 Content,相当于HTTP 200 OK。请求和响应的MID必须完全相同,此处为0x7d34。请求响应中的Token域为空。CoAP请求中包含Option,该Option的类型为Uri-Path,那么Option Delta的值为0+11=11,Option Value的值为字符串形式的“temperature”。CoAP返回中包含温度数据,使用字符串形式描述,具体值为"22.3"。

图6.1 CoAP 请求响应流程

  图6.1 CoAP 请求响应流程

  【格式描述】

图6.2 CoAP请求响应具体格式

  图6.2 CoAP请求响应具体格式

  7 总结

  一旦熟悉了CoAP协议的格式,那么再学习CoAP协议的应用就轻松多了。


http://chatgpt.dhexx.cn/article/XJrlTrDj.shtml

相关文章

COAP学习笔记

文章目录 一、UDP协议简介二、COAP协议2.1 COAP简介2.2 CoAP消息报文结构i CoAP消息结构 - 消息类型 详解ii CoAP消息结构 - Requset/Response Code 详解iii CoAP消息结构 - Option 详解 2.3 CoAP观察模式2.4 COAP的安全性 三、根据阿里云COAP规范,分析并构建十六进制的报文3.1…

CoAP

CoAP是受限的应用协议(Contrained Application Protocol)的代名词. CoAP是一种应用层协议, 它运行于UDP协议之上. 参考: https://blog.csdn.net/xukai871105/article/details/45167069 CoAP协议综述 和其他TCP IP协议簇中的协议一样, CoAP协议总是以"头"的形式出现…

COAP详解

COAP协议学习 1分析工具 网络包分析利器:wiresharkCOAP协议客户端、服务端:wakaama 源码地址辅助编译工具cmake3:由于wakaama对cmake有版本要求 源码地址 ** 文章后附上wakaama、cmake3编译、使用方法及安装步骤等 2COAP协议介绍 Coap&am…

CoAP协议及开源实现

1. CoAP协议的简单介绍 CoAP是一种面向网络的协议,采用了与HTTP类似的特征,核心内容为资源抽象、REST式交互以及可扩展的头选项等。这些关键特征使得因特网由简单的文档检索机制(World Wide Web)演进成为现在繁荣的应用平台(Web 2.0)。HTTP作为IETF 成功…

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

0 前言 CoAP是受限制的应用协议(Constrained Application Protocol)的代名词。在当前由PC机组成的世界,信息交换是通过TCP和应用层协议HTTP实现的。但是对于小型设备而言,实现TCP和HTTP协议显然是一个过分的要求。为了让小设备可以接入互联网&#xff0c…

CoAP协议学习——CoAP基础

【 原连接地址】 更多CoAP文章请参考博文索引——【 物联网学习笔记——索引博文】 推广 《IoT开发实战:CoAP卷》已经由机械工业出版社出版,如果想学习CoAP的更多内容请于淘宝、天猫或京东平台搜索"CoAP"。 什么是CoAP CoAP是受限制的应用协议(Constraine…

COAP介绍

什么是COAP CoAP是受限制的应用协议(Constrained Application Protocol)的代名词。在最近几年的时间中,专家们预测会有更多的设备相互连接,而这些设备的数量将远超人类的数量。在这种大背景下,物联网和M2M技术应运而生。虽然对人而言&#xf…

时序数据库InfluxDB和关系型数据库MySQL的区别及适用场景

数据库主要分为关系型数据库和非关系型数据库,大家所熟悉的数据库中,属Oracle、MySQL和Microsoft SQL Server最出名,使用人数最多,这三种都属于关系型数据库,之所以使用人数这么多,是因为关系型数据库符合大…

vm时序数据库-导入数据

时间序列数据可以通过任何支持的摄取协议导入: Prometheus remote_write API. See these docs for details.DataDog submit metrics API. See these docs for details.InfluxDB line protocol. See these docs for details.Graphite plaintext protocol. See these …

三种常用时序数据库对比调研-InfluxDB、Prometheus、IotDB

1、引言 时序数据治理是数据治理领域核心、打通IT与OT域数据链路,是工业物联网基石、大数据价值创造的关键、企业管理提升的发动机、是数字化转型的重要支撑。 工业企业在生产经营过程中,会运用物联网技术,采集大量的数据并进行实时处理&am…

时序数据 mysql存储_【时序数据库】时序数据库介绍

1.基本概念 时序数据库(Time Series Database)是用于存储和管理时间序列数据的专业化数据库。时序数据库特别适用于物联网设备监控和互联网业务监控场景。 下面介绍下时序数据库的一些基本概念(不同的时序数据库称呼略有不同)。 1.1 度量(metric) 监测数据的指标,例如风力和温…

mysql 时序数据库_时序数据库介绍和使用(转)

1.基础 1.1 时序数据的定义 什么是时间序列数据(Time Series Data,TSD,以下简称时序)从定义上来说,就是一串按时间维度索引的数据。用描述性的语言来解释什么是时序数据,简单的说,就是这类数据描述了某个被测量的主体在一个时间范围内的每个时间点上的测量值。它普遍存在于…

关于时序数据库

https://blog.csdn.net/ransom0512/article/details/78114167 看了一些时序数据库,没有太深入,有一些大概认识,记录下来。 1. 核心 数据存储分为行存储或者列存储,由于列存储的高压缩比,现在使用列存储的比较多一…

时序数据库Machbase

Background 最近偶然接触到Machbase,发现相关信息很少,于是自己做了一些简单的了解,这里记录下,方便有兴趣的童靴参考哈。 1、官方介绍 Machbase是韩国的一家公司开发的一款类似InfluxDB、DolphinDB、TDengine等时序数据库产品&am…

用友:时序数据库要更懂业务场景

本文来自IT168 作者卢敏 时序数据库是针对时间戳或时间序列数据优化的数据库。比如工业企业为了管好工业设备,需要用传感器收集一些带有时间标签的数据,这些数据既要求“超大规模数据瞬时写入”,又要求实现乱序管理。 用友网络助理总裁何冠…

InfluxDB时序数据库

InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。 InfluxDB有三大特性: Time Series (时间序列&#xff…

【技术选型】时序数据库选型

文章目录 1、前言2、概述2.1 时序数据库的定义2.2 时序数据库的概念2.3 时序数据库的趋势 3、时序数据库对比3.1 influxdb3.2 Prometheus3.3 TDengine3.4 DolphinDB 4、选型结论 1、前言 时序数据治理是数据治理领域核心、打通IT与OT域数据链路,是工业物联网基石、…

mysql时序性数据库_时序数据库入门

数据库的模型包含关系型、key-value 型、Document 型等很多种,那么为什么新型的时序数据库成为监控数据存储的新宠呢? 下面就会从 为什么需要时序数据库? 时序数据库的数据结构 两个方面来介绍一下时序数据库。 1. 为什么需要时序数据库 1.1 …

时序数据库详解和使用

1.基础 1.1 时序数据的定义 什么是时间序列数据(Time Series Data,TSD,以下简称时序)从定义上来说,就是一串按时间维度索引的数据。用描述性的语言来解释什么是时序数据,简单的说,就是这类数据描…

时序数据库 InfluxDB

目录 一、介绍 二、安装 三、inflxudb保留字 四、基本语法 1、客户端操作 1. 数据库操作 2. 数据表和数据操作 3. series 操作 4.Shard 5. 用户操作 2、API操作 状态码 3、Java操作 五、常用函数 六、存储策略 1.查看策略 2.创建策略 3、修改策略 4. 删除…