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进行拷贝,并发往连接信道的每一个节点。
Ubuntu 13.10下安装ns-2.35及leach协议安装powered by Hong Sheng , Jiangsu university ,Zhenjiang583301743@Tue Nov 25 , 2013之所以选择基于linux的操作系统ubuntu来安装ns2,是因为我个人特别讨厌Microsoft 开发的基于windows的cygwin软件,此软件安装的时候不仅有各种错误,UI也不够友好。
而,有关ubuntu的安装,大家可以自行baidu或google之。
下面只讲解ns-2.35和leach协议的安装过程。
1. Ubuntu 13.10下ns-2.35安装step 1:下载ns2.35,/s/1h8rj0#dir/path=%2FNS解压,放在home/xx下,xx是你的用户名step 2:更新源包,终端输入:sudo apt-get updatestep 3:安装依赖包sudo apt-get install tcl8.5-dev tk8.5-devsudo apt-get install build-essential autoconf automakesudo apt-get install perl xgraph libxt-dev libx11-dev libxmu-devstep 4:修改ns-allinone-2.35中ls.h文件的代码将void eraseAll() { erase(baseMap::begin(), baseMap::end()); } 改为:void eraseAll() { this->erase(baseMap::begin(), baseMap::end()); }step 5:sudo ls /usr/bin/gcc* //查看系统已经安装的gcc版本。
Ubuntu 13.10默认安装了gcc-4.8//和gcc-4.8版本的,如果是其他版本的linux操作系统且没有安装//高于4.0版本的gcc/g++。
leach协议Leach(Low-Energy Adaptive Clustering Hierarchy)协议是一种自动形成集群的,适应能量低的无线传感器网络(WSN)中的节点通信的协议。
Leach协议的主要目标是延长无线传感器网络的生命周期和提高网络的能量使用效率。
它通过集群化方式,将节点组织成多个集群,每个集群有一个选为簇首的节点。
簇首节点负责在集群内转发数据,而其他节点只需将数据传输给其所属的簇首节点。
这样可以减少了节点之间的通信距离,从而降低了能量的消耗。
在初始阶段,每个节点都是潜在的簇首节点。
为了避免某些节点能量过早耗尽,采用了随机方式选择簇首。
节点根据自身能量状态和与周围节点的距离决定是否成为簇首节点,在选择过程中通过一定的概率,使能量低的节点有更大的概率成为簇首节点。
在每个轮次的开始,每个节点都处于未分配状态,即没有加入任何集群。
节点首先通过计算自身与周围节点的距离来确定最近的簇首节点,并将其加入该簇。
在每个节点完成选择簇首后,簇首节点开始广播插槽选择信息,每个节点根据该信息决定自己的插槽时隙。
插槽时隙是为了避免节点间的冲突,只有在自己的插槽时隙中才能进行数据传输。
数据传输过程中,节点会根据自身能量剩余情况,以及在上一轮次中是否作为簇首节点的经验,调整自己的能量消耗策略。
这种自适应的能量消耗策略可以让簇首节点能够更长时间地保持活跃,从而延长整个网络的寿命。
Leach协议还引入了轮转的概念,将节点的簇首身份进行轮流交替。
这样可以确保所有节点都有机会成为簇首节点,减少了相对于其他节点更早耗尽能量的风险。
总之,Leach协议通过集群化的方式,在无线传感器网络中实现了节能的目标。
通过引入随机选择和轮转机制,使得整个网络的能量消耗更加平衡,延长了无线传感器网络的寿命。
此外,Leach协议还可以适应网络的动态变化,保证了网络的稳定性和鲁棒性。
20070810322计科三班韦振峰NS2.34 的安装(虚拟机Ubuntu9.10下)--本人亲自总结说明:下面以我自己的机子和系统为例,ubuntu中我的帐户为w ,并且安装了图形界面,湖大校园网。
1. 下载ns-allinone-2.34.tar.gz (目前最新版本好像就是2.34 所以就选择了本版本)2.在/home/w/ 下建立文件夹ns,把ns-allinone-2.34.tar.gz 放到/home/w/ns 目录下3.安装NS2进入终端:(依次输入以下命令)sudo –i (取得管理员权限)apt-get install build-essential (for gcc and some essential)apt-get install tcl8.4 tcl8.4-dev tk8.4 tk8.4-dev (for tcl and tk)apt-get install libxmu-dev (for nam)注:以为这里需要联网下载软件包,所以之前最好在系统/系统管理/软件源里选一个比较好的源,这样下载速度会块些,我选的是中国源下的 这个源在我这里下载速度能达到130+K/s(后来发现是下午,可能上网的人比较少,才有这样的速度),对于校园网来说还可以了。
以上是一些准备工作,在几分钟之内能够完成,但是不能省略,我刚刚开始安装的时候就是不知道还要安装这些必要的软件,导致安装不成功。
下面讲解具体安装:cd /home/w/ns (进入ns-allinone-2.34.tar.gz压缩包目录)ls (可以看到只有一个文件ns-allinone-2.34.tar.gz)tar –zxvf ns-allinone-2.34.tar.gz ( 解压ns-allinone-2.34.tar.gz)cd ns-allinone-2.34.tar.gz (进入该目录)./install ( 安装ns-allinone-2.34)然后看到命令行非常养眼地快速翻滚,很兴奋。
leach协议协议名称:Leach协议1. 背景和目的Leach协议(Low Energy Adaptive Clustering Hierarchy)是一种用于无线传感器网络(Wireless Sensor Networks,WSN)中的能量有效的分簇协议。
其主要目的是通过将传感器节点组织成簇集的方式,延长整个网络的寿命,并提高数据传输的效率。
2. 协议原理Leach协议采用分簇的方式将传感器节点组织成多个簇集,每个簇集由一个簇首节点(Cluster Head)负责管理。
协议的主要原理如下:- 簇首选择:每个节点根据其能量水平以及与周围节点的距离来决定是否成为簇首节点。
节点通过随机方式选择一个数值作为阈值,如果其能量超过该阈值,则成为簇首节点。
- 簇集形成:每个节点根据与簇首节点的距离来决定加入哪个簇集。
节点将自己的信息发送给所选择的簇首节点,并成为该簇集的成员。
- 簇首轮流工作:为了均衡能量消耗,簇首节点在每个轮次中轮流工作。
簇首节点负责接收从簇集成员节点传输的数据,并将其传输到基站(Base Station)。
- 节点选择:每个节点在每个轮次中决定是否成为簇首节点。
节点通过随机方式选择一个数值作为阈值,如果其能量超过该阈值,则成为簇首节点。
3. 协议流程Leach协议的流程如下:- 初始化:每个节点初始化自己的能量水平,并随机选择一个数值作为阈值。
- 簇首选择:每个节点根据能量水平和阈值决定是否成为簇首节点。
如果是簇首节点,节点将发送簇首通告消息给其他节点。
- 簇集形成:每个节点根据与簇首节点的距离来决定加入哪个簇集。
节点将发送加入簇集请求给选择的簇首节点,并成为该簇集的成员。
- 数据传输:簇首节点负责接收从簇集成员节点传输的数据,并将其传输到基站。
- 轮次切换:每个节点在每个轮次中决定是否成为簇首节点。
如果是簇首节点,节点将发送簇首通告消息给其他节点。
4. 协议特点Leach协议具有以下特点:- 能量有效:通过分簇的方式,避免了所有节点直接与基站通信,减少了能量消耗。
leach协议协议名称:Leach协议一、背景介绍Leach(Low Energy Adaptive Clustering Hierarchy)协议是一种用于无线传感器网络中的分簇协议,旨在有效地延长网络寿命和节约能源消耗。
该协议通过将传感器节点分为簇(cluster)并选举簇首(cluster head),实现数据的会萃和传输,从而降低了网络中节点之间的通信能量消耗。
二、协议目标Leach协议的主要目标是通过以下方式来提高无线传感器网络的能源利用效率:1. 延长网络寿命:通过合理分配能量消耗和会萃数据传输任务,减少节点能量消耗的不均衡现象,从而延长整个网络的寿命。
2. 节约能源消耗:通过簇首节点的选举和数据会萃机制,减少节点之间的直接通信,降低通信能量消耗。
三、协议流程1. 初始阶段:a. 所有节点处于非簇首状态。
b. 每一个节点根据设定的概率阈值选择是否成为簇首节点,概率阈值由用户事先设定。
c. 非簇首节点选择最近的簇首节点作为自己的簇首。
d. 簇首节点广播自己的身份给附近的非簇首节点。
2. 簇首选举:a. 非簇首节点根据簇首节点广播的信息选择簇首。
b. 每一个非簇首节点计算自己到簇首节点的距离,并选择距离最近的簇首节点作为自己的簇首。
3. 数据传输:a. 非簇首节点将数据发送给所属簇首节点。
b. 簇首节点负责会萃和汇总所属簇中的数据。
c. 簇首节点将会萃后的数据传输给基站节点。
4. 簇首轮流:a. 每一个簇首节点在完成一轮数据传输后,将自己的簇首身份传递给其他非簇首节点。
b. 非簇首节点接收到簇首身份后,更新自己的簇首节点。
5. 能量平衡:a. 每一个节点在完成一轮数据传输后,将自己的能量水平发送给簇首节点。
b. 簇首节点根据接收到的能量水平信息,调整簇中节点的任务分配,实现能量平衡。
四、协议优势Leach协议的优势体现在以下几个方面:1. 能源利用效率高:通过簇首节点的选举和数据会萃机制,降低了节点之间的直接通信,减少了通信能量消耗。
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。