一种IPv6无线传感器网络后台数据系统的设计与实现
2008-07-22
作者:刘晨曦,张思东,郜 帅
摘 要: 提出了基于IPv6无线传感器网络" title="无线传感器网络">无线传感器网络与CDMA公共无线通信网相融合的网络架构的后台数据系统,作为精准农业管理系统的一部分,负责传感数据的接收、存储以及控制命令的发送。
关键词:IPv6 无线传感器网络 后台数据系统
无线传感器网络是由部署在监测区域的传感器节点" title="传感器节点">传感器节点通过自组织方式构成的网络,具有低成本、低能耗、灵活性高、可扩展等优点。可以应用于国防军事、环境监测和预报、农业监测控制、智能交通、智能家居、医疗卫生等众多领域[1],具有广阔的应用前景,受到越来越多的关注。IPv6[2]是下一代互联网的核心协议,具有地址资源丰富、地址自动配置、支持实时业务、安全性高、移动性好等优点。将IPv6与无线传感器网络结合构建的IPv6无线传感器网络,可以满足未来无线传感器网络在地址、可扩展性及与现有网络融合等方面的需求,已成为其研究热点之一。
无线传感器网络通常由不同类型传感器节点和网关设备构成。传感器节点实时地采集特定区域的传感信息" title="传感信息">传感信息,发送到网关,网关设备通过特定的方式与现有的网络实现互联互通,将传感信息发送到远程服务器端,由无线传感器网络后台数据系统进行处理。本文设计并实现了应用于精准农业系统环境的IPv6无线传感器网络后台数据系统,该系统包括接收、处理和存储传感数据以及发送控制命令帧等功能。无线传感器网络和Internet骨干网络之间的数据传送通过CDMA网络实现。
1 后台数据系统设计
1.1 基于精准农业的无线传感器网络架构
本文以精准农业的管理系统为例,具体架构见图1。
农业基地受地理位置影响,通常缺乏Internet网络基础设施。为了实现农业基地监测控制和智能管理,部署的IPv6无线传感器网络借助于CDMA网络基础设施,能够方便有效地与现有网络进行信息交换。在该系统中,主要存在以下两种类型的数据传输:
(1)传感器节点需要将实时采集的各种传感数据发送到网关节点,通过特定的CDMA网络接入设备并借助于CDMA网络数据传输业务最终将数据发送到现有Internet中的服务器后台处理系统。后台数据系统将节点的各种传感信息写入数据库,以供用户随时调用。
(2)管理员可以点击Web网页构造控制信息,由后台数据系统通过CDMA网络将命令发送到IPv6无线传感器网络中,由传感节点的执行部分最终实现对农业基地的有效管理。
在该系统中,CDMA网络的数据业务采用IPv4和TCP协议,而无线传感器网络采用IPv6技术以及简单有效的UDP传输控制协议实现数据的收发和处理。因此,本文在精准农业管理系统中设计了一种接收数据包,格式如图2所示。
根据精准农业管理系统需求以及数据包格式转换过程,设计的后台数据系统应具备以下特点:
(1)接收处理一种新型隧道包:根据数据包的格式转换,该系统处理过程可以看作封装在IPv4网络中的IPv6数据包的隧道机制,但又与传统的隧道机制有明显区别,主要体现在后台数据系统的IPv6数据包是作为IPv4协议栈" title="协议栈">协议栈应用层数据传输的。因此,这种新类型的隧道机制处理流程,是设计后台数据系统的核心问题。
(2)构造并发送命令帧:命令帧在通过IPv6协议栈后被封装成IPv6格式,如何使IPv6输出队列的命令帧回到用户空间,利用原来的IPv4套接口进行发送,是后台数据系统解决的难点问题。
(3)及时响应事件驱动:在等待数据接收时,后台数据系统发送控制命令是一个事件驱动的过程,如何及时响应这个事件驱动,提高工作效率,是衡量后台数据系统的一项重要指标。
1.2 后台数据系统模型
后台数据系统主要用于收集信息,发送控制命令,完成对无线传感器网络中传感器节点的监测与控制。根据后台数据系统所实现的不同功能,系统设计采用分层体系结构,分成内核空间和用户空间两大部分,采用Linux操作系统作为内核空间基本平台。分层的体系结构能使系统的功能实现透明化,各个层不需要了解其他层的具体工作,只需根据层间的接口所提供的服务,独立完成自己的功能,这种设计使后台数据系统具有很强的灵活性和可扩展性。后台数据系统模型如图3所示。
接收数据包时,在用户空间开启一个进程,利用面向连接的IPv4套接口建立通信链路。用户将自己编写的内核函数通过insmod命令模块载入内核netfilter[3]架构,使数据包在到达IPv4接收队列时,通过NF_HOOK()[4]函数将数据传送到IPv6协议栈,通过IPv6套接口,完成传感数据包的接收处理,并写入数据库。
发送命令帧时,首先需要解决的是如何将构造的IPv6命令帧封装在IPv4数据包中。其次,需要利用本地主机通信的方式,采用UNIX域协议,及时发送控制命令信息。
2 后台数据系统的实现
2.1 接收流程的实现
后台数据系统首先在Linux内核中将自己编写的模块载入netfilter架构。当该系统接收到公网Internet传送过来的IPv4数据包后,调用Linux内核中原有的IPv4 协议栈,对IPv4协议和TCP协议进行解析,获取CDMA网关的IPv4地址以及TCP状态等信息,再由netfilter架构中已载入模块获得内核IP队列中的IPv4数据包,取出TCP协议的载荷数据,发往IPv6接收队列,最终通过IPv6协议栈,经过INET6套接口到达用户空间。获得最终应用层传感信息,并写入数据库。处理流程如图4所示。
后台数据系统在用户空间进行处理时,将从内核空间获得的传感数据根据Type字段分成地址信息和传感信息,进行不同的操作。
后台数据系统的接收模块与MySQL[6]数据库建立连接后,根据收到的信息进行判断,将相应的传感信息进行存储。
2.2 发送流程的实现
发送信息流程主要负责命令帧的构造,发送各种控制信息,实现对整个传感器网络及其内部单个节点的控制。控制信息主要包括:控制相应节点进行温度、湿度、光强以及CO2浓度等各种数据的采集,执行部分的操作命令等。具体过程如图5所示。
2.2.1 命令帧的构造与响应
命令帧的构造是一个基于事件驱动的过程。通过点击网页的事件,触发后台数据系统的调用函数开始构造IPv6命令帧。
命令帧的响应过程是通过本地通信的UNIX域协议进行的。在后台数据系统启动时便创建了一个新的线程作为监听模块,用于建立本地通信的套接字" title="套接字">套接字,绑定UNIX域套接口,之后监听模块阻塞,等待事件的触发。当用户或管理者需要某一个具体的传感节点采集相应的传感数据时,通过点击Web网页的发送按钮,触发发送命令帧的程序,开始主动连接本地UNIX域套接口,由于后台数据系统的监听模块是一个单独的线程,当有连接请求到达时,立刻会被唤醒,监听模块调用read函数,接收此命令帧,并将其拷贝到发送模块缓冲区。
2.2.2 命令帧的发送
发送模块将缓冲区中命令帧取出,使用面向无连接的IPv6套接字,经过Linux内核的UDP和IPv6协议栈将命令帧发送到IPv6输出队列。
在内核中,提前在netfilter架构上加载ipip6_kern.o模块,主要用于截获IPv6输出队列的数据包并进行处理。在命令帧到达IPv6输出队列后,由ipip6_kern.o模块中的“钩子”函数,将整个数据包拦截下来,判断是否是命令帧,若是命令帧,则将其从IPv6输出队列取出,同时拷贝到netlink套接字缓冲区,重新封装,加载netlink报头,并将封装后的命令帧利用netlink套接字发送回用户空间。用户空间的转发模块可以接收该命令帧,并将其拷贝到与传感器网关设备相连的套接字缓冲区,最终实现IPv4命令帧的发送。
3 功能验证
实验是在农业基地的一个温室中进行的,在温室中摆放15个传感器节点,其中4个CO2浓度节点,5个温度节点,3个光强节点,3个空气湿度节点。图6是温度传感器工作时的实验系统(图中只标明温度传感器)。
由于后台数据系统构建在IPv6网络之上,IPv6网络可以为每一个温度传感器节点进行标识。首先节点启动后,将自身的地址信息发送到服务器系统,服务器系统中的接收模块接收到数据包后,检查type字段是否为0,为0则确定为地址信息包,将接收到的数据包的相关信息存放到MySQL数据库的地址信息表项中,数据库中记录的地址表项如图7所示。
在图7中,扩展地址后四位为8919的节点是无线传感器网络的网关,在sensor_type中用X表示。所有其他传感器节点采集的传感信息均发送到网关上,它通过串口和CDMA网络接入设备相连,封装成CDMA数据,从CDMA公网中转发出去,扩展地址后四位为6041,6042,6043,6044,6045为5个温度传感器节点,在sensor_type中用T表示。
在IPv6网络上还可以实现对单个具体的温度传感器节点进行管理和控制,可以在Web网页上触发6045节点,使它完成对温度传感数据的采集,并最终传送到后台数据系统的数据库中。图8为后台数据系统接收温度节点6045传送的一次温度传感数据时,用Ethereal软件抓包分析的结果。
如图8所示,目的地址为211.71.71.145,为后台数据系统的IPv4地址。图中标注的6045为节点,而01表示传感数据,83用二进制表示为10000011,最高2位为10,表示传感信息包,后6位为3,表示温度传感数据。随后的两位18和01,则表示节点6045采集的实时温度。
一般情况下,节点周期性地(本系统采集周期为1分钟)采集周围的环境参数并传输到后台数据系统数据库模块。节点6045采集的实时温度曲线如图9所示。
本文设计和实现了一套应用于精准农业的无线传感器网络后台数据处理系统,通过netfilter架构,在Linux内核中注册一个 “钩子”函数,利用动态载入内核模块的方式,实现了处理IPv4封装IPv6数据的系统框架。扩展了内核的功能。同时,利用Linux内核本身所具有的本地UNIX域协议,实现了控制命令的主动发送。此外,该后台数据系统还具有开放式网络体系结构以及通用的数据接口,具有良好的扩展性,能够适用于无线传感器网络的其他应用。
参考文献
[1] 孙利民,李建中,陈渝,等.无线传感器网络.北京:清华大学出版社,2005.
[2] RFC2460, S. Deering Internet Protocol,Version 6
[3] The netfilter/iptables project, http://www.netfilter.org.
[4] RUSSEL P, WELTE H. Linux netfilter hacking HOW TO [EB/OL]. http://www.netfilter.org.
[5] STEVENS R. UNIX Network programming. Addison Wesley.2003.
[6] WILLIAMS H E, LANE D. Web dtatbase application with PHP & MySQL.2003.