当前位置:文档之家› 基于NS2无线自组织网络协议仿真

基于NS2无线自组织网络协议仿真

Northwestern Polytechnical University

计算机学院专业实习小组报告

专业名称计算机科学与技术-系统结构

实习题目基于NS2的无线自组织网络

协议仿真

2012年7月12日

目录

摘要 (1)

关键词 (1)

第一章网络问题的理解 (2)

1.1 隐藏节点和暴露节点 (2)

1.1.1 隐藏节点 (2)

1.1.2 暴露节点 (3)

1.1.3 暴露节点和隐藏节点产生的原因及影响 (3)

1.1.4 解决办法 (4)

1.2 RTS/CTS握手机制 (5)

1.2.1 浅析RTS/CTS (5)

1.2.2 RTS/CTS如何降低冲突 (5)

1.2.3 RTS/CTS的退避算法 (6)

1.3 NS2中相关问题分析 (6)

1.3.1 NS2模拟的基本过程 (6)

1.3.2 无线传输模型 (8)

1.3.3 门限 (8)

1.3.4 无线节点通信范围的设置 (8)

第二章网络环境的建立与配置 (9)

2.1 NS2软件的安装与配置 (9)

2.1.1 软件安装 (9)

2.1.2 相关配置 (10)

2.1.3 出现的错误分析 (11)

2.2 隐藏节点仿真场景 (12)

2.2.1 网络拓扑结构 (12)

2.2.2 模拟仿真Tcl脚本 (12)

2.2.3 参数的设置 (14)

2.3 暴露节点仿真场景 (16)

2.2.1 网络拓扑结构 (16)

2.3.2 模拟仿真Tcl脚本 (16)

2.3.3 参数设置 (18)

第三章网络模拟运行 (20)

3.1 隐藏节点的模拟 (20)

3.1.1 Trace文件 (20)

3.1.2 Nam文件 (22)

3.2 暴露节点的模拟 (24)

3.2.1 Trace文件 (24)

3.2.2 Nam文件 (25)

第四章网络性能仿真与分析 (26)

4.1 Gawk语言简介 (26)

4.1.1 gawk处理文档的过程 (26)

4.2 gnuplot绘图 (27)

4.3 性能参数分析模型 (28)

4.3.1 传输延时 (28)

4.3.2 时延抖动 (28)

4.3.3 丢包率 (28)

4.3.4 吞吐量 (28)

4.4 丢包率计算 (29)

4.4.1 NS2中网络丢包因素简介 (29)

4.4.2 隐藏节点 (30)

4.4.3 暴露节点 (33)

4.5 吞吐率计算 (35)

4.5.1 隐藏节点 (35)

4.5.2 暴露节点 (37)

结语 (39)

摘要

