受限应用协议 —CoAP
限应用协议( CoAP ) 是一种基于 UDP 的专用互联网应用协议,其定义见RFC 7252(发布于 2014 年)。它使那些被称为“节点”的受限设备能够使用类似的协议与更广泛的互联网进行通信。
CoAP 的设计用途包括:同一受限网络(例如低功耗、有损网络)上的设备之间、设备与互联网上的一般节点之间,以及通过互联网连接的不同受限网络上的设备之间。CoAP 也可通过其他机制使用,例如移动通信网络上的短信 (SMS)。
CoAP 是一种应用层协议,旨在用于资源受限的互联网设备,例如无线传感器网络节点。CoAP 旨在轻松转换为HTTP,以简化与 Web 的集成,同时还能满足诸如多播支持、极低开销和简单性等特殊要求。多播、低开销和简单性对于物联网(IoT) 和机器对机器(M2M) 通信至关重要,因为这些通信往往是嵌入式的,并且内存和功耗远低于传统的互联网设备。因此,效率至关重要。CoAP 可以在大多数支持 UDP 或 UDP 类似协议的设备上运行。
互联网工程任务组 ( IETF ) 受限RESTful环境工作组 ( CoRE ) 已完成该协议的主要标准化工作。为了使该协议适用于物联网 (IoT) 和 M2M 应用,协议中添加了各种新功能。
规格
该协议的核心在RFC 7252中指定。目前已提出了各种扩展,特别是:
- RFC 7641 (2015) 观察受限应用协议中的资源
- RFC 7959 (2016) 受限应用协议 (CoAP) 中的块传输
- RFC 8323 (2018) 基于 TCP、TLS 和WebSockets 的CoAP(受限应用协议)
- RFC 8974 (2021) 受限应用协议 (CoAP) 中的扩展令牌和无状态客户端
消息格式
CoAP 使用两种消息类型:请求和响应,并采用简单的二进制报头格式。CoAP 默认绑定到UDP,也可选择绑定到DTLS,从而提供高级别的通信安全性。绑定到 UDP 时,整个消息必须包含在单个数据报中。当与RFC 4944 中定义的6LoWPAN一起使用时,消息应包含在单个IEEE 802.15.4帧中,以最大限度地减少碎片化。
如果省略令牌、选项和有效载荷字段,即仅包含 CoAP 报头,则最小的 CoAP 消息长度为 4 个字节。报头后跟令牌值(0 到 8 个字节),令牌值之后可能跟以优化的类型-长度-值格式的选项列表。报头、令牌和选项(如有)之后的任何字节都被视为消息有效载荷,其前缀为一个字节的“有效载荷标记”(0xFF)。有效载荷的长度由数据报长度决定。
CoAP消息
CoAP群组通信
在许多 CoAP 应用领域中,能够将多个 CoAP 资源作为一个组进行寻址,而不是单独寻址每个资源至关重要(例如,通过切换电灯开关触发的单个 CoAP 请求打开房间内所有支持 CoAP 的灯)。为了满足这一需求,IETF 以实验性 RFC 的形式开发了一个 CoAP 可选扩展:CoAP 的组通信 - RFC 7390 。 此扩展依靠 IP 多播将 CoAP 请求传递给所有组成员。使用多播具有某些优势,例如减少将请求传递给成员所需的数据包数量。然而,多播也有其局限性,例如可靠性差和缓存不友好。CoAP 组通信的另一种方法是使用单播而不是多播,这依赖于一个创建组的中介。客户端将其组请求发送到中介,中介又将各个单播请求发送给组成员,收集来自他们的回复,并将聚合的回复发送回客户端。
安全
CoAP 定义了四种安全模式:
- NoSec,其中DTLS被禁用
- PreSharedKey:启用 DTLS 后,会有一个预共享密钥列表,每个密钥都包含一个可用于通信的节点列表。设备必须支持 AES 密码套件。
- RawPublicKey,启用 DTLS 后,设备使用不带证书的非对称密钥对,该密钥对在带外进行验证。设备必须支持 AES 密码套件和椭圆曲线算法进行密钥交换。
- 证书,其中启用了 DTLS 并且设备使用X.509证书进行验证。
已有研究通过将安全关联实现为 CoAP 资源(而非将 DTLS 用作 CoAP 流量的安全包装器)来优化 DTLS。研究表明,与未优化的实现相比,DTLS 的性能提升高达 6.5 倍。
除了 DTLS 之外,RFC8613还定义了受限 RESTful 环境的对象安全 ( OSCORE ) 协议,该协议为应用层的 CoAP 提供安全性。
安全问题
尽管协议标准包含了减轻DDoS放大攻击威胁的规定,但这些规定并未在实践中得到实施,导致超过 580,000 个目标主要位于中国,攻击速度高达 320 Gbit/s。
- 04-14
- 04-14
- 04-14
- 04-14
- 04-10
- 04-09
- 04-09
- 04-07
- 04-14
- 02-17
- 11-11
- 10-21
- 09-23
- 08-02
- 07-24
- 07-18