CoAP协议接入

article/2025/8/19 10:55:48

在这里插入图片描述

 CoAP协议规范

本小节介绍物联网平台支持的CoAP协议规范。

协议版本

支持RFC 7252 Constrained Application Protocol协议,更多信息,请参见RFC 7252。

通道安全

使用DTLS v1.2保证通道安全,更多信息,请参见DTLS v1.2。

开源客户端

CoAP Technology。

说明 若使用第三方代码,阿里云不提供技术支持。

使用限制

  • 仅华东2(上海)、华北2(北京)、华南1(深圳)地域支持CoAP通信。
  • 暂时不支持资源发现。
  • 仅支持UDP协议,目前支持DTLS和对称加密两种安全模式。
  • 设备身份注册成功后,针对同一设备身份信息,只可选择一种通信协议接入物联网平台,不可多种类型通信协议同时混用。

使用说明

  • CoAP的URI资源和MQTT Topic保持一致,请参见MQTT协议规范。
  • Topic规范与MQTT Topic规范一致,CoAP协议内coap://host:port/topic/${topic}接口中的${topic}可以复用MQTT Topic。
  • 客户端缓存认证返回的Token是请求的令牌。
  • 传输的数据大小依赖于MTU的大小,建议在1 KB以内。
  • 如果设备在10分钟内使用CoAP协议上报过数据,则设备在物联网平台控制台显示为在线状态。

CoAP连接通信

物联网平台支持CoAP协议连接通信。CoAP协议适用在资源受限的低功耗设备上,尤其是NB-IoT的设备使用。本文介绍基于CoAP协议进行设备接入的流程,及使用DTLS和对称加密两种认证方式下的自主接入流程。

基础流程

基于CoAP协议将NB-IoT设备接入物联网平台的流程如下图所示。

coap

序号描述
在设备端NB-IoT模块中,集成阿里云物联网平台SDK。厂商在物联网平台控制台申请设备证书(ProductKey、DeviceName和DeviceSecret)并烧录到设备中。
NB-IoT设备通过运营商的蜂窝网络进行入网。需要联系当地运营商,确保设备所属地区已经覆盖NB网络,并已具备NB-IoT入网能力。
设备入网成功后,NB设备产生的流量数据及产生的费用数据,将由运营商的M2M平台管理。此部分平台能力由运营商提供。
设备开发者可通过CoAP/UDP协议,将设备采集的实时数据上报到阿里云物联网平台,借助物联网平台,实现海量亿级设备的安全连接和数据管理能力。并且,可通过规则引擎,将数据转发至阿里云的大数据产品、云数据库、表格存储等服务中进行处理。
物联网平台提供相关的数据开放接口和消息推送服务,可将数据转发到业务服务器中,实现设备资产与实际应用的快速集成。

