隐藏节点和暴露节点.docx
《隐藏节点和暴露节点.docx》由会员分享,可在线阅读,更多相关《隐藏节点和暴露节点.docx(44页珍藏版)》请在冰豆网上搜索。
隐藏节点和暴露节点
计算机学院专业实习小组报告
专业名称
网络工程
实习题目
基于NS2的无线自组织网络
协议仿真
2014年5月18日
摘要
网络协议的开发和完善需要进行许多验证和与性能相关的测试,在很多情况下这些工作是不可能都在实际的硬件系统上完成的,往往受限于资源、经费、技术条件和场地等因素的影响,使得我们难以在实际的网络系统中完成验证和测试工作,这时需要在虚拟的环境中进行模拟仿真。
本次实习是基于网络模拟软件NS2(NetworkSimulator)的无线自组织网络协议的仿真,针对在无线自组织网络(Ad--Hoc)中存在的的隐藏节点与暴露节点问题,我们利用NS2在虚拟的环境中进行模拟仿真,加深对于CSMA/CA(载波侦听多路访问冲突避免)中RTS/CTS的机制解决无线网络传输中的冲突问题的理解。
在NS2模拟环境下,我们学习了NS2中无线传输模型和门限的观念,在此基础上,通过分别编写无线网络环境中的隐藏节点、暴露节点有无RTS/CTS机制的的Tcl脚本语言,利用NS命令生成相应的Trace(跟踪文件)与Nam(动画演示文件),并通过Gawk程序语言对所有的trace文件进行有关吞吐量、丢包率、时延、抖动等性能参数的分析与研究,为了简化数据的分析,综合利用交互式绘图软件Gnuplot,将庞杂的数据资料转换成直观的图形,从而得出加入RTS/CTS对于解决无线网络传输中的数据包冲突问题的优势。
关键词
NS2网络仿真隐藏/暴露节点传输模型RTS/CTS吞吐率丢包率
第一章网络问题的理解
针对题目要求,我们做了以下几个方面的知识的学习,设计无线网路的结构、参数设置、策略等方面。
1.1隐藏节点和暴露节点
1.1.1隐藏节点
隐藏节点(如图1.1)是指在接收接点的覆盖范围内而在发送节点的覆盖范围外的节点。
具体来说即在无线网络中,A节点可以被B节点看到,但是却不能被与B节点通信的C节点看到,那么A节点对于C节点来说就是一个隐藏节点。
隐藏终端由于听不到发送节点的发送而可能向相同的接收节点发送分组,导致分组在接收节点处冲突。
冲突后发送节点要重传冲突的分组,这降低了信道的利用率。
图1.1隐藏节点图示
隐藏终端又可以分为隐发送终端和隐接收终端两种。
在单信道条件下,隐发送终端通在发送数据报文前的控制报文握手来解决。
但是隐接收终端问题在单信道条件下无法解决。
当A要向B发送数据时,先发送一个控制报文RTS;B接收到RTS后,以CTS控制报文回应;A收到CTS后才开始向B发送报文,如果A没有收到CTS,A认为发生了冲突,重发RTS,这样隐发送终端C能够听到B发送的CTS,知道A要向B发送报文,C延迟发送,解决了隐发送终端问题。
对于隐接收终端,当C听到B发送的CTS控制报文而延迟发送时,若D向C发送RTS控制报文请求发送数据,因C不能发送任何信息,所以D无法判断时RTS控制报文发生冲突,还是C没有开机,还是C时隐终端,D只能认为RTS报文冲突,就重新向C发送RTS。
因此,当系统只有一个信道时,因C不能发送任何信息,隐接收终端问题在单信道条件下无法解决。
1.1.2暴露节点
暴露节点(如图1.2)是指在发送接点的覆盖范围内而在接收节点的覆盖范围外的节点。
暴露终端因听到发送节点的发送而可能延迟发送。
但是,它其实是在接收节点的通信范围之外,它的发送不会造成冲突。
这就引入了不必要的时延。
图1.2暴露节点图示
暴露终端又可以分为暴露发送终端和暴露接收终端两种。
在单信道条件下,暴露接收终端问题是不能解决的,因为所有发送给暴露接收终端的报文都会产生冲突;暴露发送终端问题也无法解决,因为暴露发送终端无法与目的节点成功握手。
1.1.3暴露节点和隐藏节点产生的原因及影响
由于adhoc网络具有动态变化的网络拓扑结构,且工作在无线环境中,采用异步通信技术,各个移动节点共享同一个通信信道,存在信道分配和竞争问题;为了提高信道利用率,移动节点电台的频率和发射功率都比较低;并且信号受无线信道中的噪声、信道衰落和障碍物的影响,因此移动节点的通信距离受到限制,一个节点发出的信号,网络中的其它节点不一定都能收到,从而会出现“隐藏终端”和“暴露终端”问题。
隐藏终端和暴露终端问题对adhoc网络的影响:
“隐藏终端”和“暴露终端”的存在,会造成AdHoc网络时隙资源的无序争用和浪费,增加数据碰撞的概率,严重影响网络的吞吐量、容量和数据传输时延。
在adhoc网络中,当终端在某一时隙内传送信息时,若其隐藏终端在此时隙发生的同时传送信息,就会产生时隙争用冲突。
受隐藏终端的影响,接收端将因为数据碰撞而不能正确接收信息,造成发送端的有效信息的丢失和大量时间的浪费(数据帧较长时尤为严重),从而降低了系统的吞吐量和量。
当某个终端成为暴露终端后,由于它侦听到另外的终端对某一时隙的占用信息,而放弃了预约该时隙进行信息传送。
其实,因为源终端节点和目的终端节点都不一样,暴露终端是可以占用这个时隙来传送信息的。
这样,就造成了时隙资源的浪费。
1.1.4解决办法
解决隐藏终端问题的思路是使接收节点周围的邻居节点都能了解到它正在进行接收,目前实现的方法有两种:
一种是接收节点在接收的同时发送忙音来通知邻居节点,即BTMA系列;另一种方法是发送节点在数据发送前与接收节点进行一次短控制消息握手交换,以短消息的方式通知邻居节点它即将进行接收,即RTS/CTS方式。
这种方式是目前解决这个问题的主要趋势,如已经提出来的CSMA/CA、MACA、MACAW等。
还有将两种方法结合起来使用的多址协议,如DBTMA。
对于隐藏发送终端问题,可以使用控制分组进行握手的方法加以解决。
一个终端发送数据之前,首先要发送请求发送分组,只有听到对应该请求分组的应答信号后才能发送数据,而是收到此应答信号的其他终端必须延迟发送。
对于图1.1中所示的隐藏节点问题。
当A要向B发送数据时,先发送一个控制报文RTS;B接收到RTS后,以CTS控制报文回应;A收到CTS后才开始向B发送报文,如果A没有收到CTS,A认为发生了冲突,重发RTS,这样隐发送终端C能够听到B发送的CTS,知道A要向B发送报文,C延迟发送,解决了隐发送终端问题。
对于图1.2所示的暴露节点的延时问题,当B向A发送数据时,C只听到RTS控制报文,知道自己是暴露终端,认为自己可以向D发送数据。
C向D发送RTS控制报文。
如果是单信道,来自D的CTS会与B发送的数据报文冲突,C无法和D成功握手,它不能向D发送报文。
1.2RTS/CTS握手机制
1.2.1浅析RTS/CTS
RTS(RequesttoSend)即请求发送,CTS(CleartoSend)即清除发送。
RTS/CTS协议(RequestToSend/ClearToSend)即请求发送/清除发送协议是被802.11无线网络协议采用的一种用来减少由隐藏节点问题所造成的冲突的机制。
相当于一种握手协议,主要用来解决“隐藏终端”问题。
“隐藏终端”(HiddenStations)是指,基站A向基站B发送信息,基站C未侦测到A也向B发送,故A和C同时将信号发送至B,引起信号冲突,最终导致发送至B的信号都丢失了。
“隐藏终端”多发生在大型单元中(一般在室外环境),这将带来效率损失,并且需要错误恢复机制。
1.2.2RTS/CTS如何降低冲突
对于RTS/CTS握手机制,IEEE802.11提供了如下解决方案。
在参数配置中,若使用RTS/CTS协议,同时设置传送上限字节数----一旦待传送的数据大于此上限值时,即启动RTS/CTS握手协议。
如图1.3所示:
图1.3RTS/CTS
具体做法是:
当发送节点有分组要传时,检测信道是否空闲,如果空闲,则发送RTS帧,接收节点收到RTS后,发CTS帧应答,发送节点收到CTS后,开始发送数据,接收节点在接收完数据帧后,发ACK确认,一次传输成功完成。
如下图所示。
如果发出RTS后,在一定的时限内没有收到CTS应答,发送节点执行退避算法重发RTS。
RTS/CTS交互完成后,发送和接收节点的邻居收到RTS/CTS后,在以后的一段时间内抑制自己的传输。
延时时间取决于将要进行传输的数据帧的长度,所以由隐藏终端造成的碰撞就大大减少了。
采用链路级的应答(ACK)机制就可以在发生其它碰撞或干扰的时候,提供快速和可靠的恢复。
即使有冲突发生,也只是在发送RTS时,这种情况下,由于收不到接收站点的CTS消息,大家再回头用DCF提供的竞争机制,分配一个随机退守定时值,等待下一次介质空闲DIFS后竞争发送RTS,直到成功为止。
1.2.3RTS/CTS的退避算法
在CSMA系列的接入技术中,当报文产生冲突时,发送者要执行退避算法,延迟一段随机时间后再次尝试发送。
实行退避的目的是为了减小重发时在此发生冲突的可能性。
在ADHOC网络中,为了解决隐藏终端和暴露终端问题,引入了RTS-CTS握手机制。
RTS和CTS控制报文之间可能会发生冲突。
发生冲突时,发送者超时,等不到CTS,要执行退避算法,延迟一段随机时间后重发RTS。
✧二进制指数退避算法(BEB,BinaryExponentialBackoff)BEB算法的Finc和Fdec函数如下:
其中,COUNTER是退避计数器的值,MAX和MIN分别指退避计数器的最大和最小取值,每次发生冲突时,退避计数器的值加倍;每次交互成功时,退避计数器降至最小值MIN。
✧倍数增线性减算法(MILD)。
在MILD中,退避计数器的值是线性递减的,一次交互成功后,计数器的值减小β,如果β取值合理,COUNTER并不会像BEB算法一样急剧减小,在后续的竞争信道中,所有节点获胜的机会几乎均等,实现了公平接入。
发生冲突时,退避计数器增加α倍,如果α取值合理,COUNTER也不会急剧增加。
1.3NS2中相关问题分析
1.3.1NS2模拟的基本过程
利用NS进行网络模拟是有一定的步骤的,进行一次仿真的步骤大致如下:
Ø编写Tcl脚本。
Tcl脚本应该包含的内容有:
配置模拟网络拓扑结构,确定链路的基本特性,如延迟、带宽和丢失策略;建立协议代理,包括端设备的协议绑定和通信业务量模型的建立;配置业务量模型的参数,从而确定网络上的业务量的分布;设置Trace对象,Trace对象能够把模拟过程中发生的特定类型的事件记录在Trace文件中。
NS通过Trace文件来保存整个模拟过程中每个步骤的数据,待仿真完成后对所得到的数据进行分析研究。
Ø编写其他的辅助过程,设定模拟结束时间,至此脚本编写完成。
Ø用NS解释执行完成编写后的Tcl脚本。
Ø对Trace文件进行分析,得出有用的数据。
Ø对分析过的数据进行绘图处理,得出网络的性能。
Ø调整配置网络的拓扑结构和业务量模型,重新进行上述模拟过程。
基本的过程如图1.4
图1.4使用NS模拟仿真的基本过程
1.3.2无线传输模型
无线网络模型主要有3种:
Ø自由空间(FreeSpace):
最理想的传输模型,只单纯地考虑从传送端到接收端直线距离的路径损耗(PathLoss)
Ø双径地面反射(TwoRayGround):
除了考虑传送端到接收端直线距离的路径损耗外,也考虑了地面反射(ReflectionofGround)的因素
Ø阴影(Shadowing):
用来仿真当传输端和接收端之间有障碍物时对传送信号的影响,此模型常用在仿真室内(in-door)的环境)模型
这些模型是用来预知每个数据包到达接收端时的接收功率的(即预测在接收端所收到的信号强度,这个强度可以用来判断传送的数据能否成功地被接收)。
每一个无线节点的物理层都有一个接收阈值,当接收功率低于接收阈值时,就会被标记错误并被MAC层丢弃。
三种模型主要就是一个计算Pr的公式,其中自由空间适用于距离比较短的时候,双径适用于长距离,同时双径是自由空间的一个增强版,所以即使距离短时,也可以使用双径模型来算,和自由空间是一样的。
1.3.3门限
NS2主要是用信号强度门限(Threshold)的方式来判断传送的封包是否能够成功地收到,NS2会设置一个信号检测(CarrierSense)的门限CSThresh_来决定传送的封包是否能够被接收端所检测出来,当一个信号的强度小于CSThresh_时,则此封包会被实体层模块(PHYModule)所丢弃,且MAC层不知道有这样的事情发生,意思就是说MAC层会认为现在的Channel没有数据在传送(ClearChannel)。
另外,NS2会设置另一个RXThresh_,用来判断是否能成功地被接收端所接收,若是接收的封包强度大于RxThresh_,则此封包能被成功地接收,处理过后往上层传送,但若是信号小于RxThresh_,则此封包会被认为接收不完全或者有错误发生,在此,MAC层会把此封包所丢弃。
1.3.4无线节点通信范围的设置
使用NS仿真无线的网络环境,需要设定无线节点的通信范围、NS的物理层定义了如下几个与无线节点通信范围相关的参数。
ØPt_-------发送端参数,节点的发射功率,单位:
W。
ØRXThresh_--------接收端参数,信号接收门限,如果节点接收到的信号强度高于这个门限值,分组才可以被正确的接收,单位:
W。
ØCPThresh_--------接收端参数,载波侦听门限,当接收到的信号强度高于这个值时,才可以被天线所感知,但即使信号强度高于此值,仍需高于CPThresh才可以被正确解码,一般要求是RTXhresh_大于两倍的CPThresh_,单位:
W。
ØCSThresh_--------接收端参数,信号感应门限,当两个信号发生碰撞,被某个节点同时接收时,若其中一个信号的强度是另一个的CSThresh倍以上时,虽然受到另一信号的干扰,但它仍能被解调,假如不满足这一条件,两个信号都不能被接收端感应。
在这几个参数中,与无线节点通信范围直接相关的参数是Pt_和RXThresh_,无线信号在传输过程中会衰减,衰减的幅度与天气、传输距离和穿透介质有关,通过上述门限参数的设置,达到不同的模拟仿真目的。
第二章网络环境的建立与配置
2.1NS2软件的安装与配置
2.1.1软件安装
NS必须在UNIX/Linux平台下运行,因此一般需要安装UNIX/Linux操作系统。
也可以采用Windows+虚拟机(VMware,VirtualPC)+NS组合的方式。
若要在Ubuntu上运行NS,下面的软件是在安装和使用NS中需要用到的,必须先行安装。
(1)编译器gcc、make:
sudoapt_getinstallbuild-essential.
(2)tk、tcl的库文件:
sudoapt-getinstalltcl8.4.
(3)与nam相关的库文件:
sudoapt-getinstalllibxmu-dev.
NS安装步骤:
(1)下载NS安装压缩包ns2-allione-2.34.tar.gz,并放在安装路径的目录文件夹下。
(2)进入该目录并解压ns2-allione-2.34.tar.gz包到当前目录:
tar-vxzfns2-allione-2.34.tar.gz.
(3)进入解压后的文件夹,然后开始安装NS:
./install
(4)配置环境变量.
(5)测试:
在终端输入ns.如果输出%,表明安装成功。
如图2.1:
图2.1安装成功
2.1.2相关配置
安装成功后,还要设置环境变量:
修改用户目录(包括个人用户和root用户,个人用户目录一般在/home下面,root用户目录就是/root)下的.bashrc(该文件是隐藏文件),必须在该文件末尾追加以代码:
验证时,可以运行软件自带的例子,或者如图2.2所示:
图2.2验证代码
2.1.3出现的错误分析
在安装时出现的一些问题,大致和网上汇总的问题一样,借鉴别人的方法:
(1)安装时出现以下错误:
这个问题是由于GCC版本提高后对于内部函数调用的简化造成的不兼容,解决办法如下:
(2)安装成功后运行样例程序发现ns模拟没有问题就是不能自动调用nam!
显示错误为:
解决办法:
2.2隐藏节点仿真场景
2.2.1网络拓扑结构
隐藏节点仿真场景设置:
节点A、B、C之间的距离为100m,节点之间的监听范围为150m,分组有效传送距离为120m,仿真环境为500m*500m正方形区域,节点A和B之间建立一条udp连接,节点A从0.0~20s以1MB的速率向B发送分组大小为1000Byte的CBR流,节点B和C之间也建立一条udp连接,节点C从10.0~30s以1MB的速率向B发送分组大小为1000Byte的CBR流。
建立的网络拓扑结构如图2.3所示:
图2.3简单的网络拓扑结构
其中N0、N1、N2表示节点,表示链路,表示节点应用层的代理代理,
表示数据流,CBR流即等速率的数据流。
在这个拓扑中,节点N0和节点N2为发送节点,节点N1为接收节点,其中N0、N2在不同的时间段内向节点N1发送等速率、等大小的CBR数据流,数据流的参数及数据包的各项参数采用题目中所要求的。
RTS/CTS机制的选用通过设置Mac/802_11setRTSThreshold_的数值来体现。
2.2.2模拟仿真Tcl脚本
通过分析题目,根据网络模拟的过程步骤,编写代码如下,其中路由协议选用DSDV协议,除了数据包发送范围、侦听范围、时间等参数外,其它参数均认为保持默认值。
代码中设计了有无RTS/CTS机制的选项,通过Mac/802_11setRTSThreshold_的值来体现,可以模仿隐藏节点有无RTS/CTS的情况。
2.2.3参数的设置
本次模拟仿真采用地面反射(TwoRayGround)模型,如果不指定参数,将会使用默认值,这些默认值在源码文件threshold.cc文件中定义。
针对题目要求,我们修改了接收门限RXThresh_和载波侦听门限CPThresh_参数的值。
参数修改过程如图2.4
图2.4Threshold修改无线网络参数
对于RTS/CTS机制的选取,代码如下:
当数据包大小小于3000时,系统取消握手机制,默认值为0,即设有握手机制。
对于上述环境,设置步骤为:
Ø在节点0、1之间建立一条UDP联机;
Ø在UDP联机之上分别建立CBR应用程序;
Ø在节点1、2之间建立一条UDP联机;
Ø在UDP联机之上分别建立CBR应用程序;
Ø在仿真环境中,设定相应的启动与结束时间;
2.3暴露节点仿真场景
2.2.1网络拓扑结构
暴露节点仿真场景设置:
节点A、B、C、D之间的距离均为100m,节点之间的监听范围为120m,分组有效传送距离为100m,仿真环境为500m*500m正方形区域,节点A和B之间建立一条udp连接,节点A从0.0~20s以1MB的速率向B发送分组大小为1000Byte的CBR流,节点D和C之间也建立一条udp连接,节点C从10.0~30s以1MB的速率向D发送分组大小为1000Byte的CBR流。
根据题目要求,建立的网络拓扑结构如图2.5所示:
图2.5暴露节点的网络拓扑图
其中N0、N1、N2、N3表示节点,表示链路,表示节点应用层的代理代理,表示数据流,CBR流即等速率的数据流。
在这个拓扑中,节点N0和节点N2为发送节点,节点N1、N3为接收节点,其中N0、N2在不同的时间段内分别向节点N1、N3发送等速率、等大小的CBR数据流,数据流的参数及数据包的各项参数采用题目中所要求的。
RTS/CTS机制的选用通过设置Mac/802_11setRTSThreshold_的数值来体现。
2.3.2模拟仿真Tcl脚本
针对上述要求,编写的tcl脚本代码如下:
与隐藏节点的脚本代码对比,暴露节点的脚本代码主要是结点个数、时间以及载波侦听、数据传输范围发生变化,其它代码不变。
2.3.3参数设置
模拟仿真依然采用地面反射(TwoRayGround)模型,针对题目要求,我们需要对接收门限RXThresh_和载波侦听门限CPThresh_参数的值进行一定的修改。
经过仿真,当节点之间的距离设为100,而数据包的传输范围也为100时,相当于在分界线上,仿真效果太差,即几乎收不到数据,所以对于数据包的传输范围稍微做了调整,变为105进行仿真模拟。
修改接收门限RXThresh_和载波侦听门限CPThresh_参数的值。
参数修改过程如图2.6:
图2.6Threshold修改暴露节点场景参数
对于RTS/CTS机制的选取,代码如下:
当数据包大小小于3000时,系统取消握手机制,默认值为0,即设有握手机制。
对于上述环境,设置步骤为:
Ø在节点0、1之间建立一条UDP联机;
Ø在UDP联机之上分别建立CBR应用程序;
Ø在节点2、3之间建立一条UDP联机;
Ø在UDP联机之上分别建立CBR应用程序;
Ø在仿真环境中,设定相应的启动与结束时间;
第三章网络模拟运行
执行上述Tcl脚本进行网络仿真,就可以得到网络运行过程的全部数据。
为了能够分析网络运行的效能,仿真结果的数据必须能够完整收集。
NS2提供了两种基本数据追踪能力:
跟踪和监控。
跟踪能够将每个数据包在任何时刻的状态记录到指定的trace文件中,当链路或者队列中的每一个单个的数据包到达、离开或者丢弃时会记录下来。
而监控则可有选择记录自己需要的数据,例如统计发送包、接收包、丢弃包的总数量。
同时监控也可用来对所有包或指定单一数据流的监测。
同时,NS2还提供了动态显示仿真过程的nam观察器,输入指令,程序会自动调用nam动画演示模拟的过程。
3.1隐藏节点的模拟
3.1.1Trace文件
运行第二章中的隐藏节点的tcl脚本代码后,自动生成跟踪文件即.tr文件
无线网络的整个模拟过程有Trace文件记录。
无线Trace支持使用cmu-trace对象,有3种类型:
CMUTrace/Drop、CMUTrace/Recv、CMUTrace/Send。
模拟无线网络时,该三类对象用以记录由代理、路由层、MAC层或接口队列所产生的丢失、接收和发送分组的事件信息。
NS的发展对于无线Trace文件的格式做了一定的修改,但主要的信息没有变化,具体的格式图3.1:
图3.1无线Trace文件的格式
从左到右各项依次为:
✧Event(事件):
有四种类型,分别为s、r、d、f,分别表示分组的发送、接收、丢失和转发事件。
✧Time(时间):
事件发生的时间。
✧Node(节点):
事件发生的节点ID。
✧Layer(层次):
发生时间所在的层。
✧Flags(标识项):
虚线表示的标识。
✧Pktid(分组UID):
分组的id号。
✧Pkttype(分组的类型):
分组类型,有CBR(固定码率),VBR(可变)等。
✧Pktsize(大小):
分组的大小。
✧MACLayerinfo(MAC层的信息):
包含4项内容:
第1项是发送节点在无线信道上发送该分组所期望的时间,其值用十六进制表示,单位为秒;第2项内容是接收节点的MAC层地