无线物联网中CoAP协议的研究与实现【转】
无线物联网中CoAP协议的研究与实现
时间:2013-04-09 来源:电子科技 作者:汤春明,张 荧,吴宇平
摘要:由于物联网中的很多设备都是资源受限型的,即只有少量的内存空间和有限的计算能力,所以传统的HTTP协议应用在物联网上就显得过于庞大而不适用。IETF的CoRE工作组提出了一种基于REST架构的CoAP协议。CoAP是6LowPAN协议栈中的应用层协议。该文在详细介绍了CoAP协议的内容、特点和交互模型后,在uIPv6 START KIT无线网络开发套件上,使用Contiki嵌入式操作系统,不仅在浏览器端实现了CoAP协议而且用自己编写的客户端程序实现了CoAP协议,增加了和数据库之间的交互功能,从而实现了在Web界面上不仅可以查看实时数据,还可以查看历史数据的功能。
关键词:物联网;6LoWPAN;CoAP;Contiki
0 引言
物联网是在互联网的基础上延伸和扩展的一种网络,其用户端延伸和扩展到了任何物品之间,彼此进行信息交换和通信,目的是实现所有物品与网络的连接,从而方便识别、管理和控制。
无线物联网的特点包括:全面感知、实时准确传递物品信息、利用智能计算技术对海量数据进行分析和处理,以实现智能化控制。
由于无线物联网中的设备很多都是资源受限型的,这些设备只有少量的内存空间和有限的计算能力。为此,IETF(Internet Engineering Task Force)的CoRE(Constrained RESTful Environment)工作组为受限节点制定相关的REST(Representational State Transfer)形式的应用层协议。这就是CoRE工作组正在制订的CoAP(Constrained Application Protocol)协议。
1 6LoWPAN协议栈
由于TCP/IP协议栈不适用于资源受限的设备,因此提出了一种6LoWPAN(IPv6 over Low power Wireless Personal Area Networks)协议栈。CoAP是6LoWPAN协议栈中的应用层协议。6LoWPAN使IPv6可用于低功耗的有损网络,它是基于IEEE 802.15.4标准的。6LoWPAN协议栈如图1所示。
协议栈的下两层用802.15.4 PHY/MAC,中间加一个IPv6-6LoWPAN适配层,传输层使用UDP协议,应用层使用CoAP协议。它包括REST的最小子集和到HTTP的无状态映射。通信主机使用CoAP协议,能够支持稳定的通信架构,以实现传感器节点与互联网的无线连接。
2 CoAP协议
在2010年3月,CoRE工作组开始制定CoAP协议,到目前为止,该协议还没有定稿。CoAP协议是为物联网中资源受限设备制定的应用层协议。它是一种面向网络的协议,采用了与HTTP类似的特征,核心内容为资源抽象、REST式交互以及可扩展的头选项等。应用程序通过URI标识来获取服务器上的资源,即可以像HTTP协议对资源进行GET、PUT、POST和DELETE等操作。CoAP协议具有如下特点:
(1)报头压缩:CoAP包含一个紧凑的二进制报头和扩展报头。它只有短短的4 B的基本报头,基本报头后面跟扩展选项。一个典型的请求报头为10~20 B。图2是CoAP协议的信息格式。
报头部分各字段的含义如下:V(Version)表示CoAP协议的版本号;T(Type)表示消息的信息类型;OC(Option Count)表示头后面的可选的选项数量;Code表示消息的类型:请求消息、响应消息,或者是空消息;Message ID表示消息编号,用于重复消息检测、匹配消息类型等。
(2)方法和URIs:为了实现客户端访问服务器上的资源,CoAP支持GET、PUT、POST和DELETE等方法。CoAP还支持URIs,这是Web架构的主要特点。
(3)传输层使用UDP协议:CoAP协议是建立在UDP协议之上,以减少开销和支持组播功能。它也支持一个简单的停止和等待的可靠性传输机制。
(4)支持异步通信:HTTP对M2M(Machine-to-Machine)通信不适用,这是由于事务总是由客户端发起。而CoAP协议支持异步通信,这对M2M通信应用来说是常见的休眠/唤醒机制。
(5)支持资源发现:为了自主的发现和使用资源,它支持内置的资源发现格式,用于发现设备上的资源列表,或者用于设备向服务目录公告自己的资源。它支持RFC5785中的格式,在CoRE中用/.well—known/core的路径表示资源描述。
(6)支持缓存:CoAP协议支持资源描述的缓存以优化其性能。
(7)订阅机制:CoAP使用异步通信方式,用订阅机制实现从服务器到客户端的消息推送。实现CoAP的发布,订阅机制,它是请求成功后自动注册的一种资源后处理程序。是由默认的EVENT_和PERIODIC_RESOURCEs来进行配置的。它们的事件和轮询处理程序用EST.notify_subscri bers()函数来发布。
2.1 CoAP协议栈
图3是CoAP协议栈。CoAP协议的传输层使用UDP协议。由于UDP传输的不可靠性,CoAP协议采用了双层结构,定义了带有重传的事务处理机制,并且提供资源发现和资源描述等功能。CoAP采用尽可能小的载荷,从而限制了分片。
事务层(Transaction layer)用于处理节点之间的信息交换,同时提供组播和拥塞控制等功能。请求/响应层(Request/Responselayer)用于传输对资源进行操作的请求和响应信息。CoAP协议的REST构架是基于该层的通信。CoAP的双层处理方式,使得CoAP没有采用TCP协议,也可以提供可靠的传输机制。利用默认的定时器和指数增长的重传间隔时间实现CON(Confirmable)消息的重传,直到接收方发出确认消息。另外,CoAP的双层处理方式支持异步通信,这是物联网和M2M应用的关键需求之一。
2.2 CoAP的订阅机制
HTTP的请求/响应机制是假设事务都是由客户端发起的,通常叫做拉模型。这导致客户端不能高效的知统中,设备都是无线低功耗的,这些设备大部分时间是休眠状态,因此不能响应轮询请求。而CoRE认为支持本地的推送模型是一个重要的需求,也就是由服务器初始化事务到客户端。推送模型需要一个订阅接口,用来请求响应关于特定资源的改变。而由于UDP的传输是异步的,所以不需要特殊的通知消息。订阅机制如图4所示。
2.3 CoAP的交互模型
CoAP使用类似于HTTP的请求/响应模型:CoAP终端节点作为客户端向服务器发送一个或多个请求,服务器端回复客户端的CoAP请求。不同于HTTP,CoAP的请求和响应在发送之前不需要事先建立连接,而是通过CoAP信息来进行异步信息交换。CoAP协议使用UDP进行传输。这是通过信息层选项的可靠性来实现的。CoAP定义了四种类型的信息:可证实的CON(Confirmable)信息,不可证实的NON(Non-Confirmable)信息,可确认的ACK(Acknowledgement)信息和重置信息RST(Reset)。方法代码和响应代码包含在这些信息中,实现请求和响应功能。这四种类型信息对于请求/响应的交互来说是透明的。
CoAP的请求/响应语义包含在CoAP信息中,其中分别包含方法代码和响应代码。CoAP选项中包含可选的(或默认的)请求和响应信息,例如URI和负载内容类型。令牌选项用于独立匹配底层的请求到响应信息。
请求/响应模型:请求包含在可证实的或不可证实的信息中,如果服务器端是立即可用的,它对请求的应答包含在可证实的确认信息中来进行应答。图5是基本的GET请求和响应模式,其中图5(a)表示成功发送请求和收到ACK确认信息,图5(b)表示重传了请求信息,然后才收到ACK确认信息。
虽然CoAP协议目前还在制定当中,但Contiki和TinyOS嵌入式操作系统已经支持CoAP协议。Contiki是一个多任务操作系统,并带有uIPv6协议栈,适用于嵌入式系统和无线传感器网络,它占用系统资源小,适用于资源受限的网络和设备。目前,火狐浏览器已经集成了Copper插件,从而实现了CoAP协议。但是这种方式只能读取传感器节点上的实时数据,而不能查看各种历史数据。为此,在Contiki系统的基础上,基于uIPv6START KIT无线网络开发套件,用自己编写的客户端程序实现了和数据库的交互,把历史数据存入数据库中,从而在Web浏览器端不仅可以访问传感器节点上的实时数据,还能查看历史数据,以便于分析问题。
3 实验平台及CoAP协议的实现
3.1 实验平台
硬件平台式是美信凌科公司的IPv6智能网关(MXG300)、MX231CC节点、USB无线网卡(STICK)和JTAG下载器。实验的硬件平台配置和硬件平台如图6,图7所示。软件平台是WinAVR和AVR studio,用于向节点和USB网卡中下载程序。
其中IPv6智能网关上的主要芯片有:BCM 6358UKFBG支持多用户以太网功能,具有高度优化的32 MIPS CPU和标准的EJTAG调试器;BCM53 25EKQMG集成了5个收发器,具有128 KB的数据包缓冲区,最多可以支持2K的MAC地址,支持地址自动学习,提供真正的即插即用连接,而且是低功耗的;SIGe2521A60提供2.4~2.5 GHz的无线工作频段范围,应用于ISM 2.4.GHz的无线解决方案。
图8是IPv6智能无线网关的接口布局,它是基于OPENWRT系统定制完成的。具备3个局域网口,1个广域网口,1个802.11a/b/g WiFi无线网络接口,1个标准USB口和1个可选的串口调试口。该智能无线网关除具备通用无线路由器的功能以外,还可以实现基于Contiki操作系统的USB UIP网络和普通IP网络之间的IPv6互连,同时还支持有能力的系统在OPENWRT的基础上开发自己的应用软件包,实现更复杂的应用。
OPENWRT是一个开源的Linux版本。主要应用于嵌入式系统。网关和节点上同时装有Contiki系统,它提供宏定义和RESTful网络服务实例。
MX231CC节点上的主要芯片是ATmega1284P,它具有128 KB的可编程闪存,4 KB的E2PROM,16 KB的片内SRAM,JTAG接口,优化的功耗和处理速度。节点上运行Contiki系统。节点上还有光敏传感器、室内温度传感器、三色LED指示灯等。
3.2 CoAP协议的火狐浏览器实现(B/S架构)
B/S架构的系统结构如图9所示。
系统由用户浏览器、Web服务器、IPv6智能网关、MX231CC节点组成。用户浏览器通过HTTP协议访问Web服务器,MX231CC节点通过CoAP协议和IPv6智能网关进行通信,从而实现用户浏览器访问节点上资源的功能。图9中实线表示有线连接,虚线表示无线连接。
在当前的Contiki 2.5中,集成了CoAP 03和CoAP06这两个版本。这两个文件在Contiki 2.5的apps目录下,关于CoAP的核心内容都在这两个文件中。程序的主要部分为:
AUTOSTART_PROCESSES(&coap_sample)这个进程需要自启动,即当节点启动时启动本程序;
PERIODIC_RESOURCE()为进程的主体部分。
然后进行编译,编译成.elf文件,用JTAG下载器下载到节点上。节点地址设置为:2001:2::11:22ff::fe33:4499。这时,用火狐浏览器访问节点,因为火狐浏览器自带coap插件,如果用其他浏览器,那么需要进行coap的代理设置。以控制节点上的三色LED灯反转为例,用下面的请求格式:
GETcoap://[<mote_ip_address>]:<poa_number>/readings
其中mote_ip_address是节点的IPv6地址,port_number是节点的端口号,readings是客户端请求的资源(温度)。
所以在浏览器地址栏输入:coap://[2001:2::11:22ff:fe33:4499]:61616/toggle,作用是让节点上的三色LED灯进行反转。服务器端的响应信息如图10所示。
从浏览器端可以看出,CoAP协议支持Discover和Observe功能,具有GET、POST、PUT和DELETE等方法。Type表示信息类型为ACK,Code为200,表示成功完成客户端的请求。事务ID为38 264,它用于重复信息检测,options为1表示有一个可选项,内容类型为text表示文本类型。
由此可以看出,通过火狐浏览器的CoAP协议,可以访问节点上的传感器资源。
3.3 CoAP协议的客户端实现(C/S架构)
上节通过火狐浏览器可以实现COAP协议,但是只能查看实时数据,不能查看历史数据。为此,这里搭建了一个C/S架构的环境。如图11所示。
图11中客户端软件是用基于.NET架构的C#语言编写的,数据库使用SQL Server 2008。通过此程序,可以每隔10 s读取一次数据,存入到数据库中。并可以通过前台的Web界面查看各种历史数据,包括温度、湿度、亮度等。
插入数据库中的数据如图12所示,图中显示的是室内的亮度值。
在Web浏览器端可以查看实时和历史数据,页面显示效果如图13所示。
由此看出,基于C/S架构的方式,不仅可以显示实时数据,还可以查看历史数据,以便及时发现问题,更加具有实用性。
4 结论
本文详细介绍了CoAP协议的内容、特点、交互模型以及订阅机制,还给出了基于uIPv6 START KIT无线网络开发套件的系统配置方式,该网络可以通过火狐浏览器和客户端软件两种方式实现CoAP协议,用户不仅可以读取传感器上的实时数据,而且可以查看历史数据。
SRC=http://www.21ic.com/app/rf/201304/178560_3.htm
无线物联网中CoAP协议的研究与实现【转】的更多相关文章
- 无线局域网中RADIUS协议原理与实现
转载自:http://blog.csdn.net/jinhill/article/details/5901042 摘要 RADIUS协议是一个被广泛应用于网络认证.授权和计费的协议.本文在介绍了RA ...
- JavaScript中伪协议 javascript:研究
将javascript代码添加到客户端的方法是把它放置在伪协议说明符javascript:后的URL中.这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的 ...
- MQTT研究之EMQ:【CoAP协议的ECC证书研究】
今天研究的内容,是CoAP这个协议在EMQ消息队列的支持,CoAP是一个受限资源的协议,基于UDP实现的多用于物联网环境的通信协议.相关介绍不多说,可以看RFC. CoAP协议下,基于DTLS通信,同 ...
- 转战物联网·基础篇09-选择MQTT协议还是CoAP协议
前面章节介绍过,MQTT协议和CoAP协议都是物联网中比较流行的协议,都对传输量做了很大的精简,传输开销小,以适应物理网的网络环境. XMPP协议也有人说是适合物联网通信的,但它是基于XML, ...
- MQTT研究之EMQ:【CoAP协议应用开发】
本博文的重点是尝试CoAP协议的应用开发,其中包含CoAP协议中一个重要的开源工具libcoap的安装和遇到的问题调研.当然,为了很好的将EMQ的CoAP协议网关用起来,也调研了下EMQ体系下,CoA ...
- 物联网协议CoAP协议学习
CoAP:Constrained Application Protocol协议是为物联网中资源受限的设备制定的应用层协议,即简化版的基于UDP的HTTP协议.其核心内容为资源抽象.REST式交互可扩展 ...
- 无线网络中的MAC协议(1)
前文我们对传统的有线网络的MAC协议进行了分析,接下来我们在对无线网络的MAC也进行一个详细的介绍.那么无线网络中的MAC工作方式是如何的呢?无线局域网(WLAN)中MAC所对应的标准为IEEE 80 ...
- 物联网协议Coap协议介绍
COAP协议简介 Coap(Constrained Application Protocol)是一种在物联网世界的类web协议,它的详细规范定义在 RFC 7252.COAP名字翻译来就是" ...
- 转:XMPP协议、MQTT协议、HTTP协议、CoAP协议的基本比较
一.先看下相关国外的专业数据对四大协议的比较: Protocol CoAP XMP ...
随机推荐
- golang 写文件
package main import ( "bufio" "fmt" "io" "os" ) func main() ...
- sass自定义滚动条样式
@mixin scrollBarStyle() { &::-webkit-scrollbar { width: 7px; height: 7px; } &::-webkit-scrol ...
- 3/19 Django框架 url路由配置及模板渲染
3/19 Django框架 url路由配置及模板渲染 1.路由分配 URL(Uniform Resoure Locato):统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示, ...
- mysql-cacti-templates-1.1.2.tar.gz 免费下载 cacti MySQL添加监控
cacti MySQL添加监控 1. 安装监控插件 wget http://mysql-cacti-templates.googlecode.com/files/mysql-cacti-templat ...
- ORA-00957: 反复的列名
1.错误描写叙述 ORA-00957: 反复的列名 2.错误原因 SQL> create table info( 2 stu_id varchar2(7) not null, 3 stu_nam ...
- 40.【IntelliJ IDEA】使用idea解决新建jsp文件而找不到jsp文件模版的新建选项
转自:https://www.cnblogs.com/sxdcgaq8080/p/7676294.html 使用idea解决新建jsp文件而找不到jsp文件模版的新建选项,这样每次创建一个新的jsp文 ...
- git 当出现 devirge 时,一个是commit的提交顺序不对
进入新分支1.git pull origin branchname 2.修改 3.git add . 4.git commit 5. git pull 6.git push 出现分歧要,就版本回退, ...
- python关于字典的操作
https://www.cnblogs.com/RENQIWEI1995/p/7931374.html 最常用的代码举例: dict = {'Name': 'Zara', 'Age': 7, 'Cla ...
- Python 极简教程(八)字符串 str
由于字符串过于重要,请认真看完并保证所有代码都至少敲过一遍. 对于字符串,前面在数据类型中已经提到过.但是由于字符串类型太过于常用,Python 中提供了非常多的关于字符串的操作.而我们在实际编码过程 ...
- Mongodb总结4-Spring环境使用Mongodb
前几次的例子,要么是Shell,要么是普通Java应用程序的例子.实际情况,是要在Spring的项目里用,因此需要做一些改造. 1.配置文件C:\hanhai\config\mongodb.prope ...