0 引言
无线传感器网络是当前国际上备受关注的、涉及多学科高度交叉、知识高度集成的前沿热点研究领域。未来的无线传感器网络将向海、陆、空、天立体化网络系统的方向发展,最终将成为人类生产和生活不可分割的一部分。无线传感器网络无论是在国防,还是在国民经济的各个领域均有着广阔的应用前景。对该技术的深入研究与推广应用将推动我国信息化建设的进程,并极大地带动相关产业和学科的发展。
在开展的无线传感器网络的研究中,我们都力求围绕网络的各种关键性能对无线传感器网络的各种技术进行改进。然而受有限的资金和网络条件的限制,在实验室构建大规模的实验平台比较昂贵。因此,充分利用现有资源,构建虚拟的仿真环境是非常有意义的。
本文在无线传感器网络特点和协议栈的研究基础上,利用网络仿真软件NS2进行了研究和二次开发,构建了一个基于各种无线传感器网络关键性能的仿真界面。使得用户可以通过仿真界面来自主配置网络元素,搭建网络,运行并直观地显示各种关键性能,以对其研究起到一定的指导作用。
1 无线传感器网络体系结构及NS2仿真机制
1.1 无线传感器网络体系结构
网络体系结构是网络的协议分层以及网络协议的集合,是对网络及其部件所应完成功能的定义和描述。对于无线传感器网络来说,图l是传感器节点使用的最典型的网络协议体系结构,包括物理层、数据链路层、网络层和应用层,与互联网协议栈的五层协议相对应。此外,还包括网络管理模块。这些管理平台使得传感器节点能够按照能源高效的方式协同工作,在节点移动的传感器网络中转发数据,并支持多任务和资源共享。该模型既参考了现有通用网络的TCP/IP和0sI模型的架构,同时又包含了传感器网络特有的电源管理、移动管理及任务管理。应用层为不同的应用提供了一个相对统一的高层接口;如果需要,传输层可为传感器网络保持数据流或保证与Internet连接;网络层主要关心数据的路由;数据链路层协调无线媒质的访问,尽量减少相邻节点广播时的冲突;物理层为系统提供一个简单、稳定的调制、传输和接收系统。除此而外,电源、移动和任务管理负责传感节点能量、移动和任务分配的监测,帮助传感节点协调感测任务,尽量减少整个系统的功耗。
1.2 NS2的仿真机制
NS是美国加州Lawrence Berkeley国家实验室于1989年开始开发的软件。NS是一种可扩展、以配置和可编程的事件驱动的仿真工具,可以提供有线网络、无线网络中链路层及其上层,精确到数据包的一系列行为的仿真。最值得一提的是,NS中的许多协议代码都和真实网络中的应用代码十分接近,其真实性和可靠性高居世界仿真软件的前列。
NS底层的仿真引擎主要由C++编写,同时利用0TCL语言作为仿真命令和配置的接口语言,网络仿真的过程由一段OTCL的脚本来描述,这段脚本通过调用引擎中各类属性、方法,定义网络的拓扑,配置源节点、目的节点,建立连接,产生所有事件的时间表,运行并跟踪仿真结果,还可以对结果进行相应的统计处理或制图。
通常情况下,NS仿真器的工作从创建仿真器类(simulator)的实例开始,仿真器调用各种方法生成节点,进而构造拓扑图,对仿真的各个对象进行配置,定义事件,然后根据定义的事件,模拟整个网络活动的过程。
仿真器封装了多个功能模块:
(1)事件调度器:由于NS是基于事件驱动的,调度器也成为NS的调度中心,可以跟踪仿真时间,调度当前事件链中的仿真时间并交由产生该事件的对象处理。
(2)节点:是一个复合组件,在NS中可以表示端节点和路由器,节点为每个连接到他的节点分配不同的端口,用于模拟实际网络中的端口。
(3)链路:有多个组件复合而成,用来连接网络节点。
(4)代理:代理类包含源及目的节点地址,数据包类型、大小、优先级等状态变量,每个代理链接到一个网络节点上,通常连接到端节点,由该节点给他分配端口号。
(5)包:由头部和数据两部分组成。
NS采取对真实网络元素进行抽象,保留其基本特征,并运用等效描述的方法来建立网络仿真模型。他们由大量的仿真组件所构成,用于实现对真实网络的抽象和模拟。
2 仿真平台设计
2.1 系统整体结构
NS2的主代码主要采用Tcl和C++两种语言进行编写。C++的程序运行时间很短,转换时间很长,适合具体协议的实现,而Tcl运行较慢但转换很快,正好用来仿真的配置。Tcl提供了一个强有力的平台,可以生成面向多种平台的应用程序、协议、驱动程序等等。他与Tk(too1kit)协作,可生产GUI应用程序。Tk是基于Tcl的图形程序开发工具箱,是Tcl的重要扩展部分。利用Tcl/Tk进行界面编程速度快,且界面编程工作可以从应用程序的其余部分分离开来,开发人员可以先集中精力实现程序的核心部分,然后逐步建立用户界面。
本文主要就是采用Tk工具包来作出友好的无线传感器网络用户操作界面,将所要运行的ns代码嵌入其中,通过Nam动画演示来展现网络运行的过程,用Xgraph静态图表来分析网络的各种关键性能。通过Tcl脚本来描述在用户界面上所定义的网络拓扑、场景参数以及网络协议等网络场景信息。
系统体系结构如图2所示。系统主要有网络场景模块和性能分析模块组成,网络场景模块主要包括环境参数设定、拓扑生成以及网络协议添加的实现。当设定好基站以及普通节点拓扑范围后,随机生成一个网络节点拓扑文件,结合其余的环境参数和网络协议,便可完成网络环境的初始化。
在NS2仿真器中,模拟的配置被作为一种程序设计而不是一种静态的配置。一次模拟的场景为模拟的运行定义了一个输入配置,NS采用Tcl脚本来描述用户提交的网络模拟场景。
当提交网络模拟场景后,根据参数便会生成Tcl模拟脚本并调用NS仿真器进行模拟运行网络,模拟结束后性能分析模块即被激活,性能分析模块主要包括Nam动画演示和Xgraph静态性能分析的实现。其中静态分析实现了网络能量、延时、丢包以及吞吐量等关键性能的仿真。
2.2 系统具体实现
系统具体的用户操作界面如图3所示:
在网络场景模块中,场景参数的设定仅由用户界面输入便可完成,提交参数时可自动添加至后台运行的Tcl脚本中并调用NS仿真器进行运行,然而如若添加自定义网络协议,则需进行相应的NS二次开发,先开发出想添加的网络协议,并添加至后台运行的Tcl脚本中,然后才能添至用户界面中。
在性能分析模块中,网络动画演示主要是通过调用Nam可视化工具来实现,网络主要关键性能的静态显示则是通过gawk语言对网络运行的跟踪文件进行读取、处理,最后通过Xgraph图表化得到的。
3 仿真性能分析
我们以经典层次路由协议leach协议的运行为例,来观察系统用户操作界面的使用。
在用户界面中输入需要的环境参数,在MAC协议下拉选项中选取Mac/Sensor,在routing协议中选取leach,然后确认输入点击控件0K?进行提交网络模拟场景设置。然后点击控件Run调用Ns仿真器进行运行模拟网络(其中Clear控件用来清楚输入,Reset控件用来恢复默认设置)。待模拟完成后,性能分析模块被激活,如图4所示。
此时,我们便可观察网络的各种性能分析,控件dynamic run可调甩Nam根据模拟返回结果NamTrace文件来动态演示网络的模拟过程,Nam的动态演示如图5所示。在energy一栏中,有三个控件:node alived、received data和energy consume,分别表示剩余节点数目、基站接收的数据量和网络消耗能量。如图6、7、8所示。
由图6、7、8可以看出,网络总共运行时间为505s,第一个节点在330s左右死亡,到505s左右网络还剩余4个节点,基站接收到的数据量随着时间大致呈线性上升,而网络消耗的能量却随着节点的死亡呈现指数上升趋势。观察一下网络的时延状况,在delay一栏中,有三个控件:delay/packet、delay/time和jitter,分别表示每个包的延时,单位时间内的延时和延时抖动,下面仅以delay/time和jitter为例,如图9、10所示:
从图9、10中可以看出,网络的延时存在一定的周期性,这与1each协议的“回合”过程是有一定密切关系的,而且从图10中也可以看出,网络整体慢慢趋于稳定状态。
下面看一下网络的丢包和吞吐量。这里的丢包率为了防止网络中存在一对多的传输情况(排除了广播),定义为:丢包率=丢弃的数据包/(接收的数据包+丢弃的数据包)。在drop一栏中,有两个控件:drop ratio和get ratio,这是两个对立的概念,一个表示丢包率,一个表示接收率(丢包率+接收率=1),仅以接收率为例,如图11所示,网络的吞吐量用单位时间内网络发送和接收的数据量表示,如图12所示。
由图11,在leach协议中,节点在成簇过程中即为簇内每个节点按照TDMA方法安排了传送数据的时间片,这一点保证了节点传输数据时不会发生相互碰撞,也进一步保证了数据的接收率,图12,网络的吞吐量也与传输延时保持一致,与成簇周期存在一定的周期对应关系。
4 结束语
由于NS2的安装和使用都比较复杂,针对于此,本文搭建了一个用户仿真平台,NS2仿真器对于用户是透明的,面对用户的只是设计平台上的参数和协议的选定,用户即可以利用NS2仿真器所提供的强大功能来进行那个网络模拟研究又可以省去搭建网络的复杂过程。
本文提出的系统通过采用NS2作为后台仿真器给用户提供了强大的网络仿真能力,满足了无线传感器网络的多种仿真要求,同时由Tk软件包所设计的仿真平台也为不同网络环境的重复性实验提供了种种便利,具有良好的可控、可视和可扩充性。