好记性不如铅笔头

编程

COAP简单笔记

本文参考

CONTENTS

什么是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

发表评论

2 × 1 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据