使用对称加密自主接入

  1. 连接CoAP服务器。

    Endpoint地址:公共实例和企业版实例中,CoAP的接入域名,请参见查看实例终端节点。

  2. 设备认证。

    设备认证请求:

    POST /auth
    Host: ${YourEndpoint}
    Port: 5682
    Accept: application/json or application/cbor
    Content-Format: application/json or application/cbor
    payload: {"productKey":"a1NUjcV****","deviceName":"ff1a11e7c08d4b3db2b1500d8e0e55","clientId":"a1NUjcV****&ff1a11e7c08d4b3db2b1500d8e0e55","sign":"F9FD53EE0CD010FCA40D14A9FE******", "seq":"10"}
    表 1. 设备认证参数说明
    参数说明
    Method请求方法,只支持POST方法。
    URLURL地址,取值:/auth
    HostEndpoint地址。
    Port端口,取值:5682
    Accept设备接收的数据编码方式。目前,支持两种方式:application/json和application/cbor。
    Content-Format设备发送给物联网平台的上行数据的编码格式,目前,支持两种方式:application/json和application/cbor。
    payload设备认证信息内容,JSON数据格式。具体参数,请参见下表Payload说明。
    表 2. Payload 说明
    字段名称是否必需说明
    productKey设备证书信息中ProductKey的值,是物联网平台为产品颁发的全局唯一标识。可从物联网平台控制台对应实例下的设备详情页获取。
    deviceName设备证书信息中DeviceName的值,在注册设备时自定义或自动生成的设备名称。可从物联网平台控制台对应实例下的设备详情页获取。
    ackMode通信模式。取值:
    • 0:request/response是携带模式,即客户端发送请求到服务端后,服务端处理完业务,回复业务数据和ACK。
    • 1:request/response是分离模式,即客户端发送请求到服务端后,服务端先回复一个确认ACK,然后再处理业务,回复业务数据。

    若不传入此参数,则默认为携带模式。

    sign签名。

    您需将根据签名计算方法signmethod(DeviceSecret,content)计算出的值,作为sign的值。支持hmacmd5和hmacsha1方法。

    签名计算所需参数:

    • signmethod:签名方法,需与您的传入signmethod取值一致。
    • DeviceSecret:设备的DeviceSecret。可在物联网平台控制台对应实例下的设备详情页查看。
    • content:是将所有提交给服务器的参数(除version、sign、resources和signmethod外),按照英文字母升序,依次拼接排序(无拼接符号)。

      说明 用于签名计算的参数值需与设备认证请求中提交的参数值一致。

    签名计算示例:

    hmac_md5(mRPVdzSMu2nVBxzK77ERPIMxSYIv****, clientIda1NUjcV****&ff1a11e7c08d4b3db2b1500d8e0e55deviceNameff1a11e7c08d4b3db2b1500d8e0e55productKeya1NUjcV****seq10timestamp1524448722000)
    signmethod算法类型,支持hmacmd5和hmacsha1。默认是hmacmd5。
    clientId客户端ID,长度需在64字符内。建议使用设备的MAC地址或SN码作为clientId的值。
    timestamp时间戳。目前,时间戳不做时间窗口校验。
    seq认证消息中携带的序号,是设备端生成的随机数。

    返回结果示例:

    {"random":"ad2b3a5eb51d6****","seqOffset":1,"token":"MZ8m37hp01w1SSqoDFzo001050****.ad2b"}
    表 3. 返回参数说明
    字段名称说明
    random用于后续上、下行加密,组成加密Key。
    seqOffset认证seq偏移初始值。
    token设备认证成功后,返回的Token值。
  3. 上报数据。

    上报数据请求:

    POST /topic/${topic}
    Host: ${YourEndpoint}
    Port: 5682
    Accept: application/json or application/cbor
    Content-Format: application/json or application/cbor
    payload: ${your_data}
    CustomOptions: number:2088, 2089
    表 4. 上报数据参数说明
    字段名称是否必需说明
    Method请求方法,只支持POST方法。
    URL传入格式:/topic/${topic}。其中,变量${topic}需替换为设备数据上行Topic。
    HostEndpoint地址。
    Port端口,取值:5682
    Accept设备接收的数据编码方式。目前,支持两种方式:application/json和application/cbor。
    Content-Format上行数据的编码格式,服务端对此不做校验。目前,支持两种方式:application/json和application/cbor。
    payload待上传的数据经高级加密标准(AES)加密后的数据。

    说明 AES加密时,Transform为AES/CBC/PKCS5Padding, 初始向量IV为543yhjy97ae7fyfg,Key由sha256算法生成。

    Key生成示例:

    假设deviceSecret=zPwChiLh0EaifR809D5Rc6LDIC6A****,设备认证返回random=8fe3c8d50e10****
    1. 将deviceSecret和random按照${deviceSecret},${random}格式组成以下字符串。
      zPwChiLh0EaifR809D5Rc6LDIC6A****,8fe3c8d50e10****
    2. 使用sha256对以上字符串的UTF-8编码结果进行加密,并转换为16进制字符串。
      59ea5ac1cb092e5910c405821119959e5297516d185b71e344735cf3f268****
    3. 从上一步得到的字符串的第17位开始,截取长度为32位的字符串(subString(16,48)),得到密钥。
      10c405821119959e5297516d185b71e3
    CustomOptionsoption值有20882089两种类型:
    • 2088:表示token,取值为设备认证后返回的token值。

      说明 每次上报数据都需要携带token信息。如果token失效,需要重新进行设备认证,获取token。

    • 2089:表示seq,取值需比设备认证后返回的seqOffset值更大,且在认证生效周期内不重复的随机值。建议设置为根据每次请求数据包中的seq递增值,使用上一栏所介绍的方法进行AES加密填充。

    option返回示例:

    number:2090

    2090:表示物联网平台的云端消息ID。

    token和seq除了写在options中,还可以写在URL中,例如/topic/${topic}?token=xxxx&seq=xxxxx。如果同时存在于options和URL中,以options为准。

    消息上行成功后,返回成功状态码,同时返回物联网平台生成的消息ID。