网络协议的开发和完善需要进行许多验证和与性能相关的测试,在很多情况下这些工作是不可能都在实际的硬件系统上完成的,往往受限于资源、经费、技术条件和场地等因素的影响,使得我们难以在实际的网络系统中完成验证和测试工作,这时需要在虚拟的环境中进行模拟仿真。本次实习是基于网络模拟软件NS2(Network Simulator)的无线自组织网络协议的仿真,针对在无线自组织网络(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 暴露节点和隐藏节点产生的原因及影响

由于ad hoc网络具有动态变化的网络拓扑结构,且工作在无线环境中,采用异步通信技术,各个移动节点共享同一个通信信道,存在信道分配和竞争问题;为了提高信道利用率,移动节点电台的频率和发射功率都比较低;并且信号受无线信道中的噪声、信道衰落和障碍物的影响,因此移动节点的通信距离受到限制,

一个节点发出的信号,网络中的其它节点不一定都能收到,从而会出现“隐藏终端”和“暴露终端”问题。

隐藏终端和暴露终端问题对ad hoc网络的影响:

“隐藏终端”和“暴露终端”的存在,会造成Ad Hoc网络时隙资源的无序争用和浪费,增加数据碰撞的概率,严重影响网络的吞吐量、容量和数据传输时延。在ad hoc网络中,当终端在某一时隙内传送信息时,若其隐藏终端在此时隙发生的同时传送信息,就会产生时隙争用冲突。受隐藏终端的影响,接收端将因为数据碰撞而不能正确接收信息,造成发送端的有效信息的丢失和大量时间的浪费(数据帧较长时尤为严重),从而降低了系统的吞吐量和量。当某个终端成为暴露终端后,由于它侦听到另外的终端对某一时隙的占用信息,而放弃了预约该时隙进行信息传送。其实,因为源终端节点和目的终端节点都不一样,暴露终端是可以占用这个时隙来传送信息的。这样,就造成了时隙资源的浪费。

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.2 RTS/CTS握手机制

1.2.1 浅析RTS/CTS

RTS(Request to Send)即请求发送,CTS(Clear to Send)即清除发送。RTS/CTS协议(Request To Send/Clear To Send)即请求发送/清除发送协议是被802.11无线网络协议采用的一种用来减少由隐藏节点问题所造成的冲突的机制。相当于一种握手协议,主要用来解决“隐藏终端”问题。“隐藏终端”(Hidden Stations)是指,基站A向基站B发送信息,基站C未侦测到A也向B发送,故A 和C同时将信号发送至B,引起信号冲突,最终导致发送至B的信号都丢失了。“隐藏终端”多发生在大型单元中(一般在室外环境),这将带来效率损失,并且需要错误恢复机制。

1.2.2 RTS/CTS如何降低冲突

对于RTS/CTS握手机制,IEEE802.11提供了如下解决方案。在参数配置中,若使用RTS/CTS协议,同时设置传送上限字节数----一旦待传送的数据大于此上限值时,即启动RTS/CTS握手协议。如图1.3所示:

图1.3 RTS/CTS

具体做法是:当发送节点有分组要传时,检测信道是否空闲,如果空闲,则发送RTS帧,接收节点收到RTS后,发CTS帧应答,发送节点收到CTS后,开始发送数据,接收节点在接收完数据帧后,发ACK确认,一次传输成功完成。如下图所示。如果发出RTS后,在一定的时限内没有收到CTS应答,发送节点执行退避算法

重发RTS。RTS/CTS交互完成后,发送和接收节点的邻居收到RTS/CTS后,在以后的一段时间内抑制自己的传输。延时时间取决于将要进行传输的数据帧的长度,所以由隐藏终端造成的碰撞就大大减少了。采用链路级的应答(ACK)机制就可以在发生其它碰撞或干扰的时候,提供快速和可靠的恢复。

即使有冲突发生,也只是在发送 RTS时,这种情况下,由于收不到接收站点的CTS 消息,大家再回头用DCF提供的竞争机制,分配一个随机退守定时值,等待下一次介质空闲DIFS后竞争发送RTS,直到成功为止。

1.2.3 RTS/CTS的退避算法

在CSMA系列的接入技术中,当报文产生冲突时,发送者要执行退避算法,延迟一段随机时间后再次尝试发送。实行退避的目的是为了减小重发时在此发生冲突的可能性。在ADHOC网络中,为了解决隐藏终端和暴露终端问题,引入了RTS-CTS 握手机制。RTS和CTS控制报文之间可能会发生冲突。发生冲突时,发送者超时,等不到CTS,要执行退避算法,延迟一段随机时间后重发RTS。

?二进制指数退避算法(BEB,Binary Exponential Backoff)BEB算法的Finc 和

Fdec函数如下: 其中,COUNTER是退避计数器的值, MAX 和MIN分别指退避计数器的最大和最小取值,每次发生冲突时,退避计数器的值加倍;每次交互成功时,退避计数器降至最小值MIN。

?倍数增线性减算法(MILD)。在MILD 中,退避计数器的值是线性递减的,一次交

互成功后,计数器的值减小β,如果β取值合理,COUNTER并不会像BEB 算法一样急剧减小,在后续的竞争信道中,所有节点获胜的机会几乎均等,实现了公平接入。发生冲突时,退避计数器增加α倍, 如果α取值合理, COUNTER 也不会急剧增加。

1.3 NS2中相关问题分析

1.3.1 NS2模拟的基本过程

利用NS进行网络模拟是有一定的步骤的,进行一次仿真的步骤大致如下: 编写Tcl脚本。Tcl脚本应该包含的内容有:配置模拟网络拓扑结构,确定链路的基本特性,如延迟、带宽和丢失策略;建立协议代理,包括端设备的协议绑定和通信业务量模型的建立;配置业务量模型的参数,从而确定网络上的业务量的分布;设置Trace对象,Trace对象能够把模拟过程中发

生的特定类型的事件记录在Trace 文件中。NS 通过Trace 文件来保存整个模拟过程中每个步骤的数据,待仿真完成后对所得到的数据进行分析研究。 编写其他的辅助过程,设定模拟结束时间,至此脚本编写完成。 用NS 解释执行完成编写后的Tcl 脚本。

对Trace 文件进行分析,得出有用的数据。

对分析过的数据进行绘图处理,得出网络的性能。

调整配置网络的拓扑结构和业务量模型,重新进行上述模拟过程。 基本的过程如图1.4

图1.4 使用NS 模拟仿真的基本过程

1.3.2 无线传输模型

无线网络模型主要有3种:

自由空间(Free Space):最理想的传输模型,只单纯地考虑从传送端到接收端直线距离的路径损耗(Path Loss)

双径地面反射(Two Ray Ground):除了考虑传送端到接收端直线距离的路径损耗外,也考虑了地面反射(Reflection of Ground)的因素

阴影(Shadowing):用来仿真当传输端和接收端之间有障碍物时对传送信号的影响,此模型常用在仿真室内(in-door)的环境)模型

