由于物联网中的很多设备都是资源受限型的,即只有少量的内存空间和有限的计算能力,所以传统的http协议应用在物联网上就显得过于庞大而不适用。 ietf的core工作组提出了一种基于rest架构的coap协议。coap是6lowpan协议栈中的应用层协议。该文在详细介绍了coap协议的内容、特点和交互模型后,在uipv6 start kit无线网络开发套件上,使用contiki嵌入式操作系统,不仅在浏览器端实现了coap协议而且用自己编写的客户端程序实现了coap协议,增加了和数据库之间的交互功能,从而实现了在web界面上不仅可以查看实时数据,还可以查看历史数据的功能。
0引言
物联网是在互联网的基础上延伸和扩展的一种网络,其用户端延伸和扩展到了任何物品之间,彼此进行信息交换和通信,目的是实现所有物品与网络的连接,从而方便识别、管理和控制。
无线物联网的特点包括:全面感知、实时准确传递物品信息、利用智能计算技术对海量数据进行分析和处理,以实现智能化控制。
由于无线物联网中的设备很多都是资源受限型的,这些设备只有少量的内存空间和有限的计算能力。为此,ietf(intemet 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(periodic_resource()为进程的主体部分。
然后进行编译,编译成。elf文件,用jtag下载器下载到节点上。节点地址设置为:2001:2::11:22ff::fe33:4499.这时,用火狐浏览器访问节点,因为火狐浏览器自带coap插件,如果用其他浏览器,那么需要进行coap的代理设置。以控制节点上的三色led灯反转为例,用下面的请求格式:getcoap://[]:
/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协议,用户不仅可以读取传感器上的实时数据,而且可以查看历史数据。
蓝牙耳机降噪哪款好?300-500以内降噪蓝牙耳机推荐
使用Container Canary在多个平台上测试容器图像
格力多元化难言成功,依赖空调业务难实现6000亿营收愿景
NB-IoT产业短期困境并不影响长期趋势
如果美国不信任华为,华为会将更大规模的投资转移到英国进行
无线物联网中CoAP协议的研究与实现
极片&复合基材电阻 (Gen & Magic系列)
远程磁力传送装置:可为电动车无线充电
直流电网的优缺点
算力时代,进击的先进封装
运算放大器需要考虑的电压范围
单网卡连接两个网段路由访问
中国半导体协会评选出中国半导体十大企业!
HM6050-2D线性阻抗稳定网络的特点性能及应用范围
功率MOSFET用途
北斗集成双向通信 能否撼动GPS
全球首个!数字认证时间戳服务器 TSS 通过IPv6 Ready Logo认证
什么是上拉电阻?如何计算I2C上拉电阻的大小值
什么是CCD机器视觉检测,它的应用优势是什么
真正有能力终结特斯拉神话的,只有苹果Apple Car了