Ns2.34上leach协议的完美移植
- 格式:doc
- 大小:38.00 KB
- 文档页数:4
ns下leach协议仿真摸索了很久,今天终于实现了leach协议的仿真。
把自己的经验教训发一下,希望能帮助新手快些上路,俺也是新手,呵呵,也希望能多交流一下。
一开始下载的是mannasim,但不知道为什么,leach协议运行的时候出了一堆错误。
于是又重新下载了MIT leach包。
重新安装了ns2.27,安装的时候遇到很多bugs,具体解决方案网上都有,整个安装过程相当考验人的耐心。
然后安装了MIT leach。
这个过程在网上很容易搜索到。
leach安装成功后运行,却不知道该怎么用。
于是在本论坛搜索,找到一个很不错的文档(附件1),介绍了MIT uAMPS扩展的一些东东。
主要介绍了各个文件的作用,最后有一个运行leach的实例,不过这个实例少了些东西,现在补充一下:1.在cd到mit/uAMPS/sims文件夹下,里面有一个名为genscen文件,该文件是用来生成节点的场景文件。
c运行ns genscen便可以生成一个new100nodes.txt文件。
这个txt文件里是随机生成的100个节点的位置信息。
2.cd到ns-2.27文件夹下。
编写脚本,给脚本随便一个名字,比如zz,脚本内容如下:#!/bin/bash./ns ./tcl/ex/wireless.tcl \-sc mit/uAMPS/sims/nodescen \-rp leach \ //-x 1000 \-y 1000 \-nn 101 \-stop 500 \-eq_energy 1 \-init_energy 2 \-filename wireless \-dirname mit/uAMPS/sims \-topo mit/uAMPS/sims/new100nodes.txt \-num_clusters 5 \-bs_x 0 \-bs_y 0 \各个选项的作用可以见附件1的8~10页。
在命令行下输入:chmod 777 zz 回车然后 ./zz回车就能运行了3.模拟完成后,就需要分析结果。
leach协议Leach协议是一种用于无线传感器网络的能量平衡路由协议,它旨在通过动态地调整传感器节点的工作模式,延长网络的生命周期。
在传感器网络中,能源是一种宝贵的资源,因此如何有效地利用能源,成为了无线传感器网络研究的重要课题之一。
Leach协议正是为了解决这一问题而诞生的。
Leach协议的核心思想是将传感器节点分为两类,簇首节点和普通节点。
簇首节点负责接收周围普通节点的数据,并将汇总后的数据传输给基站,而普通节点则负责采集数据并将数据发送给周围的簇首节点。
这种分工的设计有效地降低了普通节点的能耗,延长了整个网络的生命周期。
在Leach协议中,簇首节点的选择是一个关键的环节。
为了保证网络中各个簇首节点的负载均衡,Leach协议采用了轮换的方式来选择簇首节点。
具体来说,Leach协议将时间划分为若干个轮次,在每个轮次开始时,网络中的每个节点都有一定的概率成为簇首节点,而不同节点的概率是相同的。
这样一来,每个节点都有机会成为簇首节点,从而实现了负载均衡。
除了簇首节点的选择外,Leach协议还引入了分簇的概念。
在每个轮次开始时,普通节点会选择一个簇首节点进行关联,而簇首节点则负责管理与自己相关联的普通节点。
这种分簇的设计有效地减少了节点之间的通信开销,提高了网络的能效。
另外,Leach协议还引入了时间分割多址(TDMA)的技术,通过对网络中不同节点的工作时间进行合理的调度,避免了节点之间的冲突,提高了网络的吞吐量。
总的来说,Leach协议通过合理地分工、轮换簇首节点、分簇和TDMA技术的引入,有效地延长了无线传感器网络的生命周期,提高了网络的能效。
同时,Leach协议的设计简单、易于实现,适用于各种规模的传感器网络。
在实际应用中,Leach协议已经被广泛地应用于各种无线传感器网络中,并取得了良好的效果。
随着无线传感器网络的不断发展,相信Leach协议将会在未来发挥越来越重要的作用,为无线传感器网络的发展贡献力量。
目录一、Leach协议与NS的关系 (2)二、算法设计思想 (3)三、簇头建立算法流程图 (4)四、难点解决 (6)五、算法运行结果分析 (9)参考文献 (9)一、Leach协议与NS的关系为了实现leach 协议,对ns进行扩展。
在ns中增加了一个事件驱动模拟器支持模拟无线传感器网络协议。
这些扩展包括MAC协议,用于计算和交互的能量分配模型和leach协议的体系结构。
网络拓扑结构可以通过简单的Nodes, Links, Agents和Applications 描述。
Nodes相当于网络中的终端主机, Links 是用于Nodes交互的连接器, Agent用来实现不同网络协议,是支持分组产生和丢弃的节点。
Applications 用来产生数据和实现不同的应用函数。
一旦网络拓扑结构建立起来后,模拟通过启动节点上的Applications运行。
为了在ns中支持无线传感器网络,在ns中增加了 mobile nodes, MAC 协议和信道传播模型Channel 。
Applications类的头文件用Tcl语言写的,节点中的其他函数功能用C++语言写成的。
数据包的发送过程:Applications创建数据包(data packets),然后发送给Agent. Agent执行协议栈中运输层和网络层的功能,将数据包发送给CMUTrace,。
CMUTrace将packets的统计数据写到trace 文件,然后将packets发至Connector。
Connector将数据包传送给用于数据链路处理的链路层(LL).经过一小段时间的延迟后,数据包由LL发送给Queue缓冲队列。
如果是还没有传送过的数据包,Queue将以队列进行存储。
然后Queue将数据包出队列,发送到MAC层。
然后开始运行MAC(媒体访问控制)协议。
最终,packets被发送到网络接口层(Network Interface),网络接口层将packets加上正确的传输能量,然后将packets发送到Channel. Channel将packets进行拷贝,并发往连接信道的每一个节点。
Ns2.34上leach协议的完美移植经过几天的不断实验,以及网上各位前辈的帮助,终于成功将leach协议完美移植到ns2.34上,下面是我的安装笔记。
Step1在ns-2.34的目录下新建一个leach文件夹,将leach.tar.gz放入这个文件夹Step2在终端中进入这个目录下,键入tar zxf leach.tar.gzStep3①将leach/mit整个目录复制到ns-allinone-2.34/ns-2.34中②将leach/mac目录下的, mac-sensor.h, , mac-sensor-timers.h四个文件复制到ns-allinone-2.34/ns-2.34/mac中③将leach/tcl/mobility目录下的四个文件复制到ns-allinone-2.34/ns-2.34/tcl/mobility中④将ns-allinone-2.34/ns-2.34/tcl/ex目录下的wireless.tcl重命名为wireless_1.tcl,再将leach/tcl/ex目录下的wireless.tcl复制到ns-allinone-2.34/ns-2.34/tcl/ex中⑤将leach目录下的test,leach_test,package_up三个文件复制到ns-allinone-2.34/ ns-2.34中Step3 修改文件①需要修改的文件有:ns-allinone-2.34/ns-2.34/apps/,app.hns-allinone-2.34/ns-2.34/trace/,cmu-trace.hns-allinone-2.34/ns-2.34/common/,,packet.hns-allinone-2.34/ns-2.34/mac/,ll.h,,,phy.h,wireless-phy.c c,wireless-phy.h②修改方法:对于leach目录下相应的文件(即刚才未复制的文件),将代码中以“#ifdef MIT_uAMPS”开始,并以“#endif”结束的部分复制到以上文件对应的位置这个过此要小心核对修改,否则前功尽弃③特殊情况<1> ns-allinone-2.34/ns-2.34/common/packet.h中大约185行,根据其他变量的格式将代码更改为#ifdef MIT_uAMPSstatic const packet_t PT_RCA = 61;#endif并将最后一个枚举值改为62这个过程可以随情况改变,还要注意的是packet.h文件并不是只改这一部分,前面的修改依然要。
<2> ns-allinone-2.34/ns-2.34/mac/wireless-phy.h,给类WirelessPhy添加public变量,大约105行#ifdef MIT_uAMPSMobileNode * node_;#endif或者将文件中的第150行,本来注释掉的// MobileNode * node_; 取消注释,注意这两个只能选一个对于Antenna *ant_;和Propagation *propagation_;之间的那部分代码,应将其置于public声明的最后(private之前), 即Propagation变量必须保持为public,也就是说将下面的关键字Private注释掉#ifdef MIT_uAMPSEnergyResource *energy_; // Energy resourceint alive_; // 0 = dead, 1 = alive//endif//ifdef MIT_uAMPS_tempdouble Efriss_amp_; // Xmit amp energy (J/bit/m^2)double Etwo_ray_amp_; // Xmit amp energy (J/bit/m^4)double EXcvr_; // Xcvr energy (J/bit)double Pfriss_amp_; // Friss base transmission power (W/m^2)double Ptwo_ray_amp_; // Two-ray base transmission power (W/m^4)double PXcvr_; // Xcvr Power (W)int sleep_; // 0 = awake, 1 = asleepint ss_; // amount of spreadingdouble time_finish_rcv_;double dist_; // approx. distance to transmitterprivate: //将其注释掉double pktEnergy(double pt, double pxcvr, int nbytes);#endif<3> ns-allinone-2.34/ns-2.34/mac/(大约235行), (大约132行),将代码中的node_ = (Node *)obj;改为#ifdef MIT_uAMPSnode_ = (MobileNode *)obj;#elsenode_ = (Node *)obj;#endif④修改ns-allinone-2.34/ns-2.34/mit/uAMPS/ns-leach.tcl将set dst_ $mac_dsc改为set dsc_addr $mac_dsc⑤修改ns-allinone-2.34/ns-2.34目录下的Makefile文件在DEFINE行的最后添加-DMIT_uAMPS 在INCLUDE行的中间添加-I./mit/rca -I./mit/uAMPS \在代码gaf/gaf.o \之前添加mit/rca/energy.o mit/rca/rcagent.o \mit/rca/rca-ll.o mit/rca/resource.o \mac/mac-sensor-timers.o mac/mac-sensor.o mit/uAMPS/bsagent.o \Step4这时,直接输入./test,估计肯定会有Line3和Line5行的提示错误,要处理这个问题,只需打开test文件,将里面的代码改为(注意红色部分位置):#!/bin/bashcd tcl/exns wireless-demo-csci694.tclsleep 2cd ../.././leach_test即可。
这个时候如果去输入./test测试,会出现很多警告,其实也不用担心的,协议是可以正常运行的,也可以通过如下操作消除警告:在tcl/lib下的ns_default.tcl文件第692行加入7个初始值,具体的初始值应该对照 mac 文件下的 值输入,如下所示在tcl/lib下的ns_default.tcl文件第692行加入7个初始值,具体的初始值应该对照 mac 文件下的 值输入,如下所示:Phy/WirelessPhy set alive_ 1;Phy/WirelessPhy set Efriss_amp_ 100*1e-12;Phy set Etwo_ray_amp_ 0.013*1e-12;Phy/WirelessPhy set EXcvr_ 50*1e-9;Phy/WirelessPhy set sleep_ 0;Phy/WirelessPhy set ss_ 1;Phy/WirelessPhy set dist_ 0;PS:上面的方法我是在网上查到的,但是在我这里,却不好使,甚至导致NS命令不能用了,所以我并没有添加这些值,我说过,这些警告并没有影响到leach的使用Step5 给.bashrc添加环境变量在终端键入sudo gedit .bashrc(相信装完ns2.34都懂)export RCA_LIBRARY=/安装目录/ns-allinone-2.33/ns-2.33/mit/rcaexport uAMPS_LIBRARY=/安装目录/ns-allinone-2.33/ns-2.3/mit/uAMPSStep6 测试在终端键入./test出现如下画面[root@localhost ns-2.34]# ./testnum_nodes is set 3warning: Please use -channel as shown in tcl/ex/wireless-mitf.tclINITIALIZE THE LIST xListHeadLoading connection pattern...the file:../mobility/scene/cbr-3-testLoading scenario file...Starting Simulation...:sendUp - Calc highestAntennaZ_ and distCST_highestAntennaZ_ = 1.5, distCST_ = 89771.2SORTING LISTS ...DONE!NS EXITING...这时再运行./test应该没有问题了,反正我的安装是没有问题了。
再次打开leach.err文件,里面出现代码:INITIALIZE THE LIST xListHeadSORTING LISTS ...DONE!leach.out文件大小也随时间增加,同时产生leach.alive,leach.data等文件,这样就成功了。
恭喜你,you make it。