这些模型是用来预知每个数据包到达接收端时的接收功率的(即预测在接收端所收到的信号强度,这个强度可以用来判断传送的数据能否成功地被接收)。每一个无线节点的物理层都有一个接收阈值,当接收功率低于接收阈值时,就会被标记错误并被 MAC层丢弃。

三种模型主要就是一个计算Pr的公式,其中自由空间适用于距离比较短的时候,双径适用于长距离,同时双径是自由空间的一个增强版,所以即使距离短时,也可以使用双径模型来算,和自由空间是一样的。

1.3.3 门限

NS2主要是用信号强度门限(Threshold)的方式来判断传送的封包是否能够成功地收到,NS2会设置一个信号检测(Carrier Sense)的门限CSThresh_来决定传送的封包是否能够被接收端所检测出来,当一个信号的强度小于CSThresh_时,则此封包会被实体层模块(PHY Module)所丢弃,且MAC层不知道有这样的事情发生,意思就是说MAC层会认为现在的Channel没有数据在传送(Clear Channel)。另外,NS2会设置另一个RXThresh_,用来判断是否能成功地被接收端所接收,若是接收的封包强度大于RxThresh_,则此封包能被成功地接收,处理过后往上层传送,但若是信号小于RxThresh_,则此封包会被认为接收不完全或者有错误发生,在此,MAC层会把此封包所丢弃。

1.3.4 无线节点通信范围的设置

使用NS仿真无线的网络环境,需要设定无线节点的通信范围、NS的物理层定义了如下几个与无线节点通信范围相关的参数。

Pt_ -------发送端参数,节点的发射功率,单位:W。

RXThresh_--------接收端参数,信号接收门限,如果节点接收到的信号强度高于这个门限值,分组才可以被正确的接收,单位:W。

CPThresh_--------接收端参数,载波侦听门限,当接收到的信号强度高于这个值时,才可以被天线所感知,但即使信号强度高于此值,仍需高于CPThresh 才可以被正确解码,一般要求是RTXhresh_大于两倍的CPThresh_,单位:W。 CSThresh_--------接收端参数,信号感应门限,当两个信号发生碰撞,被某个节点同时接收时,若其中一个信号的强度是另一个的CSThresh倍以上时,虽然受到另一信号的干扰,但它仍能被解调,假如不满足这一条件,两个信号都不能被接收端感应。

在这几个参数中,与无线节点通信范围直接相关的参数是Pt_和RXThresh_,无线信号在传输过程中会衰减,衰减的幅度与天气、传输距离和穿透介质有关,通过上述门限参数的设置,达到不同的模拟仿真目的。

第二章网络环境的建立与配置

2.1 NS2软件的安装与配置

2.1.1 软件安装

NS必须在UNIX/Linux平台下运行,因此一般需要安装UNIX/Linux操作系统。也可以采用Windows+虚拟机(VMware,Virtual PC)+NS组合的方式。

若要在Ubuntu上运行NS,下面的软件是在安装和使用NS中需要用到的,必须先行安装。

