精华内容
下载资源
问答
  • CoAP协议2.1 协议简介2.2 协议特点2.3 协议请求模型2.4 协议消息类型2.5 协议消息结构2.6 协议URL3.示例 —— 请求温度4. ESP-CoAP 授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力。...
    展开全文
  • 1.CoAP协议简介Coap是一种在物联网世界的类web协议,它的详细规范定义在 RFC 7252。COAP名字翻译来就是“受限应用协议”,顾名思义,使用在资源受限的物联网设备上。物联网设备的ram,rom都通常非常小,不能运行TCP...

    1.CoAP协议简介

    Coap是一种在物联网世界的类web协议,它的详细规范定义在 RFC 7252。COAP名字翻译来就是“受限应用协议”,顾名思义,使用在资源受限的物联网设备上。物联网设备的ram,rom都通常非常小,不能运行TCP和HTTP协议

    2.CoAP协议特点

    基于消息模型,以消息为数据通信载体,通过交换网络消息来实现设备间数据通信

    对云端设备资源操作都是通过请求与响应机制来完成,类似 HTTP,设备端可通过4个请求方法(GET, PUT, POST, DELETE)对服务器端资源进行操作;

    协议包轻量,最小长度仅为 4B;

    支持可靠传输,通过确认和数据重传确保数据可靠到达;

    支持IP多播, 即可以同时向多个设备发送请求;

    非长连接通信,适用于低功耗物联网场景,因为其基于UDP协议,为短连接

    3.CoAP协议数据包分析

    1.CoAP数据包报文解析

    1.CoAP消息头

    CoAP消息传输是基于UDP的,即其上层为UDP协议.UDP数据包有报头和数据内容,其中数据内容里面就封装了CoAP消息,此处重点分析CoAP报文

    CoAP报文格式如图

    6ea3f860220f

    1.Ver(2bit)为版本号用于指示CoAP协议的版本号

    2.T(2bit)为CoAP协议定了4种不同形式的报文,CON报文,NON报文,ACK报文和RST报文。

    T

    名称

    0

    CON报文,一般使用

    1

    NON报文

    2

    ACK报文

    3

    RST报文

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

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

    请求码:

    Code

    请求方式

    00

    01

    GET

    02

    POST

    03

    PUT

    04

    DELETE

    响应码:

    2.xx:代表请求已成功被服务器接收、理解、并接受

    6ea3f860220f

    4.xx:代表了客户端可能发生了错误

    6ea3f860220f

    6ea3f860220f

    5.xx:代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器的软硬件资源无法完成对请求的处理.

    6ea3f860220f

    5.Message ID(16bit):报文编号,每条消息的ID唯一

    6.Token:可有可无,标识符具体内容,通过TKL指定Token长度。通过token,客户端收到响应后,取出Token,就可以知道该响应是针对之前哪个请求回复的。

    7.Options:报文选项,通过报文选项可设定CoAP主机,CoAP URI,CoAP请求参数和负载媒体类型等等。

    其中关注Option Length和Option Value,前者表示资源路径长度,后者指具体资源路径

    8.1111 1111:CoAP报文和具体负载之间的分隔符。

    2.CoAP消息体:

    Payload:实际携带数据内容, 若有携带数据, 前面加payload 标志 OxFF。

    2.测试环境搭建

    我们在本地端通过python搭建一个客户端和服务端,其中客户端每5秒向服务端发送一次数据,数据内容为Hello world!

    3.CoAP数据包获取

    通过Wireshark抓包获取

    运行Python端程序后开始抓包,添加如下过滤规则udp.port == 5683,其中5683为CoAP协议默认端口

    之后可获取如下数据包

    42 03 c7 73 66 76 b5 62 61 73 69 63 ff 48 65 6c 6c 6f 20 77 6f 72 6c 64 21

    具体解析如下

    数据包

    含义

    42

    版本号为1且为CON报文

    03

    PUT请求

    c7 73

    Message ID

    66 76

    Token

    b5

    Option Delta:11 Option length:5字节

    62 61 73 69 63

    资源路径名,此处为"basic"

    ff

    分隔符

    48 65 6c 6c 6f 20 77 6f 72 6c 64 21

    发送的消息:"Hello world!"

    4.UDP模拟CoAP

    1.本地测试

    直接打开网络调试工具,创建一个客户端,在Python端运行服务器程序,之后将上面数据包直接当作UDP数据包发送,此时会发现服务器收到了数据

    网络调试工具配置如下:

    6ea3f860220f

    2.远程测试:

    通过EMQ的coap插件将CoAP协议数据转成MQTT数据,方便上层软件进行MQTT订阅

    发送消息路径path命名规则如下:/mqtt/{any_topicname}?c={clientid}&u={username}&p={password}

    any_topicname:发布的主题

    clientid:客户端ID,此项不可重复

    username:用户名

    password:密码

    示例:/mqtt/topic1?c=client1&u=tom&p=secret

    展开全文
  • CoAP协议详解.ppt

    2020-01-22 17:06:44
    本文档是coap协议详解的PPT,可以当作培训学习使用的教材,内容介绍详细齐全,可以供初学者学习,或者复习使用,coap协议应用范围广,欢迎下载
  • 对于CoAP协议的学习,这份100多页的文档肯定没法背下来。我们只需把协议当作工具书,大体知道主体的内容,在遇到细节问题时再去具体章节找问题。 本篇笔记中先对 CoAP 协议内容做个基础了解,然后搬出重量级干货...

    1 前言

    对于CoAP协议的学习,这份100多页的文档肯定没法背下来。我们只需把协议当作工具书,大体知道主体的内容,在遇到细节问题时再去具体章节找问题。

    本篇笔记中先对 CoAP 协议内容做个基础了解,然后搬出重量级干货《coap-cheatsheet_note.pdf》,最后展示出协议附录中的示例。

    这是本能手的学习记忆路线,希望对您有所帮助。

    小能手正在学习 CoAP 协议,CoAP协议学习笔记可点此查看

    2 基础了解

    2.1 CoAP消息类型

    CoAP采用与HTTP协议相同的请求响应工作模式。CoAP协议共有4中不同的消息类型。
    CON——需要被确认的请求,如果CON请求被发送,那么对方必须做出响应。
    NON——不需要被确认的请求,如果NON请求被发送,那么对方不必做出回应。
    ACK——应答消息,接受到CON消息的响应。
    RST——复位消息,当接收者接受到的消息包含一个错误,接受者解析消息或者不再关心发送者发送的内容,那么复位消息将会被发送。

    2.2 CoAP帧格式

    一个CoAP消息最小为4个字节,以下是CoAP协议不同部分的描述。
    【版本Version】:类似于IPv6和IPv6,仅仅是一个版本号。
    【消息类型Message Type】:CON,NON,ACK,RST。
    【消息ID Message ID】:每个CoAP消息都有一个ID,在一次会话中ID总是保持不变。但在这个会话之后该ID会被回收利用。
    【标记 Token】:标记是ID的另一种表现。
    【选项 Options】:CoAP选项类似于HTTP请求头,它包括CoAP消息本身,例如CoAP端口号,CoAP主机和CoAP查询字符串等。
    【负载Payload】:真正有用的被交互的数据。

    2.3 CoAP的URL

    在HTTP的世界中,RESTFul协议由于其简单性和适用性,在WEB应用中越来越受欢迎,这样的道理同样适用于CoAP。一个CoAP资源可以被一个URI所描述,例如一个设备可以测量温度,那么这个温度传感器的URI被描述为:CoAP://machine.address:5683/sensors/temperature。请注意,CoAP的默认UDP端口号为5683。

    2.4 CoAP观察模式

    在物联网的世界中,你需要去监控某个传感器例如温度或湿度等。在这种情况下,CoAP客户端并不需要不停的查询CoAP服务器端的数据变化情况。CoAP客户端可以发送一个观察请求到服务器端。从该时间点开始计算,服务器便会记住客户端的连接信息,一旦温度发生变化,服务器将会把新结果发送给客户端。如果客户端不在希望获得温度检测结果,那么客户端将会发送一个RST复位请求,此时服务器便会清除与客户端的连接信息。

    2.5 CoAP块传输

    CoAP协议的特点是传输的内容小巧精简,但是在某些情况下不得不传输较大的数据。在这种情况下可以使用CoAP协议中的某个选项设定分块传输的大小,那么无论是服务器或客户端可完成分片和组装这两个动作。

    3 一张表

    国外网友有一张 CheatSheet,把CoAP的主体内容都涵盖进来。我在上面增加了一些备注,方便消化理解。

    小能手的一番心意,嘿嘿,读者朋友们请收下。

    点此下载

    4 示例

    RFC7252 在协议最后的附录中有给了3个很好的示例。

    1.获取温度数据,最简格式。

    2.获取温度数据,增加了 token。

    3.获取温度数据,重传。

    4 END


    展开全文
  • CoAP协议学习笔记可点此查看。 1 前言 在 CoAP 协议 RFC7252 的第9章 Securing CoAP ,即是本译文内容。 2 协议翻译 9.1 DTLS加密 正如使用TCP上的传输层加密协议(TLS)保护HTTP一样,...

    CoAP协议学习笔记可点此查看

    1 前言

    在 CoAP 协议 RFC7252 的第9章 Securing CoAP ,即是本译文内容。

    2 协议翻译

    9.1 DTLS加密

    正如使用TCP上的传输层加密协议(TLS)保护HTTP一样,CoAP使用UDP上的数据报TLS协议(DTLS)[RFC6347]来进行加密。 本节定义了对DTLS的CoAP绑定,以及适用于受限环境的最小必须执行的配置。绑定由基于单播CoAP的一系列的增量来定义。 在实践中,DTLS是在TLS基础上,还对UDP传输不可靠特性进行额外的处理。

    		+----------------------+
    		| Application |
    		+----------------------+
    		+----------------------+
    		| Requests/Responses |
    		|----------------------| CoAP
    		| Messages |
    		+----------------------+
    		+----------------------+
    		| DTLS |
    		+----------------------+
    		+----------------------+
    		| UDP |
    		+----------------------+
    

    图.DTLS加密的抽象分层

    在一些受限制的节点(有限的Flash或RAM)和网络(有限的带宽或高可扩展性要求)中,并且取决于正在使用的加密套件,DTLS的所有模式可能不适用。一些DTLS加密套件可能会增加重要的实现复杂性,并且在设置安全关联时需要一些初始握手开销。一旦初始握手完成后,DTLS增加了一个有限的每个数据报的开销大约为13个字节,不包括任何初始化矢量/随机数(例如 TLS_PSK_WITH_AES_128_CCM_8 占用8个字节 [RFC6655]),还有完整性校验值(例如 TLS_PSK_WITH_AES_128_CCM_8 占用8个字节[ RFC6655])以及密码套件所需的字节填充。给定模式的DTLS是否适用于CoAP应用,需要重点考虑具体可用的密码套件,会话的维护是否兼容应用程序流,资源是否满足受限节点和增加的网络开销。(对于某些使用DTLS的模式,本规范确定了一个强制实施的密码套件,这是一个实现要求,以便在这些密码套件确实合适的情况下实现互操作性的最大化。应用程序的特定安全策略可以确定实际可以使用的密码套件组)。DTLS不适用于组密钥(多播通信);但是,它可能是未来组密钥管理协议中的组件。

    9.1.1 消息层 Messaging Layer

    充当CoAP客户端的端点也应该充当DTLS客户端。它应该在适当的端口上向服务器启动一个会话。 当DTLS握手完成时,客户端可以发起第一个CoAP请求。所有的CoAP消息务必作为DTLS“应用数据”发送。

    添加以下规则以将 Acknowledgement 消息或 Reset 消息与 Confirmable 消息或针对 Non-confirmable 消息的 Reset 消息进行匹配:DTLS 会话必须相同,并且 epoch 必须相同。

    在相同的DTLS会话 和 同一个时间段内发送并具有相同的消息ID时,认为消息是相同的。

    注意:当 Confirmable 消息重传的时候,每次尝试需要使用新的 DTLS 序列号,即使 CoAP Message ID 保持一致。因此接收端要做下去重处理。在跨时间段epoch后,不能执行重传。

    RawPublicKey 和 Certificate 模式中的DTLS连接使用相互认证来建立,以便它们可以保持并重复用于未来在任何方向上的消息交换。 设备可以在需要恢复资源时关闭DTLS连接,但通常它们应该尽可能长时间保持连接。 每次CoAP消息交换后关闭DTLS连接效率非常低。

    9.1.2. 请求/回复层 Request/Response Layer

    添加以下规则以匹配对请求的响应:DTLS会话必须相同,并且时间段epoch必须相同。 这意味着对DTLS安全请求的响应必须始终使用相同的安全会话和时期进行DTLS安全保护。 任何尝试提供对DTLS请求的NoSec响应都不符合请求,因此必须被拒绝(除非它确实匹配不相关的NoSec请求)。

    9.1.3. 端点ID Endpoint Identity

    设备应该支持服务器名称指示(SNI),以在[RFC6066]的第3节中定义的SNI主机名字段中指示其权限。 这是必需的,以便当充当多个权威的虚拟服务器的主机接收到新的DTLS连接时,它知道哪些密钥用于DTLS会话。

    9.1.3.1. Pre-Shared Keys
    9.1.3.2. Raw Public Key Certificates
    9.1.3.3. X.509 Certificates

    Implementations in Certificate Mode MUST support the mandatory-toimplement cipher suite TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 as specified in [RFC7251], [RFC5246], and [RFC4492]. Namely, the certificate includes a SubjectPublicKeyInfo that indicates an algorithm of id-ecPublicKey with namedCurves secp256r1 [RFC5480]; the public key format is uncompressed [RFC5480]; the hash algorithm is SHA-256; if included, the key usage extension indicates digitalSignature. Certificates MUST be signed with ECDSA using secp256r1, and the signature MUST use SHA-256. The key used MUST be ECDSA capable. The curve secp256r1 MUST be supported [RFC4492]; this curve is equivalent to the NIST P-256 curve. The hash algorithm is SHA-256. Implementations MUST use the Supported Elliptic Curves and Supported Point Formats Extensions [RFC4492]; the uncompressed point format MUST be supported; [RFC6090] can be used as an implementation method.

    证书模式下的实现必须支持[RFC7251],[RFC5246]和[RFC4492]中规定的强制实现密码套件TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8。 即,证书包括SubjectPublicKeyInfo,其指示具有namedCurves secp256r1 [RFC5480]的id-ecPublicKey的算法; 公钥格式是未压缩的[RFC5480]; 散列算法是SHA-256; 如果包含,则密钥使用扩展指示digitalSignature。 证书务必使用secp256r1使用ECDSA进行签名,签名必须使用SHA-256。 使用的密钥必须是ECDSA的能力。 曲线secp256r1务必支持[RFC4492]; 这条曲线相当于NIST P-256曲线。 散列算法是SHA-256。 实现必须使用支持的椭圆曲线和支持点格式扩展[RFC4492]; 未压缩的点格式必须被支持; [RFC6090]可以用作实现方法。

    The subject in the certificate would be built out of a long-term unique identifier for the device such as the EUI-64 [EUI64]. The subject could also be based on the Fully Qualified Domain Name (FQDN) that was used as the Host part of the CoAP URI. However, the device’s IP address should not typically be used as the subject, as it would change over time. The discovery process used in the system would build up the mapping between IP addresses of the given devices and the subject for each device. Some devices could have more than one subject and would need more than a single certificate.

    证书中的主题将由设备的长期唯一标识符构成,例如EUI-64 [EUI64]。 主题也可以基于用作CoAP URI主机部分的完全限定域名(FQDN)。 但是,设备的IP地址通常不应该用作主题,因为它会随着时间而改变。 系统中使用的发现过程将建立给定设备的IP地址与每个设备的主题之间的映射。 有些设备可能有多个主题,需要的不止一个证书。

    When a new connection is formed, the certificate from the remote device needs to be verified. If the CoAP node has a source of absolute time, then the node SHOULD check that the validity dates of the certificate are within range. The certificate MUST be validated as appropriate for the security requirements, using functionality equivalent to the algorithm specified in Section 6 of [RFC5280]. If the certificate contains a SubjectAltName, then the authority of the request URI MUST match at least one of the authorities of any CoAP URI found in a field of URI type in the SubjectAltName set. If there is no SubjectAltName in the certificate, then the authority of the request URI MUST match the Common Name (CN) found in the certificate using the matching rules defined in [RFC3280] with the exception that certificates with wildcards are not allowed.

    当新连接形成时,需要验证来自远程设备的证书。 如果CoAP节点有绝对时间源,那么节点应该检查证书的有效日期是否在范围内。 必须根据安全要求验证证书,使用与[RFC5280]第6节中规定的算法等效的功能。 如果证书包含SubjectAltName,那么请求URI的权限必须至少匹配SubjectAltName集合中URI类型字段中找到的任何CoAP URI的权限之一。 如果证书中没有SubjectAltName,则请求URI的权限必须与使用[RFC3280]中定义的匹配规则的证书中的Common Name(CN)匹配,但不允许使用带有通配符的证书。

    CoRE support for certificate status checking requires further study. As a mapping of the Online Certificate Status Protocol (OCSP) [RFC6960] onto CoAP is not currently defined and OCSP may also not be easily applicable in all environments, an alternative approach may be using the TLS Certificate Status Request extension (Section 8 of [RFC6066]; also known as “OCSP stapling”) or preferably the Multiple Certificate Status Extension ([RFC6961]), if available.

    CoRE支持证书状态检查需要进一步研究。 由于在线证书状态协议(OCSP)[RFC6960]到CoAP的映射目前尚未定义,并且OCSP也可能不容易适用于所有环境,因此另一种方法可能是使用TLS证书状态请求扩展(第8 [ RFC6066];也称为“OCSP装订”)或优选多证书状态扩展([RFC6961])(如果可用)。

    If the system has a shared key in addition to the certificate, then a cipher suite that includes the shared key such as TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA [RFC5489] SHOULD be used.

    如果系统除了证书之外还有共享密钥,则应使用包含共享密钥(例如TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA [RFC5489])的密码套件。

    End


    展开全文
  • coap协议详解

    2018-06-20 17:30:10
    详细的coap协议,适合新手进行学习~~~~ 详细的coap协议,适合新手进行学习~~~~ 详细的coap协议,适合新手进行学习~~~~
  • CoAP协议

    千次阅读 2018-08-29 17:07:00
    CoAP协议 CoAP架构 CoAP消息头格式 CoAP消息交换 HTTP与CoAP协议对比 CoAP协议 CoAP是约束应用协议的缩写形式。 CoAP协议在RFC 7252中规定。它是一种Web传输协议,用于受约束的节点或网络,如WSN,IoT,M2M等...
  • 1. COAP概述由于物联网中的很多设备都是资源受限型的,即只有少量的内存空间和有限的计算能力,所以传统的HTTP协议应用在物联网上就显得过于庞大而不适用。 IETF的CoRE工作组提出了一种基于REST架构的COAP协议。2. ...
  • 1 前言 前几年,Json比较火的时候,和朋友在讨论项目协议时就...小能手正在学习 CoAP 协议,其他物联网应用协议学习笔记可点此查看。 2 什么是CoAP? 在 CoAP 协议 RFC7252 首页的介绍能让大家有所理解...
  • 由于物联网中的很多设备都是资源受限型的,即只有少量的内存空间和有限的计算能力,所以传统的HTTP协议应用在物联网上就显得过于庞大而不适用。 IETF的CoRE工作组提出了一种基于REST架构的CoAP协议。CoAP是6LowPAN...
  • coap协议学习之搭建coap测试环境

    千次阅读 2020-03-30 19:48:32
    本篇目标:简单初步认识coap协议,以及怎么去测试自己搭建得coap协议应用。 材料准备: 55.0版本的火狐浏览器与copper插件() linux系统(搭建在虚拟机下的 Ubantu)与libcoap开源程序() COAP协议简单介绍 ...
  • 物联网应用coap协议

    千次阅读 2019-06-18 16:10:31
    CoAP(Constrained Application Protocol, 受限应用协议)协议是一种在低功耗低...CoAP协议非常的小巧,最小的数据包仅为4字节。CoAP适用于低功耗受限设备,一个内存为20KB的单片机就可以实现CoAP服务器或客户端。本...
  • coap协议总结

    2021-08-06 15:56:03
    文章目录coap协议一、coap协议基础1.1 什么是CoAp1.2 CoAp消息结构1.3 CoAP协议特点二、Message Format三、code3.1 请求3.2 响应四、Token4.1 Token生成方法4.2 报文分析五、option5.1 Critical/Elective5.2 Proxy ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,002
精华内容 800
关键字:

coap协议的应用