CoAP协议学习笔记 1.1 为什么物联网要使用 CoAP 协议

1 前言

前几年,Json比较火的时候,和朋友在讨论项目协议时就在感慨,要是咱们的这些设备都能走Json,那该多爽。由于HTTP协议对于物联网设备实在是太铺张了,我们只好作罢。

知识限制了我们的想象力,CoAP 就是这样的存在。

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

2 什么是CoAP?

在 CoAP 协议 RFC7252 首页的介绍能让大家有所理解,不要略过这一点介绍,有助于我们了解 CoAP 的核心思想。

The use of web services (web APIs) on the Internet has become ubiquitous in most applications and depends on the fundamental Representational State Transfer [REST] architecture of the Web.

The work on Constrained RESTful Environments (CoRE) aims at realizing the REST architecture in a suitable form for the most constrained nodes (e.g., 8-bit microcontrollers with limited RAM and ROM) and networks (e.g., 6LoWPAN, [RFC4944]). Constrained networks such as 6LoWPAN support the fragmentation of IPv6 packets into small linklayer frames; however, this causes significant reduction in packet delivery probability. One design goal of CoAP has been to keep message overhead small, thus limiting the need for fragmentation.

One of the main goals of CoAP is to design a generic web protocol for the special requirements of this constrained environment, especially considering energy, building automation, and other machine-to-machine (M2M) applications. The goal of CoAP is not to blindly compress HTTP[RFC2616], but rather to realize a subset of REST common with HTTP but optimized for M2M applications. Although CoAP could be used for refashioning simple HTTP interfaces into a more compact protocol, more importantly it also offers features for M2M such as built-in discovery, multicast support, and asynchronous message exchanges.

This document specifies the Constrained Application Protocol (CoAP), which easily translates to HTTP for integration with the existing Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments and M2M applications.

小能手给大家翻译下。

互联网的 WEB 已经无处不在,这些 WEB 服务又依赖于 WEB 的 REST 架构。

为了在大多的受限制节点上(例如 RAM 和 ROM 很有限的8位单片机)以及受限制网络上(例如 6LoWPAN)也能实现 REST 架构,人们着手处理“受限制的RESTful环境”,即CoRE。如6LoWPAN的受限网络支持将IPv6数据分成小包,但是这也极大降低的传输效率。CoAP的一个设计目标是保持很小的消息开销,因此限制了分包传输的需求。

CoAP 的主要目标之一是设计一个通用的 Web 协议,以满足这种受限环境的特殊要求,特别是考虑到能源,楼宇自动化和其他 M2M 应用。 CoAP 的目标不是盲目地压缩 HTTP [RFC2616],而是实现REST的一个通用 HTTP 子集,但针对 M2M 应用进行了优化。 虽然 CoAP 可用于将简单的 HTTP 接口转换为更紧凑的协议,但更重要的是,它还提供了 M2M 的功能,如内置发现,多播支持和异步消息传输。

本文档定义了 CoAP 协议,它可以很容易转换为 HTTP,以便集成到现有Web,同时它还能满足很多特殊要求,诸如组播支持,非常低的开销以及针对受限环境和M2M应用程序做了简化等。

这里最核心的一点是,大家必须先了解 REST。体会到 WEB 世界里 ReST 的种种优点,我们才能明白先驱们为何拼命要在物联网的世界里也实现一套 ReST。

3 什么是 ReST

阮一峰说的比较清楚,具体见他的博客文章

二、名称
Fielding将他对互联网软件的架构原则,定名为REST,即Representational State Transfer的缩写。我对这个词组的翻译是"表现层状态转化"。
如果一个架构符合REST原则,就称它为RESTful架构。
要理解RESTful架构,最好的方法就是去理解Representational State Transfer这个词组到底是什么意思,它的每一个词代表了什么涵义。如果你把这个名称搞懂了,也就不难体会REST是一种什么样的设计。

三、资源(Resources)
REST的名称"表现层状态转化"中,省略了主语。"表现层"其实指的是"资源"(Resources)的"表现层"。
所谓"资源",就是网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。你可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符。
所谓"上网",就是与互联网上一系列的"资源"互动,调用它的URI。