(1)编译器gcc、make:sudo apt_get install build-essential.

(2) tk、tcl的库文件:sudo apt-get install tcl8.4.

(3)与nam相关的库文件:sudo apt-get install libxmu-dev.

NS安装步骤:

(1)下载NS安装压缩包ns2-allione-2.34.tar.gz,并放在安装路径的目录文件夹下。

(2)进入该目录并解压ns2-allione-2.34.tar.gz包到当前目录:

tar-vxzf ns2-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, 节点之间的监听范围为150 m, 分组有效传送距离为120m, 仿真环境为500 m *500 m 正方形区域, 节点A 和B 之间建立一条udp 连接, 节点A 从0. 0~20 s 以1MB 的速率向B 发送分组大小为1 000 Byte 的CBR 流, 节点B 和C 之间也建立一条udp 连接, 节点C 从10.0~ 30s 以1MB 的速率向B 发送分组大小为1000 Byte 的CBR 流。 建立的网络拓扑结构如图2.3所示:

图2.3 简单的网络拓扑结构

其中N0、N1、N2

表示节点,

表示节点应用层的代理代理,

CBR 流即等速率的数据流。

在这个拓扑中,节点N0和节点N2为发送节点,节点N1为接收节点,其中N0、N2在不同的时间段内向节点N1 发送等速率、等大小的CBR 数据流,数据流的参数及数据包的各项参数采用题目中所要求的。RTS/CTS 机制的选用通过设置Mac/802_11 set RTSThreshold_ 的数值来体现。

2.2.2 模拟仿真Tcl 脚本

通过分析题目,根据网络模拟的过程步骤,编写代码如下,其中路由协议选用DSDV 协议,除了数据包发送范围、侦听范围、时间等参数外,其它参数均认为保持默认值。

代码中设计了有无RTS/CTS机制的选项,通过Mac/802_11 set RTSThreshold_的值来体现,可以模仿隐藏节点有无RTS/CTS的情况。

2.2.3 参数的设置

本次模拟仿真采用地面反射(TwoRayGround)模型,如果不指定参数,将会使用默认值,这些默认值在源码文件https://www.doczj.com/doc/9016630157.html,文件中定义。

针对题目要求,我们修改了接收门限RXThresh_和载波侦听门限CPThresh_参数的值。

参数修改过程如图2.4

图2.4 Threshold 修改无线网络参数

对于RTS/CTS机制的选取,代码如下:

当数据包大小小于3000时,系统取消握手机制,默认值为0,即设有握手机制。对于上述环境,设置步骤为:

在节点0、1之间建立一条UDP联机;

在UDP联机之上分别建立CBR应用程序;

在节点1、2之间建立一条UDP联机;

在UDP联机之上分别建立CBR应用程序;

在仿真环境中,设定相应的启动与结束时间;

2.3 暴露节点仿真场景

2.2.1 网络拓扑结构

暴露节点仿真场景设置:节点A 、B 、C 、D 之间的距离均为100m, 节点之间的监听范围为120 m, 分组有效传送距离为100m, 仿真环境为500 m *500 m 正方形区域, 节点A 和B 之间建立一条udp 连接, 节点A 从0. 0~ 20 s 以1MB 的速率向B 发送分组大小为1 000 Byte 的CBR 流, 节点D 和C 之间也建立一条udp 连接, 节点C 从10.0~ 30s 以1MB 的速率向D 发送分组大小为1000 Byte 的CBR 流。 根据题目要求,建立的网络拓扑结构如图2.5所示:

图2.5 暴露节点的网络拓扑图

其中N0、N1、N2、N3

表示节点,

表示链路,表示节点应用层的代理表示数据流,CBR 流即等速率的数据流。

在这个拓扑中,节点N0和节点N2为发送节点,节点N1、N3为接收节点,其中N0、N2在不同的时间段内分别向节点N1 、N3发送等速率、等大小的CBR 数据流,数据流的参数及数据包的各项参数采用题目中所要求的。RTS/CTS 机制的选用通过设置Mac/802_11 set RTSThreshold_ 的数值来体现。

2.3.2 模拟仿真Tcl 脚本

针对上述要求,编写的tcl 脚本代码如下:

相关主题
文本预览
相关文档 最新文档