基于6lowpan的ipv6无线传感器网络的研究与实现.pdf
67页南京航空航天大学 硕士学位论文 基于6LoWPAN的IPv6无线传感器网络的研究与实现 姓名:李堃 申请学位级别:硕士 专业:计算机应用技术 指导教师:袁家斌 20080101 南京航空航天大学硕士学位论文 i 摘 要 无线传感器网络(WSN)集信息采集、信息传输、信息处理于一体,具有 广阔的应用前景,是当前无线网络领域研究的热点之一随着无线传感器网络 的应用领域不断拓展,数量巨大的传感器节点接入 Internet,使得地址空间逐渐 耗尽的 IPv4 协议难以满足无线传感器网络的需求而 IPv6 协议所具有的 128 位巨大地址空间、内建的安全机制、移动性、即插即用等优势能很好地解决这 些问题IPv6 协议与 WSN 的结合必将极大地推动无线传感器网络的发展 6LoWPAN 是一种研究如何使 IPv6 协议在 LoWPAN 设备上运行的技术本 论文旨在设计一种基于 6LoWPAN 的无线传感器网络,实现传感器网络节点与 外部 IPv6 网络直接通信 本文首先阐述了无线传感器网络的基本概念、研究现状和发展趋势,然后 深入研究了 6LoWPAN 的技术基础:IPv6 技术和 IEEE802.15.4 协议标准。
参考 6LoWPAN 发布的协议草案,对 6LoWPAN 的核心技术:适配层的详细功能, 适配层帧格式、适配层分片和重组、报头压缩、Mesh 支持进行了研究结合 TinyOS 的系统特点,设计并实现了一个基于 TinyOS 2.0 的 6LoWPAN 星型无 线传感器网络,分析了该网络系统的整体框架,阐述了系统核心技术编程实现 方法,构建了测试环境,最后对该系统实现进行了测试测试表明,该系统工 作正常,能够实现 WSN 网络与外部 IPv6 环境直接交换数据 关键词关键词:无线传感器网络,IPv6,IEEE802.15.4,6LoWPAN,TinyOS,适 配层 基于 6LoWPAN 的 IPv6 无线传感器网络的研究与实现 ii ABSTRACT As a combination of data collecting, data transportation and data processing, Wireless Sensor Network(WSN) has a wide application range and becomes one of the hottest research focuses in wireless network area. With the development of WSN, large amount of sensor nodes are connected to Internet. However, the traditional IPv4 protocol isn't suitable for WSN due to its exhausting address space. While new features of IPv6 such as huge 128-bits address space, security, mobility and plug // command:命令关键字 command error_t cancel(message_t*msg); event void sendDone(message_t*msg,error_t error);// event:事件关键字 command uint8_t maxPayloadLength(); command void*getPayload(message_t*msg); } 接口 Send 定义四个命令:send、cancel、maxPayloadLength 和 getPayload。
它还定义了一个事件 sendDone,此事件无返回值 对于一个组件而言,如果它要使用某个接口中的命令,那么它还必须实现 这个接口的事件一个组件可以使用或提供多个接口以及同一个接口的多个实 例 将组件所使用的接口与组件连接在一起,称为连接(wiring)[7][30][34]基于 这种思想,一个组件可通过多个组件实现一定的逻辑功能,只需要对外声明需 要哪些接口和提供哪些接口每个 nesC 应用程序都要由一个顶级配件所描述, 其内容就是将该应用程序所要用到的所要组件连接起来,形成一个有机整体 (三) 内存分配 TinyOS 使用了静态的内存分配和管理机制TinyOS 中的组件在编译时分 配所需要的内存 组件之间共享状态(state)的唯一方法是通过函数调用与 C 中相同,组 件传递参数使用了两种方法:值传送和指针传送使用值传送时,数据被拷贝 到堆栈,所以被调用者可以自由修改它;使用指针传送时,调用者与被调用者 基于 6LoWPAN 的 IPv6 无线传感器网络的研究与实现 26 共享一个这项数据的指针使用指针传递有很多好处,但指针传递参数同样存 在危险——存储区崩溃和数据泄漏比较稳妥的做法是:在任何时候,每一个 指针都必须有一个明确的所有者,并且只有所有者才能修改相应的存储区。
(四) TinyOS 通信 消息缓冲区:TinyOS 2.0 中的消息缓冲区类型是 message_t(与 1.x 不同) , 并且仍采用了静态包缓冲策略缓冲区大小可以适合任何节点的通信接口,组 件不能直接访问结构的各域,所有缓冲区的访问必须通过接口 AMPacket 和 Packet(定义在 opt\tinyos-2.x\tos\intefaces 目录)实现[31][32][34],本文实现的模块 也将使用这两个接口 通信组件[35]:用户可以使用如下四个主动消息通信组件实现无线消息的收 发 (定义在 tos\tinyos-2.x\tos\system) : AMSenderC, AMReceiverC, AMSnooperC, AMSnoopingReceiverC (五) TinyOS 的并发模型 TinyOS 一次仅执行一个程序程序运行时,有两个执行线程:任务和事件 事件是由硬件中断触发的,事件之间可以互相抢占,任务之间不互相抢占,事 件可抢占任务,事件也可互相抢占可抢占运行的函数用 async 标识,同步运 行的函数用 sync 标识nesC 的规则是:异步函数调用的命令和事件也必须是异 步的。
一个函数(命令或事件)不是异步就是同步(缺省) 接口的定义指明了 命令和事件是异步还是同步中断(异步函数)可以执行同步函数的唯一方法 就是 post 一个任务任务的 post 操作是异步的,但是任务的执行是同步的由 于任务和硬件事件处理程序可能会被其它异步代码所抢占,所以有时会出现数 据不一致的情况,为了避免这种情况在 nesC 中使用原子语句块来实现对临界数 据的访问 nesC 编译器也会在编译时检查潜在的数据争用 图 4.3 说明了 TinyOS 程序运行的两种方式 图 4.3 TinyOS 的程序的单步、并发执行 南京航空航天大学硕士学位论文 27 (六) TinyOS 的能量管理 TinyOS 2.x 中的能量管理分为处理器能量管理和设备能量管理: a) 微处理器能量管理,TinyOS 2.x 使用了一个 dirty 位,一个芯片相关的 能量状态计算函数和一个能量状态重载函数来管理和控制微处理器的 能量状态外设能量管理 b) TinyOS 2.0 定义了 2 种不同的能量管理模型:显式能量管理模型和隐式 能量管理模型显式能量管理模型能够被高层组件来显式地控制设备 的状态任何时候通知设备打开或关闭时,设备会立刻打开或关闭。
隐式能量管理模型则提供了一种允许设备自身控制其状态的方法使 用该模型的设备不能够被外部组件显式地打开或者关闭 下列接口用于实现设备能量管理: ? StdControl:若一个设备的开启或关闭所花费的时间可以忽略,那 么它应该提供这个接口; ? SplitControl:若一个设备的开启或关闭所花费的时间不能被忽略, 那么它应该提供这个接口;本文中使用的就是该接口 ? AsyncStdControl:由于上述 2 个接口都是同步接口,所以若想在异 步代码中控制一个设备的能量状态,那么就必须使用该接口 4.5 系统模块和接口 在系统总体设计中,最终的实现总共分为两个组件,IP6C configuration 和 IP6P module从上一节的内容可以知道,前者是一个配件,主要用于连接到必 要的组件如 Timer 组件,内存池、缓冲池(Packet、PoolC)和一个访问链路层 的组件以及一个为外部应用提供的接口;后者是一个模块包括了各种实际的实 现,包括收发函数的具体实现,各层函数(ipv6_in/output_un/compressed(), udp_in/output_ un/compressed(),icmp_in/output_ un/compressed()⋯⋯, )的具体 实现、各种预处理函数的具体实现等。
//IP6P 模块的构成 module IP6P { provides { interface SplitControl as IP6Control; interface IP; interface UDPProc[uint8_t i]; } uses { //使用的接口 基于 6LoWPAN 的 IPv6 无线传感器网络的研究与实现 28 interface Timer as Timer; interface Pool as SendPktPool; interface Pool as AppDataPool; interface Pool as FragInfoPool; ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ interface SplitControl as MessageControl; interface Receive; interface AMSend; interface Packet; //TinyOS 缓冲区处理函数 interface AMPacket; //见 4.4 节相关介绍 ⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ interface Leds; } } implementation { //******各层处理函数 void mac_input(uint8_t* buf, uint8_t len ) {⋯⋯⋯⋯}//mac 层输入数据处 理 void adapt_input(uint8_t *buf, uint16_t len) //**适应层输入数据处理 void ipv6_input_compressed(uint8_t* buf, uint16_t len) {⋯⋯⋯⋯} void ipv6_input_uncompressed(uint8_t* buf, uint16_t len){⋯⋯⋯⋯} //****已/未压缩的 IPv6 输入数据处理 void udp_input_compressed(uint8_t* buf, uint16_t len, uint8_t hc2_enc) {⋯⋯} void udp_input_uncompressed(⋯⋯⋯⋯) {⋯⋯} //****已/未压缩的 UDP 输入数据处理 ⋯⋯⋯⋯⋯⋯ } //IP6C 配件的组成 configuration IP6C { provides { interface SplitControl as IP6Control; //interface IP; interface UDPProc[uint8_t i]; 南京航空航天大学硕士学位论文 29 } } implementation components IP6P; components ActiveMessageC as AM; //**调用 TinyOS 的 ActiveMessageC 组件功能 components new PoolC(packet_buf_t。