四、表现层(Representation)
"资源"是一种信息实体,它可以有多种外在表现形式。我们把"资源"具体呈现出来的形式,叫做它的"表现层"(Representation)。
比如,文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式;图片可以用JPG格式表现,也可以用PNG格式表现。
URI只代表资源的实体,不代表它的形式。严格地说,有些网址最后的".html"后缀名是不必要的,因为这个后缀名表示格式,属于"表现层"范畴,而URI应该只代表"资源"的位置。它的具体表现形式,应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是对"表现层"的描述。

五、状态转化(State Transfer)
访问一个网站,就代表了客户端和服务器的一个互动过程。在这个过程中,势必涉及到数据和状态的变化。
互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer)。而这种转化是建立在表现层之上的,所以就是"表现层状态转化"。
客户端用到的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。

六、综述
综合上面的解释,我们总结一下什么是RESTful架构:
  (1)每一个URI代表一种资源;
  (2)客户端和服务器之间,传递这种资源的某种表现层;
  (3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。

我看到还有1句话的总结:URL定位资源(表现层),用HTTP动词 (GET、POST、PUT、DELETE) 描述操作。

按照这种风格来设计的系统,我觉得有两个较大的优点:

1.安全性、幂等性。规范化的 URL 和操作,这样大多数操作,无论操作多少次,结果都是一样的,也就是传说的幂等性。如 Get 查询某个状态、PUT 更新某个状态、DELETE 删除某个资源,甚至是 POST 创建某个资源。这样在网络不可靠的情况下,整个系统也能安全稳定地运行。

2.可拓展性强。资源的各种表现层是相互独立的,耦合性很低,系统有新增新的资源和表现层都很方便。

4 HTTP for IoT

在物联网领域的协议最好能继承该优点。

1.安全性、幂等性。在NB-IoT等低功耗设备中,通常不能使用TCP长连接。它的传输必须高效,弱化对连接的依赖,网络不稳定时也不影响系统运行。

2.可拓展性。一个 Server 可能会逐步增加各类型设备,所以这也是各个物联网平台使用 CoAP 的最主要原因。

所以,对于物联网设备而言,如果能简化出 REST 的一个通用 HTTP 子集,便于与已有的 WEB 体系转化,那就是最好的选择。

这便是 CoAP 的设计初衷。

5 CoAP 的特点

了解了 CoAP 的设计思想,再看看现在 CoAP 到底有哪些特点。

CoAP has the following main features:

- Web protocol fulfilling M2M requirements in constrained environments
- UDP [RFC0768] binding with optional reliability supporting unicast and multicast requests.
- Asynchronous message exchanges.
- Low header overhead and parsing complexity.
- URI and Content-type support.
- Simple proxy and caching capabilities.
- A stateless HTTP mapping, allowing proxies to be built providing access to CoAP resources via HTTP in a uniform way or for HTTP simple interfaces to be realized alternatively over CoAP.
- Security binding to Datagram Transport Layer Security (DTLS) [RFC6347].

CoAP 具有如下特点(官方介绍):

  • 在受限环境中满足M2M要求的Web协议。
  • 支持可靠性的UDP [RFC0768]绑定,支持单播和多播请求。
  • 异步消息交换。
  • 低头部开销和解析复杂性。// 受限设备要求。
  • 支持 URI 和 Content-type。// 开发者喜欢。
  • 简单的代理和缓存功能。
  • 无状态 HTTP 映射,允许构建代理,以统一方式通过 HTTP 访问 CoAP 资源,或者通过 CoAP 变换实现 HTTP 简单接口。
  • 支持对数据报传输层安全(DTLS)[RFC6347] 的绑定。

6 小结

ReST 风格的 HTTP 协议广泛存在于 WEB 世界中,由于它的种种优点,人们在物联网世界里也拼命实现了一套 HTTP 子集,可方便和现有 WEB 体系转化,继承了它的优点,同时针对受限的物联网设备做了优化。这便是 CoAP 协议。


发布了232 篇原创文章 · 获赞 225 · 访问量 79万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览