计算机学院专业实习小组报告
专业名称 网络工程
实习题目 基于NS2的无线自组织网络
协议仿真
2014年5月18日
目 录
摘 要 .................................................................................................................................................. 1
关键词 .................................................................................................................................................. 2
第一章 网络问题的理解............................................................................................................... 2
1.1 隐藏节点和暴露节点 .............................................................................................................. 2
1.1.1 隐藏节点 ............................................................................................................................ 2
1.1.2 暴露节点 ............................................................................................................................ 3
1.1.3 暴露节点和隐藏节点产生的原因及影响 ........................................................................ 4
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中相关问题分析 .............................................................................................................. 7
1.3.1 NS2模拟的基本过程 ........................................................................................................ 7
1.3.2 无线传输模型 .................................................................................................................... 8
1.3.3 门限 .................................................................................................................................... 9
1.3.4 无线节点通信范围的设置 ................................................................................................ 9
第二章 网络环境的建立与配置 .................................................................................................... 10
2.1 NS2软件的安装与配置 ........................................................................................................... 10
2.1.1 软件安装 .......................................................................................................................... 10
2.1.2 相关配置 .......................................................................................................................... 11
2.1.3 出现的错误分析 .............................................................................................................. 11
2.2 隐藏节点仿真场景 .................................................................................................................. 13
2.2.1 网络拓扑结构 .................................................................................................................. 13
2.2.2 模拟仿真Tcl脚本 ........................................................................................................... 13
2.2.3 参数的设置 ...................................................................................................................... 16
2.3 暴露节点仿真场景 .................................................................................................................. 17
2.2.1 网络拓扑结构 .................................................................................................................. 17
2.3.2 模拟仿真Tcl脚本 ........................................................................................................... 18
2.3.3 参数设置 .......................................................................................................................... 20
第三章 网络模拟运行 .................................................................................................................... 22
3.1 隐藏节点的模拟 ...................................................................................................................... 22
3.1.1 Trace文件 ........................................................................................................................ 22
3.1.2 Nam文件 ......................................................................................................................... 24
3.2 暴露节点的模拟 ...................................................................................................................... 26
3.2.1 Trace文件 ........................................................................................................................ 26
3.2.2 Nam文件 ......................................................................................................................... 27
第四章 网络性能仿真与分析 ........................................................................................................ 28
4.1 Gawk语言简介 ..................................................................................................................... 28
4.1.1 gawk处理文档的过程 .................................................................................................... 28
4.2 gnuplot绘图 ........................................................................................................................... 29
4.3 性能参数分析模型 ................................................................................................................ 30
4.3.1 传输延时 .......................................................................................................................... 30
4.3.2 时延抖动 .......................................................................................................................... 30
4.3.3 丢包率 .............................................................................................................................. 30
4.3.4 吞吐量 .............................................................................................................................. 30
4.4 丢包率计算 ............................................................................................................................ 31
4.4.1 NS2中网络丢包因素简介 .............................................................................................. 31
4.4.2 隐藏节点 .......................................................................................................................... 32
4.4.3 暴露节点 .......................................................................................................................... 35
4.5 吞吐率计算 ............................................................................................................................ 37
4.5.1 隐藏节点 .......................................................................................................................... 37
4.5.2 暴露节点 .......................................................................................................................... 40
结语 .................................................................................................................................................... 42
摘 要
网络协议的开发和完善需要进行许多验证和与性能相关的测试,在很多情况下这些工作是不可能都在实际的硬件系统上完成的,往往受限于资源、经费、技术条件和场地等因素的影响,使得我们难以在实际的网络系统中完成验证和测试工作,这时需要在虚拟的环境中进行模拟仿真。本次实习是基于网络模拟软件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)模型,如果不指定参数,将会使用默认值,这些默认值在源码文件threshold.cc文件中定义。
针对题目要求,我们修改了接收门限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脚本代码如下:
与隐藏节点的脚本代码对比,暴露节点的脚本代码主要是结点个数、时间以及载波侦听、数据传输范围发生变化,其它代码不变。
2.3.3 参数设置
模拟仿真依然采用地面反射(TwoRayGround)模型, 针对题目要求,我们需要对接收门限RXThresh_和载波侦听门限CPThresh_参数的值进行一定的修改。
经过仿真,当节点之间的距离设为100,而数据包的传输范围也为100时,相当于在分界线上,仿真效果太差,即几乎收不到数据,所以对于数据包的传输范围稍微做了调整,变为105进行仿真模拟。
修改接收门限RXThresh_和载波侦听门限CPThresh_参数的值。
参数修改过程如图2.6:
图2.6 Threshold修改暴露节点场景参数
对于RTS/CTS机制的选取,代码如下:
当数据包大小小于3000时,系统取消握手机制,默认值为0,即设有握手机制。 对于上述环境,设置步骤为:
在节点0、1之间建立一条UDP联机;
在UDP联机之上分别建立CBR应用程序;
在节点2、3之间建立一条UDP联机;
在UDP联机之上分别建立CBR应用程序;
在仿真环境中,设定相应的启动与结束时间;
第三章 网络模拟运行
执行上述Tcl脚本进行网络仿真,就可以得到网络运行过程的全部数据。为了能够分析网络运行的效能,仿真结果的数据必须能够完整收集。NS2 提供了两种基本数据追踪能力:跟踪和监控。跟踪能够将每个数据包在任何时刻的状态记录到指定的trace 文件中,当链路或者队列中的每一个单个的数据包到达、离开或者丢弃时会记录下来。而监控则可有选择记录自己需要的数据,例如统计发送包、接收包、丢弃包的总数量。同时监控也可用来对所有包或指定单一数据流的监测。同时,NS2 还提供了动态显示仿真过程的nam观察器,输入指令,程序会自动调用nam动画演示模拟的过程。
3.1 隐藏节点的模拟
3.1.1 Trace文件
运行第二章中的隐藏节点的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(标识项):虚线表示的标识。
✧ Pkt id(分组UID):分组的id号。
✧ Pkt type(分组的类型):分组类型,有CBR(固定码率),VBR(可变)等。 ✧ Pkt size(大小):分组的大小。
✧ MAC Layer info(MAC层的信息):包含4项内容:第1项是发送节点在无线信道上发送该分组所期望的时间,其值用十六进制表示,单位为秒;第2项内容是接收节点的MAC层地址;第3项内容是发送节点的MAC地址;第4项内容表示封装的分组类型,例如0X800表示IP分组,0X806表示ARP分组。 ✧ -----:分隔符。
✧ IP info(IP层信息):包含4项内容:第1项是发送节点的源节点地址,格式为“节点号:端口号”;第2项是接收分组的目的节点的地址,格式为“节点号:端口号”;第3项是分组的TTL(IP协议中的值,判断网络数据传输时间是否太长而丢弃);第4项是源节点到目的节点的跳数。
对于隐藏节点有无RTS/CTS机制我们生成以下两个trace文件,分别如图3.2,,3.3所示:
图3.2 有RTS/CTS的trace文件
图3.3 无RTS/CTS的trace文件
从图中可以清楚的看到,有无握手机制的跟踪文件的区别,同时在1.5s时启动代理后,0节点的AGT层都发射了数据包。具体的数据分析见第四章。
3.1.2 Nam文件
运行第二章中的Tcl脚本,可以生成对应的nam动画演示文件,tcl中可以对节点、链路、队列和Agent等对象进行动画显示方面的属性控制,NAM动画显示的命令如下:
节点:
链路和队列:可以显示链路的方向、颜色等。
Agent: 在某一个节点上绑定代理。
针对题目要求,做出的NAM动画如图3.4,3.5所示:
图3.4 有RS/CTS的NAM文件
图3.5 无RTS/CTS的NAM文件
3.2 暴露节点的模拟
3.2.1 Trace文件
有关Trace文件格式等详细信息见3.1节隐藏节点的Trace文件分析,这里主要展示暴露节点tcl文件生成的数据文件,如图3.6,3.7所示:
图3.6 有RTS/CTS的暴露节点的Trace文件
图3.7 无RTS/CTS的暴露节点的Trace文件 Trace文件的各项名称及表示的意义详见上一节。
3.2.2 Nam文件
暴露节点tcl生成的NAM文件如图3.8,3.9所示:
图3.8 暴露节点有RTS/CTS机制的NAM
图3.9 暴露节点无RTS/CTS机制的NAM
第四章 网络性能仿真与分析
4.1 Gawk语言简介
4.1.1 gawk处理文档的过程
Gawk是一种对文档资料具有很强处理能力的程序语言,简短的几句代码就可以完成对数据的修改、对比、抽象等操作。
Gawk 语言将所要处理的文档分解为一条条的记录(一般是数据文件中的一行),每条记录默认以空格或TAB键分割为一个个字段。在对记录的处理过程中,
一般都要对记录中的字段进行操作。对记录中字段提取可以采用字段变量“$1,$2,$3„”等,gawk读入记录后已自动把字段值存入相应的变量中。具体例子如下:
Gawk处理文档的过程是针对档案的每一条记录搜寻指定的模式(pattern),当记录中有符合指定的模式时,gawk就会在此记录执行被指定的动作(Action),按照这种模式直到文档的结束。
执行Gawk程序指令如下:
即gawk –f program inputfilename > savefilename
在实习中利用awk主要处理吞吐量和丢包率。
4.2 gnuplot绘图
在LINUX终端运行命令gnuplot绘图环境,输入quit或exit或q退出。进入gnuplot绘图环境以后有两种工作方式:
交互式:直接在绘图环境中编写绘图命令;
批处理方式:将绘图命令写入一个文件中,使用load命令载入文件。
Gnuplot中的命令和函数名是区分大小写的,在gnuplot中二维图形采用plot命令绘制,三维图形采用splot命令绘制,还有一个replot命令,用来重复最近一次使用到的plot或splot命令。Plot绘图命令可以从文件中读取数据绘制数据曲线,非常方便实验结果的描绘。
也可以设置图形的显示属性,比如坐标轴、网格(grid)、Label(线条、文字注解)、图的大小和位置等参数。具体如下:
set xtics 1.0 ;#设置X轴的主刻度的宽度
set grid ;#画图添加网格
plot sin(x) with lines(points);
plot “filename”with lines;
4.3 性能参数分析模型
4.3.1 传输延时
网络的传输延时D定义为源节点发出的一个分组到目的节点接收到该分组之间的时间差,包括电(光)信号在物理介质中的传播延时和数据在网络中的延时处理。结合NS的Trace文件,实习中以分组发送和到达之间的时间间隔来计算,计算公式如下:
D(i) = RT(i) –ST(i)
其中,D(i)表示第i个分组的传播时延,RT(i)表示第i个分组的接收时间,ST(i)表示第i个分组的发送时间。在分析网络的传输延时,一般计算平均传输时延。
4.3.2 时延抖动
网络的状态随时在变化,网络的流量也是不稳定,当流量较大的时候,许多分组就在节点的队列中排队等候,因此各个分组在传输过程中的时延并不一致。时延抖动描述的是网络传输延时的变化情况。如果时延抖动大,说明网络不稳定,反之网络较稳定。
计算公式:J(i) = D(i) - D(i-1)
在实际网络中,常以分组的最小延时和最大延时与平均延时作比较。
4.3.3 丢包率
丢包率定义了传输期间网络丢失的分组的数量,通常是在特定时间段内丢失的分组占传输的数据总量的比例。丢包率是反映网络质量的一个重要参数。
在分析Trace文件时,以丢失分组的数量与发送分组的数量的比值来衡量丢包率的大小。
L=(NSP—NRP)/NSP
其中:NSP表示节点发送的分组数目,NRP表示节点接收的分组数目。
4.3.4 吞吐量
网络吞吐量是网络性能的一个重要参数,指在不丢包的情况下单位时间内节点可以接收的数据量,单位是字节每秒或比特每秒,
在分析Trace文件时,使用以下公式:
TH(i) = (TB(i)—TB(m))/(RT(i)—RT(m))
其中:TB(i)是指到第i个分组被目的节点接收时已经传输的数据总量,RT(i)是指第i个包的接收时间。i>m,表示计算从第m个分组到第i个分组的吞吐量。
4.4 丢包率计算
4.4.1 NS2中网络丢包因素简介
ns-2 仿真器能模拟无线网络中的报文丢弃事件。报文丢弃包括数据报文丢弃和控制报文丢弃,以下统称为丢包。无线网络中,丢包主要发生在网络协议栈的路由层和MAC 层,主要的丢包因素和其对应的协议层如表4.1 所示。
表4.1 NS2中网络丢包因素简介
其中,COL 是因为隐藏节点带来的报文冲突,即节点在接收报文时有其它报文到达;RET 是达到了报文重传次数的极限;DUP 是接收到重复的报文而导致的丢包;ARP 是因为达到了发送ARP请求的最大次数;NRTE 是找不到可用的路由;TTL 是达到了报文的最大生存周期;CBK是节点无法与下一跳邻居节点通信使得路由断链且局部修复失败时导致的丢包;IFQ 是在报文发送队列队满时引起的丢包。
上述因素之间也存在一定的关联,比如 a.CBK 丢包是由RET 丢包引起的。若发送给邻居节点的报文次数超过重传极限,始终不可达,则认为邻居节点已不在自己的覆盖范围内,向上层报告错误后,上层启动路由局部修复,若失败则丢弃发包队列里路由链路与该邻居节点相关的所有数据报文,导致CBK 丢包产生。b. 重复
性报文接收DUP 也建立在RET 的基础之上。在RTS/CTS/ DATA/ACK 握手过程中,若接收节点成功接收了数报DATA,但它回复的ACK 没被发送节点收到时,发送节点则会重传DATA,接收节点收到第二次传送的DATA 后直接丢弃,导致DUP 丢包产生。c. 由于MAC层总是用重传来保证对报文的成功发送,而用于握手的控制报文随节点密度的增大冲突增多,导致报文发送的时延增大,在应用层发包速率不变的情况下,由于报文发送队列队满引起的IFQ 丢包产生。
4.4.2 隐藏节点
1.隐藏节点丢包率的awk思想:我们采用一定的时间间隔,在这个时间间隔内统计发送节点的发送包数和接收节点的接收包数,再根据丢包率的定义来计算。由于场景模拟中是节点0、1分别作为发送节点,而节点1为共同的接收节点,所以分开分别统计。
核心代码如图4.1所示:
图4.1 节点0-1、2-1丢包率代码
2.采用Gnuplot画出的丢包率。
绘图命令如下所示:设置坐标轴、范围、文件名称等,对于不同的图形,只是修改plot指令后的文件名即可。
绘出的图形如图4.2,4.3所示:
图4.2 无RTS/CTS丢包率
从图上可以看出,1.5s-11.5s之间,节点0_1的丢包率维持在45%左右,11.5s-21.5s之间,进入了冲突段,两个节点的丢包率都很大,居高不下,在90%左右,此消彼长。在21.5s-31.5s之间,由于节点0不发送数据,2_1丢包率下降很大,与初始段节点0_1大致相同。
图4.3 有RTS/CTS丢包率
从图上可以看出,红线表示节点0_1的丢包率,绿线表示节点2_1的丢包率。在1.5s开始一直到11.5s之前,这一段0_1的丢包率保持在55%左右,到了节点2开始发送数据时,即11.5s开始后,明显节点0_1的丢包率骤升到90%以上,而节点2_1的也维持高的丢包率,在11.5s到21.5之间,0_1,2_1的丢包率由于RTS/CTS的影响,在某一时间段内,某一节点不能发数据,另一个节点就可以发送数据,冲突减少。相比于图4.2,中间丢包率浮动较大。但彼此刚好相反,即一个丢包率大的时候,另一个丢包率刚好小。一直到节点0发送数据停止,节点2_1的丢包率才下降和节点0_1的初始丢包率大致相同。
综合上述两种情况如图4.4所示:其中图中的左上角清楚地标明线条的所指代的情况。由图可以清晰的看出来整个模拟仿真过程中丢包率的变化情况,有无
RTS/CTS两种情况的曲线走势在1.5s-11.5s和21.5s-31.5s相同,区别在于当处在数据冲突的11.5s-21.5s之间的10s的时间段内,有RTS/CTS的变化波动大,相应的没有的话,变化波动小。且对应的两条曲线是相对的,即此消彼长,一条曲线高,而一条曲线低。符合常理。
图4.4 有无RTS/CTS情况下丢包率的影响曲线
4.4.3 暴露节点
暴露节点丢包率的计算思想和隐藏节点一样,只是核心代码中修改一下节点的发送,接收即可。
利用Gnuplot画出的走势图如图4.4,4.5,4.6所示:
图4.4 无RTS/CTS丢包率
从图中可以看出,1.5s-11.5s之间,节点0_1的丢包率保持在45%左右小范围波动,但是在11.5s开始,即节点2开始给节点3发数据,这是由于1节点处于节点0和节点2的范围内,产生数据冲突,节点0_1的丢包率骤升至100%,即由于冲突,节点1根本收不到节点0发送的数据包,但节点3没有受到影响,丢包率保持在45%左右,当到了21.5s时,节点0发送数据结束,此时2_3的丢包率依然不变。
图4.5 有RTS/CTS丢包率
从图中可以看出,1.5s到11.5s之间,0_1的丢包率保持在55%左右,相比于图4.4,这一时间丢包率较高,到了11.5s后,0_1的丢包率由于冲突急速上升至98%左右,
小范围波动,而不是100%,即虽然有冲突,但是由于存在握手机制,还是存在节点1能成功接收到0的数据包的情况。此时节点3不受任何影响,丢包率维持在57%左右小范围波动。到了21.5s之后,节点0不发数据,2_3的丢包率不发生变化。
图4.6 两种情况下丢包率的对比
为了便于直观的看出有RTS/CTS的优势,我们将两张图合成如图4.6,便于观察分析,上述分析的过程已经在图4.4,4.5中进行解释。
4.5 吞吐率计算
4.5.1 隐藏节点
隐藏节点的吞吐量分为0_1,2_1的吞吐量,核心代码如图4.7所示:
图4.7 计算隐藏节点的吞吐量的核心代码
运行Gnuplot命令绘制的走势图如图4.8,4,9,4.10所示:
图4.8 无RTS/CTS吞吐量
从图中可以看出在节点0和节点2共同发送数据时,两者的吞吐量曲线有明显的变化,具体表现为:在1.5s-11.5之间,节点0_1的吞吐量保持在600以上的小范围波动,当节点2开始发数据即11.5s至21.5s之间的10s内,由于产生冲突,节点1的吞吐量受到影响,0_1的吞吐量明显下降,从600降到380左右,而2_1节点的吞吐量从初始瞬间的400骤降至100-200之间后,缓慢变化,直到节点0停止发送数据包。21.5s以后,2_1的吞吐量上升,从100左右上升至400。
图4.9 有RTS/CTS的吞吐量
从图中可以看出,对比与图4.8来看,首先网络的吞吐量普遍下降,图4.8中最高可到600以上,但4.9中最高值也就500多一点,其次在冲突的时间段内,0_1和2_1的吞吐量曲线波动较大,没有图4.8的平滑。具体表现为:在1.5s到11.5s之间,节点0发送数据包,吞吐量保持在500上下,变化不大;11.5s至21.5s之间,节点0_1吞吐量下降,虽然在某一时间节点内吞吐量有变大的情况,但总的走势是下降,直至下降为350左右,节点2_1的吞吐量波动较大,这是由于加入RTS/CTS机制后,某一时间段内,节点0不发数据,而节点2可以发数据,此时显然0_1的吞吐量下降,而2_1的吞吐量明显上升,同理可得0_1小范围的上升与2_1的小范围内下降的情况;过了冲突区,即21.5s至31.5s时间内,只有节点2发送数据,吞吐量缓慢上升直至400左右。
为了方便比较有无RTS/CTS机制对于网络吞吐量的影响,我们对比两种不同情况。
图4.10 有无RTS/CTS对吞吐量的影响
图中可以清晰的看出两种情况下的曲线走势大致一样,只是由于加入握手机制,发送数据包的数量有所下降,减少了冲突出现的情况和比率,某一时刻的数据吞吐量有较大的差异,冲突段内的曲线波动程度很反映了RTS/CTS机制的影响。
4.5.2 暴露节点
暴露节点的吞吐量分为节点0_1和节点2_3两个部分,分别计算并比较。 计算暴露节点的吞吐量的代码与计算隐藏节点的相似,所以不做详解。 利用Gnuplot工具绘制出以下曲线,如图4.11,4.12,4.13所示:
图4.11 无RTS/CTS机制的吞吐量
从图中可以看出,对于暴露节点的情况,在1.5s—11.5s之间,0_1的吞吐量维持在610左右,且在小范围内波动,但是当节点2也开始发数据时,由于节点0和节点2都发数据导致在节点1处发生冲突,节点1接收不到节点0发的数据,相应的0_1的吞吐量为0,节点3由于没有受到影响,所以2_3的数据吞吐量变化较稳定,从瞬间开始的590变化到600左右小范围内波动一直维持到31.5s模拟结束。
图4.12 有RTS/CTS机制的吞吐量
与图4.11比较,有 RTS/CTS机制的情况下,节点0_1的吞吐量明显不同。具体表现在:1.5s到11.5s时,曲线变化与无RTS/CTS的情况一致,只是数值降到480左右;到了节点2开始发送数据包时,即11.5s后,节点0_1的吞吐量一直在下降直到趋于250左右,而节点2_3的吞吐量变化不大;过了21.5s后,2_3的吞吐量变化缓慢,维持在480左右小范围波动。
综合上述两种情况:如图4.13所示。加入RTS/CTS机制后对于无线网络传输有了明显的改进,没有握手机制时在数据冲突区内,0_1的吞吐量减为0,而有了这个机制之后吞吐量虽然也在下降,但是保持一个具体的数值,比如280。由于节点在发送数据时,需要发送RTS/CTS,所以相当于节点1有了判断接收消除冲突的能力,使得节点1可以接受到一定的数据包。
结语
网络性能分析是网络运行效率检测以及网络安全管理的关键,仿真模拟技术为通信网络规划和各项指标测试提供了一种直观可靠的科学方法。基于NS2的无线自组织网络协议仿真使得我熟悉了无线网络中的常见的问题及其解决的办法及其优化,通过对无线自组织网络中隐藏节点和暴露节点在有无RTS/CTS握手机制的情况下的模型仿真及其性能的分析,可以得出RTS/CTS机制的引用对于网络性能的改善作用很大。
计算机学院专业实习小组报告
专业名称 网络工程
实习题目 基于NS2的无线自组织网络
协议仿真
2014年5月18日
目 录
摘 要 .................................................................................................................................................. 1
关键词 .................................................................................................................................................. 2
第一章 网络问题的理解............................................................................................................... 2
1.1 隐藏节点和暴露节点 .............................................................................................................. 2
1.1.1 隐藏节点 ............................................................................................................................ 2
1.1.2 暴露节点 ............................................................................................................................ 3
1.1.3 暴露节点和隐藏节点产生的原因及影响 ........................................................................ 4
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中相关问题分析 .............................................................................................................. 7
1.3.1 NS2模拟的基本过程 ........................................................................................................ 7
1.3.2 无线传输模型 .................................................................................................................... 8
1.3.3 门限 .................................................................................................................................... 9
1.3.4 无线节点通信范围的设置 ................................................................................................ 9
第二章 网络环境的建立与配置 .................................................................................................... 10
2.1 NS2软件的安装与配置 ........................................................................................................... 10
2.1.1 软件安装 .......................................................................................................................... 10
2.1.2 相关配置 .......................................................................................................................... 11
2.1.3 出现的错误分析 .............................................................................................................. 11
2.2 隐藏节点仿真场景 .................................................................................................................. 13
2.2.1 网络拓扑结构 .................................................................................................................. 13
2.2.2 模拟仿真Tcl脚本 ........................................................................................................... 13
2.2.3 参数的设置 ...................................................................................................................... 16
2.3 暴露节点仿真场景 .................................................................................................................. 17
2.2.1 网络拓扑结构 .................................................................................................................. 17
2.3.2 模拟仿真Tcl脚本 ........................................................................................................... 18
2.3.3 参数设置 .......................................................................................................................... 20
第三章 网络模拟运行 .................................................................................................................... 22
3.1 隐藏节点的模拟 ...................................................................................................................... 22
3.1.1 Trace文件 ........................................................................................................................ 22
3.1.2 Nam文件 ......................................................................................................................... 24
3.2 暴露节点的模拟 ...................................................................................................................... 26
3.2.1 Trace文件 ........................................................................................................................ 26
3.2.2 Nam文件 ......................................................................................................................... 27
第四章 网络性能仿真与分析 ........................................................................................................ 28
4.1 Gawk语言简介 ..................................................................................................................... 28
4.1.1 gawk处理文档的过程 .................................................................................................... 28
4.2 gnuplot绘图 ........................................................................................................................... 29
4.3 性能参数分析模型 ................................................................................................................ 30
4.3.1 传输延时 .......................................................................................................................... 30
4.3.2 时延抖动 .......................................................................................................................... 30
4.3.3 丢包率 .............................................................................................................................. 30
4.3.4 吞吐量 .............................................................................................................................. 30
4.4 丢包率计算 ............................................................................................................................ 31
4.4.1 NS2中网络丢包因素简介 .............................................................................................. 31
4.4.2 隐藏节点 .......................................................................................................................... 32
4.4.3 暴露节点 .......................................................................................................................... 35
4.5 吞吐率计算 ............................................................................................................................ 37
4.5.1 隐藏节点 .......................................................................................................................... 37
4.5.2 暴露节点 .......................................................................................................................... 40
结语 .................................................................................................................................................... 42
摘 要
网络协议的开发和完善需要进行许多验证和与性能相关的测试,在很多情况下这些工作是不可能都在实际的硬件系统上完成的,往往受限于资源、经费、技术条件和场地等因素的影响,使得我们难以在实际的网络系统中完成验证和测试工作,这时需要在虚拟的环境中进行模拟仿真。本次实习是基于网络模拟软件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)模型,如果不指定参数,将会使用默认值,这些默认值在源码文件threshold.cc文件中定义。
针对题目要求,我们修改了接收门限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脚本代码如下:
与隐藏节点的脚本代码对比,暴露节点的脚本代码主要是结点个数、时间以及载波侦听、数据传输范围发生变化,其它代码不变。
2.3.3 参数设置
模拟仿真依然采用地面反射(TwoRayGround)模型, 针对题目要求,我们需要对接收门限RXThresh_和载波侦听门限CPThresh_参数的值进行一定的修改。
经过仿真,当节点之间的距离设为100,而数据包的传输范围也为100时,相当于在分界线上,仿真效果太差,即几乎收不到数据,所以对于数据包的传输范围稍微做了调整,变为105进行仿真模拟。
修改接收门限RXThresh_和载波侦听门限CPThresh_参数的值。
参数修改过程如图2.6:
图2.6 Threshold修改暴露节点场景参数
对于RTS/CTS机制的选取,代码如下:
当数据包大小小于3000时,系统取消握手机制,默认值为0,即设有握手机制。 对于上述环境,设置步骤为:
在节点0、1之间建立一条UDP联机;
在UDP联机之上分别建立CBR应用程序;
在节点2、3之间建立一条UDP联机;
在UDP联机之上分别建立CBR应用程序;
在仿真环境中,设定相应的启动与结束时间;
第三章 网络模拟运行
执行上述Tcl脚本进行网络仿真,就可以得到网络运行过程的全部数据。为了能够分析网络运行的效能,仿真结果的数据必须能够完整收集。NS2 提供了两种基本数据追踪能力:跟踪和监控。跟踪能够将每个数据包在任何时刻的状态记录到指定的trace 文件中,当链路或者队列中的每一个单个的数据包到达、离开或者丢弃时会记录下来。而监控则可有选择记录自己需要的数据,例如统计发送包、接收包、丢弃包的总数量。同时监控也可用来对所有包或指定单一数据流的监测。同时,NS2 还提供了动态显示仿真过程的nam观察器,输入指令,程序会自动调用nam动画演示模拟的过程。
3.1 隐藏节点的模拟
3.1.1 Trace文件
运行第二章中的隐藏节点的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(标识项):虚线表示的标识。
✧ Pkt id(分组UID):分组的id号。
✧ Pkt type(分组的类型):分组类型,有CBR(固定码率),VBR(可变)等。 ✧ Pkt size(大小):分组的大小。
✧ MAC Layer info(MAC层的信息):包含4项内容:第1项是发送节点在无线信道上发送该分组所期望的时间,其值用十六进制表示,单位为秒;第2项内容是接收节点的MAC层地址;第3项内容是发送节点的MAC地址;第4项内容表示封装的分组类型,例如0X800表示IP分组,0X806表示ARP分组。 ✧ -----:分隔符。
✧ IP info(IP层信息):包含4项内容:第1项是发送节点的源节点地址,格式为“节点号:端口号”;第2项是接收分组的目的节点的地址,格式为“节点号:端口号”;第3项是分组的TTL(IP协议中的值,判断网络数据传输时间是否太长而丢弃);第4项是源节点到目的节点的跳数。
对于隐藏节点有无RTS/CTS机制我们生成以下两个trace文件,分别如图3.2,,3.3所示:
图3.2 有RTS/CTS的trace文件
图3.3 无RTS/CTS的trace文件
从图中可以清楚的看到,有无握手机制的跟踪文件的区别,同时在1.5s时启动代理后,0节点的AGT层都发射了数据包。具体的数据分析见第四章。
3.1.2 Nam文件
运行第二章中的Tcl脚本,可以生成对应的nam动画演示文件,tcl中可以对节点、链路、队列和Agent等对象进行动画显示方面的属性控制,NAM动画显示的命令如下:
节点:
链路和队列:可以显示链路的方向、颜色等。
Agent: 在某一个节点上绑定代理。
针对题目要求,做出的NAM动画如图3.4,3.5所示:
图3.4 有RS/CTS的NAM文件
图3.5 无RTS/CTS的NAM文件
3.2 暴露节点的模拟
3.2.1 Trace文件
有关Trace文件格式等详细信息见3.1节隐藏节点的Trace文件分析,这里主要展示暴露节点tcl文件生成的数据文件,如图3.6,3.7所示:
图3.6 有RTS/CTS的暴露节点的Trace文件
图3.7 无RTS/CTS的暴露节点的Trace文件 Trace文件的各项名称及表示的意义详见上一节。
3.2.2 Nam文件
暴露节点tcl生成的NAM文件如图3.8,3.9所示:
图3.8 暴露节点有RTS/CTS机制的NAM
图3.9 暴露节点无RTS/CTS机制的NAM
第四章 网络性能仿真与分析
4.1 Gawk语言简介
4.1.1 gawk处理文档的过程
Gawk是一种对文档资料具有很强处理能力的程序语言,简短的几句代码就可以完成对数据的修改、对比、抽象等操作。
Gawk 语言将所要处理的文档分解为一条条的记录(一般是数据文件中的一行),每条记录默认以空格或TAB键分割为一个个字段。在对记录的处理过程中,
一般都要对记录中的字段进行操作。对记录中字段提取可以采用字段变量“$1,$2,$3„”等,gawk读入记录后已自动把字段值存入相应的变量中。具体例子如下:
Gawk处理文档的过程是针对档案的每一条记录搜寻指定的模式(pattern),当记录中有符合指定的模式时,gawk就会在此记录执行被指定的动作(Action),按照这种模式直到文档的结束。
执行Gawk程序指令如下:
即gawk –f program inputfilename > savefilename
在实习中利用awk主要处理吞吐量和丢包率。
4.2 gnuplot绘图
在LINUX终端运行命令gnuplot绘图环境,输入quit或exit或q退出。进入gnuplot绘图环境以后有两种工作方式:
交互式:直接在绘图环境中编写绘图命令;
批处理方式:将绘图命令写入一个文件中,使用load命令载入文件。
Gnuplot中的命令和函数名是区分大小写的,在gnuplot中二维图形采用plot命令绘制,三维图形采用splot命令绘制,还有一个replot命令,用来重复最近一次使用到的plot或splot命令。Plot绘图命令可以从文件中读取数据绘制数据曲线,非常方便实验结果的描绘。
也可以设置图形的显示属性,比如坐标轴、网格(grid)、Label(线条、文字注解)、图的大小和位置等参数。具体如下:
set xtics 1.0 ;#设置X轴的主刻度的宽度
set grid ;#画图添加网格
plot sin(x) with lines(points);
plot “filename”with lines;
4.3 性能参数分析模型
4.3.1 传输延时
网络的传输延时D定义为源节点发出的一个分组到目的节点接收到该分组之间的时间差,包括电(光)信号在物理介质中的传播延时和数据在网络中的延时处理。结合NS的Trace文件,实习中以分组发送和到达之间的时间间隔来计算,计算公式如下:
D(i) = RT(i) –ST(i)
其中,D(i)表示第i个分组的传播时延,RT(i)表示第i个分组的接收时间,ST(i)表示第i个分组的发送时间。在分析网络的传输延时,一般计算平均传输时延。
4.3.2 时延抖动
网络的状态随时在变化,网络的流量也是不稳定,当流量较大的时候,许多分组就在节点的队列中排队等候,因此各个分组在传输过程中的时延并不一致。时延抖动描述的是网络传输延时的变化情况。如果时延抖动大,说明网络不稳定,反之网络较稳定。
计算公式:J(i) = D(i) - D(i-1)
在实际网络中,常以分组的最小延时和最大延时与平均延时作比较。
4.3.3 丢包率
丢包率定义了传输期间网络丢失的分组的数量,通常是在特定时间段内丢失的分组占传输的数据总量的比例。丢包率是反映网络质量的一个重要参数。
在分析Trace文件时,以丢失分组的数量与发送分组的数量的比值来衡量丢包率的大小。
L=(NSP—NRP)/NSP
其中:NSP表示节点发送的分组数目,NRP表示节点接收的分组数目。
4.3.4 吞吐量
网络吞吐量是网络性能的一个重要参数,指在不丢包的情况下单位时间内节点可以接收的数据量,单位是字节每秒或比特每秒,
在分析Trace文件时,使用以下公式:
TH(i) = (TB(i)—TB(m))/(RT(i)—RT(m))
其中:TB(i)是指到第i个分组被目的节点接收时已经传输的数据总量,RT(i)是指第i个包的接收时间。i>m,表示计算从第m个分组到第i个分组的吞吐量。
4.4 丢包率计算
4.4.1 NS2中网络丢包因素简介
ns-2 仿真器能模拟无线网络中的报文丢弃事件。报文丢弃包括数据报文丢弃和控制报文丢弃,以下统称为丢包。无线网络中,丢包主要发生在网络协议栈的路由层和MAC 层,主要的丢包因素和其对应的协议层如表4.1 所示。
表4.1 NS2中网络丢包因素简介
其中,COL 是因为隐藏节点带来的报文冲突,即节点在接收报文时有其它报文到达;RET 是达到了报文重传次数的极限;DUP 是接收到重复的报文而导致的丢包;ARP 是因为达到了发送ARP请求的最大次数;NRTE 是找不到可用的路由;TTL 是达到了报文的最大生存周期;CBK是节点无法与下一跳邻居节点通信使得路由断链且局部修复失败时导致的丢包;IFQ 是在报文发送队列队满时引起的丢包。
上述因素之间也存在一定的关联,比如 a.CBK 丢包是由RET 丢包引起的。若发送给邻居节点的报文次数超过重传极限,始终不可达,则认为邻居节点已不在自己的覆盖范围内,向上层报告错误后,上层启动路由局部修复,若失败则丢弃发包队列里路由链路与该邻居节点相关的所有数据报文,导致CBK 丢包产生。b. 重复
性报文接收DUP 也建立在RET 的基础之上。在RTS/CTS/ DATA/ACK 握手过程中,若接收节点成功接收了数报DATA,但它回复的ACK 没被发送节点收到时,发送节点则会重传DATA,接收节点收到第二次传送的DATA 后直接丢弃,导致DUP 丢包产生。c. 由于MAC层总是用重传来保证对报文的成功发送,而用于握手的控制报文随节点密度的增大冲突增多,导致报文发送的时延增大,在应用层发包速率不变的情况下,由于报文发送队列队满引起的IFQ 丢包产生。
4.4.2 隐藏节点
1.隐藏节点丢包率的awk思想:我们采用一定的时间间隔,在这个时间间隔内统计发送节点的发送包数和接收节点的接收包数,再根据丢包率的定义来计算。由于场景模拟中是节点0、1分别作为发送节点,而节点1为共同的接收节点,所以分开分别统计。
核心代码如图4.1所示:
图4.1 节点0-1、2-1丢包率代码
2.采用Gnuplot画出的丢包率。
绘图命令如下所示:设置坐标轴、范围、文件名称等,对于不同的图形,只是修改plot指令后的文件名即可。
绘出的图形如图4.2,4.3所示:
图4.2 无RTS/CTS丢包率
从图上可以看出,1.5s-11.5s之间,节点0_1的丢包率维持在45%左右,11.5s-21.5s之间,进入了冲突段,两个节点的丢包率都很大,居高不下,在90%左右,此消彼长。在21.5s-31.5s之间,由于节点0不发送数据,2_1丢包率下降很大,与初始段节点0_1大致相同。
图4.3 有RTS/CTS丢包率
从图上可以看出,红线表示节点0_1的丢包率,绿线表示节点2_1的丢包率。在1.5s开始一直到11.5s之前,这一段0_1的丢包率保持在55%左右,到了节点2开始发送数据时,即11.5s开始后,明显节点0_1的丢包率骤升到90%以上,而节点2_1的也维持高的丢包率,在11.5s到21.5之间,0_1,2_1的丢包率由于RTS/CTS的影响,在某一时间段内,某一节点不能发数据,另一个节点就可以发送数据,冲突减少。相比于图4.2,中间丢包率浮动较大。但彼此刚好相反,即一个丢包率大的时候,另一个丢包率刚好小。一直到节点0发送数据停止,节点2_1的丢包率才下降和节点0_1的初始丢包率大致相同。
综合上述两种情况如图4.4所示:其中图中的左上角清楚地标明线条的所指代的情况。由图可以清晰的看出来整个模拟仿真过程中丢包率的变化情况,有无
RTS/CTS两种情况的曲线走势在1.5s-11.5s和21.5s-31.5s相同,区别在于当处在数据冲突的11.5s-21.5s之间的10s的时间段内,有RTS/CTS的变化波动大,相应的没有的话,变化波动小。且对应的两条曲线是相对的,即此消彼长,一条曲线高,而一条曲线低。符合常理。
图4.4 有无RTS/CTS情况下丢包率的影响曲线
4.4.3 暴露节点
暴露节点丢包率的计算思想和隐藏节点一样,只是核心代码中修改一下节点的发送,接收即可。
利用Gnuplot画出的走势图如图4.4,4.5,4.6所示:
图4.4 无RTS/CTS丢包率
从图中可以看出,1.5s-11.5s之间,节点0_1的丢包率保持在45%左右小范围波动,但是在11.5s开始,即节点2开始给节点3发数据,这是由于1节点处于节点0和节点2的范围内,产生数据冲突,节点0_1的丢包率骤升至100%,即由于冲突,节点1根本收不到节点0发送的数据包,但节点3没有受到影响,丢包率保持在45%左右,当到了21.5s时,节点0发送数据结束,此时2_3的丢包率依然不变。
图4.5 有RTS/CTS丢包率
从图中可以看出,1.5s到11.5s之间,0_1的丢包率保持在55%左右,相比于图4.4,这一时间丢包率较高,到了11.5s后,0_1的丢包率由于冲突急速上升至98%左右,
小范围波动,而不是100%,即虽然有冲突,但是由于存在握手机制,还是存在节点1能成功接收到0的数据包的情况。此时节点3不受任何影响,丢包率维持在57%左右小范围波动。到了21.5s之后,节点0不发数据,2_3的丢包率不发生变化。
图4.6 两种情况下丢包率的对比
为了便于直观的看出有RTS/CTS的优势,我们将两张图合成如图4.6,便于观察分析,上述分析的过程已经在图4.4,4.5中进行解释。
4.5 吞吐率计算
4.5.1 隐藏节点
隐藏节点的吞吐量分为0_1,2_1的吞吐量,核心代码如图4.7所示:
图4.7 计算隐藏节点的吞吐量的核心代码
运行Gnuplot命令绘制的走势图如图4.8,4,9,4.10所示:
图4.8 无RTS/CTS吞吐量
从图中可以看出在节点0和节点2共同发送数据时,两者的吞吐量曲线有明显的变化,具体表现为:在1.5s-11.5之间,节点0_1的吞吐量保持在600以上的小范围波动,当节点2开始发数据即11.5s至21.5s之间的10s内,由于产生冲突,节点1的吞吐量受到影响,0_1的吞吐量明显下降,从600降到380左右,而2_1节点的吞吐量从初始瞬间的400骤降至100-200之间后,缓慢变化,直到节点0停止发送数据包。21.5s以后,2_1的吞吐量上升,从100左右上升至400。
图4.9 有RTS/CTS的吞吐量
从图中可以看出,对比与图4.8来看,首先网络的吞吐量普遍下降,图4.8中最高可到600以上,但4.9中最高值也就500多一点,其次在冲突的时间段内,0_1和2_1的吞吐量曲线波动较大,没有图4.8的平滑。具体表现为:在1.5s到11.5s之间,节点0发送数据包,吞吐量保持在500上下,变化不大;11.5s至21.5s之间,节点0_1吞吐量下降,虽然在某一时间节点内吞吐量有变大的情况,但总的走势是下降,直至下降为350左右,节点2_1的吞吐量波动较大,这是由于加入RTS/CTS机制后,某一时间段内,节点0不发数据,而节点2可以发数据,此时显然0_1的吞吐量下降,而2_1的吞吐量明显上升,同理可得0_1小范围的上升与2_1的小范围内下降的情况;过了冲突区,即21.5s至31.5s时间内,只有节点2发送数据,吞吐量缓慢上升直至400左右。
为了方便比较有无RTS/CTS机制对于网络吞吐量的影响,我们对比两种不同情况。
图4.10 有无RTS/CTS对吞吐量的影响
图中可以清晰的看出两种情况下的曲线走势大致一样,只是由于加入握手机制,发送数据包的数量有所下降,减少了冲突出现的情况和比率,某一时刻的数据吞吐量有较大的差异,冲突段内的曲线波动程度很反映了RTS/CTS机制的影响。
4.5.2 暴露节点
暴露节点的吞吐量分为节点0_1和节点2_3两个部分,分别计算并比较。 计算暴露节点的吞吐量的代码与计算隐藏节点的相似,所以不做详解。 利用Gnuplot工具绘制出以下曲线,如图4.11,4.12,4.13所示:
图4.11 无RTS/CTS机制的吞吐量
从图中可以看出,对于暴露节点的情况,在1.5s—11.5s之间,0_1的吞吐量维持在610左右,且在小范围内波动,但是当节点2也开始发数据时,由于节点0和节点2都发数据导致在节点1处发生冲突,节点1接收不到节点0发的数据,相应的0_1的吞吐量为0,节点3由于没有受到影响,所以2_3的数据吞吐量变化较稳定,从瞬间开始的590变化到600左右小范围内波动一直维持到31.5s模拟结束。
图4.12 有RTS/CTS机制的吞吐量
与图4.11比较,有 RTS/CTS机制的情况下,节点0_1的吞吐量明显不同。具体表现在:1.5s到11.5s时,曲线变化与无RTS/CTS的情况一致,只是数值降到480左右;到了节点2开始发送数据包时,即11.5s后,节点0_1的吞吐量一直在下降直到趋于250左右,而节点2_3的吞吐量变化不大;过了21.5s后,2_3的吞吐量变化缓慢,维持在480左右小范围波动。
综合上述两种情况:如图4.13所示。加入RTS/CTS机制后对于无线网络传输有了明显的改进,没有握手机制时在数据冲突区内,0_1的吞吐量减为0,而有了这个机制之后吞吐量虽然也在下降,但是保持一个具体的数值,比如280。由于节点在发送数据时,需要发送RTS/CTS,所以相当于节点1有了判断接收消除冲突的能力,使得节点1可以接受到一定的数据包。
结语
网络性能分析是网络运行效率检测以及网络安全管理的关键,仿真模拟技术为通信网络规划和各项指标测试提供了一种直观可靠的科学方法。基于NS2的无线自组织网络协议仿真使得我熟悉了无线网络中的常见的问题及其解决的办法及其优化,通过对无线自组织网络中隐藏节点和暴露节点在有无RTS/CTS握手机制的情况下的模型仿真及其性能的分析,可以得出RTS/CTS机制的引用对于网络性能的改善作用很大。