【2018-09-01】COAP简单笔记

[历史归档]本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。
发布时间:2018-09-01| 标题:COAP简单笔记分类:编程 |标签:coap


CoAP简单笔记

    • 什么是CoAP?
    • 测试

本文参考

《 http://baijiahao.baidu.com/s?id=1572926441162140&wfr=spider&for=pc 》

《 https://blog.csdn.net/robert_tina/article/details/78864345 》

《 https://blog.csdn.net/qq_40062917/article/details/78258923 》

什么是CoAP?

coap 是在udp上的代替了在tcp上的http,由于在http协议太大,coap协议却很小的,所以很适合嵌入式开发的环境,同样对比的还有mqtt协议在这里不讲解。

CoAP是受限制的应用协议(Constrained Application Protocol),是IETF组织发布的互联网系列标准之一(RFC7252)。

在当前由PC组成的世界里,信息交换通过HTTP/TCP来实现。但是对于小型设备而言,实现TCP和HTTP协议显然是一个过分的要求。为了让小设备可以接入互联网,CoAP协议被设计出来。CoAP协议是为物联网中资源受限设备制定的应用层协议(注:CoAP已经支持基于TCP,本文暂不展开)。

CoAP协议特点

通过解读CoAP协议可以看出,CoAP协议明显的是针对物联网应用而生,包括:

1.基于REST构架,而REST正是互联网资源访问协议的一般性设计风格。

2.基于轻量级的UDP协议,并且允许IP多播。

3.定义了带有重传机制的事务处理机制,同样可实现可靠传输。

4.提供了资源发现机制,并带有资源描述。

5.协议小巧,最小的数据包只有4字节。

6.可以使用DTLS作为安全加密层。

7.资源消耗低,所需RAM和ROM资源均小于10KB。

8.其双层(事务层,请求/响应层)处理方式可支持异步通信。

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

10.支持块传输。CoAP协议的特点是传输的内容小巧精简,但是在某些情况下不得不传输较大的数据。在这种情况下可以使用CoAP协议中的选项设定分块传输的大小,服务器和客户端即可完成分片和组装。

测试

首先在ubuntu下操作如下:

下载 git clone https://github.com/authmillenon/libcoap.git

sudo apt-get install autoconf

autoconf

make --> make install

安装完成之后,便会新建/usr/local/include/libcoap目录,并把coap.h config.h debug.h pdu.h等头文件复制到该目录中。 编译生成的libcoap.a该静态链接库被复制到了/usr/local/lib中。 编译完成之后,在example目录中会增加两个重要文件——coap-client和coap-server。

coap服务器测试:

运行 ./coap-server

需要在火狐上安装插件coapd

测试get post 等功能

coap客户端测试:

(1)运行coap-server

./coap-server

(2)运行coap-client

./coap-client -m get -o result.txt coap://127.0.0.1

参数解析:

-m 表示coap访问方法,默认为get方法,此处设置为get方法。除了get方法之外还包括put、post和delete。

-o 表示访问获得的内容保存到result.txt文件中

如果访问成功,那么控制台输出:

v:1 t:0 tkl:0 c:1 id:45104

-v 表示coap的版本编号,此时的coap的版本编号为1。

-t 表示报文类型为CON,

-tkl 表示token区域的长度,此时的token区域的长度为0。

-c 表示访问方法(该处还需要分析)

-id表示message id