使用DTLS自主接入

  1. 连接CoAP服务器。

    Endpoint地址:公共实例和企业版实例中,CoAP的接入域名,请参见查看实例终端节点。

  2. 如果您使用阿里云提供的设备端SDK,则DTLS安全通道默认使用PSK加密算法。如果您未使用阿里云提供的设备端SDK,则需要下载DTLS安全通道根证书,自行使用DTLS库连接物联网平台,PSK对应的加密方式如下:
    psk_id: "${authType}" + "|" + "${signMethod}" + "|" + "${productKey}" + "&" + "${deviceName}" + "timestamp"
    psk: signMethod(DeviceSecret, "${productKey}" + "&" + "${deviceName}" + "${timestamp}")
    表 5. 字段说明
    字段是否必需说明
    authType认证类型,这里设为固定值:devicename。
    signMethod算法类型,支持hmacmd5、hmacsha1、hmacsha256。
    productKey设备所属产品的ProductKey。
    deviceName设备名称,DeviceName。
    DeviceSecret设备的DeviceSecret
    timestamp时间戳。
  3. 设备认证。使用auth接口认证设备,获取Token。上报数据时,需携带Token信息。

    设备认证请求:

    POST /auth
    Host: ${YourEndpoint}
    Port: 5684
    Accept: application/json or application/cbor
    Content-Format: application/json or application/cbor
    payload: {"productKey":"ZG1EvTE****","deviceName":"NlwaSPXsCpTQuh8FxBGH","clientId":"mylight1000002","sign":"bccb3d2618afe74b3eab12b94042****"}

    除 Port参数外,其他参数及Payload内容说明,可参见使用对称加密自主接入。

    返回结果示例:

    response:{"token":"f13102810756432e85dfd351eeb4****"}
    表 6. 返回码说明
    Code描述Payload备注
    2.05Content认证通过:Token对象正确请求。
    4.00Bad Requestno payload请求发送的Payload非法。
    4.01Unauthorizedno payload未授权的请求。
    4.03Forbiddenno payload禁止的请求。
    4.04Not Foundno payload请求的路径不存在。
    4.05Method Not Allowedno payload请求方法不是指定值。
    4.06Not Acceptableno payloadAccept不是指定的类型。
    4.15Unsupported Content-Formatno payload请求的content不是指定类型。
    5.00Internal Server Errorno payloadauth服务器超时或错误。
  4. 上行数据。设备通过指定自定义Topic将数据发送到物联网平台。

    可在物联网平台控制台,设备所属产品的产品详情页面的Topic类列表中,创建自定义Topic。仅支持发布权限的Topic用于数据上报。

    例如:Topic为/${YourProductKey}/${YourDeviceName}/pub,假设当前设备名称为device,所属产品的ProductKey为a1GFjLP****,那么您可使用 a1GFjLP****.coap.cn-shanghai.link.aliyuncs.com:5684/topic/a1GFjLP****/device/pub 地址来上报数据。

    上报数据请求:

    POST /topic/${topic}
    Host: ${YourEndpoint}
    Port: 5684
    Accept: application/json or application/cbor
    Content-Format: application/json or application/cbor
    payload: ${your_data}
    CustomOptions: number:2088
    表 7. 上报数据请求参数说明
    参数是否必需说明
    Method请求方法。支持POST方法。
    URL/topic/${topic}。其中,变量${topic}需替换为当前设备对应的Topic。
    HostEndpoint地址。
    Port端口,取值:5684
    Accept设备接收的数据编码方式。目前,支持两种方式:application/json和application/cbor。
    Content-Format上行数据的编码格式,服务端对此不做校验。目前,支持两种方式:application/json和application/cbor。
    CustomOptions
    • number取值:2088
    • token为设备认证(auth)返回的token值。

    说明 每次上报数据都需要携带token信息。如果token失效,需要重新进行设备认证,获取token。

示例

设备通过CoAP协议接入物联网平台的示例,请参见CoAP客户端对称加密接入示例。

 


http://chatgpt.dhexx.cn/article/3IPHoFqR.shtml

相关文章

干货 | CoAP协议例析

点击上方“中兴开发者社区”,关注我们 每天读一篇一线开发者原创好文 在物联网领域中,MQTT和CoAP是最主要的两个应用协议。MQTT(Message Queuing Telemetry Transport/消息队列遥测传输)是基于TCP的发布/订阅方式的应用协议&#…

CoAP协议简介

学习CoAP最简单的方法便是阅读协议文档。该协议文档并不是那么复杂。当然如果有一个CoAP的简单介绍那就再好不过了。 什么是CoAP CoAP是受限制的应用协议(Constrained Application Protocol)的代名词。在最近几年的时间中,专家们预测会有更多的设备相互连接&#xf…

CoAP 协议学习

CoAP 协议学习 2014年左右智能家居异常火热,由于高效的端到端订阅推送特性,使得MQTT成为了智能家居的首选协议。因此目前各大云平台中,MQTT基本成了标配。 物联网另一个应用协议 CoAP 协议则相对低调,不过由于 NB-IoT 的推出&am…

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

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

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…