基于NS2通信系统仿真本科课程设计.docx
- 文档编号:3780521
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:33
- 大小:545.22KB
基于NS2通信系统仿真本科课程设计.docx
《基于NS2通信系统仿真本科课程设计.docx》由会员分享,可在线阅读,更多相关《基于NS2通信系统仿真本科课程设计.docx(33页珍藏版)》请在冰豆网上搜索。
基于NS2通信系统仿真本科课程设计
课程设计报告
课程名称:
通信系统课程设计
设计题目:
基于NS2通信系统仿真
成绩:
姓名:
梁**
学号:
***
专业:
通信工程
班级:
2008级
学院:
机电与信息工程学院
指导教师:
***
时间:
2011年7月3日
课程设计内容及要求
(一)摘要
该课程设计主要用网络模拟工具NS2针对总线型网络在不同速率、不同传输层协议、不同队列管理机制下进行模拟。
这三种队列管理算法是:
丢尾算法DropTail、随机早期检测算法RED和公平队列算法FQ,网络中同时有CBR业务流和TCP业务流。
在网络的其它参数设置都相同的情况下,对关键链路分别采用不同的队列类型进行模拟,并输出跟踪文件,根据此文件的相关数据可以计算得到网络运行的性能指标值。
通过Tcl编程开发,和对网络参数的设置,得到结果文件。
计算出的数据结果表明:
三种队列规则相比,RED丢包现象最为严重,DropTail次之。
但RED的链路利用率比使用其他两种队列类型都高。
比较数据包的平均时间延迟和投递率会发现,使用FQ队列管理虽然对TCP服务和CBR业务的吞吐量都很高,但是数据包端到端延时过长,降低了网络服务质量。
关键词:
NS2;Tcl;Adhoc;队列管理;拓扑结构;网络性能
(二)设计要求
1.基本要求
a)在NS2中构建简单网络拓扑(总线网),并对数据发送方式和传输层协议进行调整,源端以规定方式或随机方式发送数据流,调整的最大队列长度,监视关键队列;
b)对时延、吞吐量、丢包率、R1与R2的队列长度等性能指标进行测试与分析;
c)在路由器R1和R2使用不同的队列管理算法(如弃尾算法DropTail、随机检测丢弃算法RED等)时,测试网络的性能参数,分析队列管理算法的不同性能。
2.拓展
2.1星型网、环网拓扑构建及性能分析
2.2加权平均的性能分析
2.3无线网络性能分析
2.3无线网络场景仿真
3.4前景展望
队列调度(如采用WFQ等算法)、拥塞控制(如采用WRED、Reno、NewReno
等算法)等进行仿真,新建网络分析协议进行分析。
NS2网络仿真亦可以在现代社会的交通运输规划、网络攻击的模拟防范等发挥作用。
系统原理介绍
(三)NS2简介
NS2是一种面向对象的网络仿真器,本质上是一个离散事件模拟器,既可以在现有元素基础上进行网络仿真,也可以定义新的协议,扩充新的构件。
NS2之所以强大,在于它兼收并蓄各种扩展和新的协议,这也是它可在同样开源、易扩展的UNIX平台下较好兼容的原因。
NS2开发用到C++、Tcl/OTcl、Shell脚本等程序语言,可以对现有的星型网、总线型网、环型网、网状网各种拓扑结构,以及有线局域网、无线局域网、Ad-hoc自组网、组播路由协议等各种网络实体进行模拟。
1.NS2的开发流程
1.1NS2仿真的两个层次
a)基于OTcl编程的层次
利用NS已有的网络元素实现仿真,无需修改NS本身,只需编写OTcl脚本。
b)基于C++和OTcl编程的层次
如果NS中没有所需的网络元素,则需要对NS进行扩展,添加所需网络元素,即添加新的C++和OTcl类,编写新的OTcl脚本。
1.2网络仿真基本流程
NS2仿真的基本步骤如图1:
图1NS2仿真流程图
(四)开发环境
这里主要针对Windows环境下的NS2开发进行模拟,NS2文件包为ns-allinone-2.28.tar.gz,系统WindowsXP。
1.Windows+Cygwin+NS2.28
NS2一个特点就是安装过程繁琐,在线安装的方法速度比较慢,不容易找到完整的开发包,容易引缺少文件而宣告失败。
对此,可以用ns-allinone-2.28.tar.gz包完整安装的方法进行。
安装教程都能找到,不再累述。
需要注意的几点是:
在SelectPackages一步,最好把所有的包都选上,把skip标志点开
设置路径时将Cygwin安装文件下的.bashrc拷贝到c:
/Cygwin/home/[主机账户名]文件夹下,或者在控制面板主机属性设置里将环境变量的PATH行去掉。
2.Linux
NS2必须运行在Linux/Unix平台下,刚才提到的Cygwin虽说是模拟平台,一些组件还是与Linux有区别的,所以不如在Linux下兼容性好。
系统方案论证及设计
我对这次课程实际的定位是学习性研究设计。
首先了解Tcl编程基本原理,编写总线网的网络拓扑[1],实现节点间CBR数据流和FTP数据流的传输。
定义record进程,动态记录接收端带宽(吞吐量),并在finish进程中执行记录文件绘制图形。
记录trace文件跟踪,以便以后的分析。
添加记录进程,在拓扑及流实现的基础上,增加然后对Tcl进行扩充,实现拓扑链路数可调、分组发送速率可调以及丢弃策略可设置。
(五)方案论证
建立总线型网络拓扑,所有这些可以通过一段循环程序实现多链路的总线网。
用Gawk脚本进行性能分析,在编写的过程中发现可以用Shell脚本更方便的实现仿真结果输出。
无线网络性能仿真要对gawk脚本进行修改,由于trace文件格式的区别,修改起来还是比较容易的。
为方便实现分析及得到加权平均的结果,编写Shell脚本对不同速率(UDP)或不同发送窗口下的网络性能进行分析。
无线网络场景仿真还是比较简单的,可以在运行过程中用setdest改变节点移动速率,用cbrgen进行通信场景设计,更简单的方法是调用cbrgen.tcl文件和setdest.exe文件生成随机场景。
对于协议模拟,通过继承Agent进行实现,然后进行修改Ping.c文件中的成员。
1.网络拓扑的构建
首先定义节点,对节点之间的连接关系进行配置,然后设置监视队列及限制最大带宽。
在发送节点创建业务流,在确定时机开启业务流。
在拓扑建立前,设置trace跟踪文件对网络通信进行记录,方便以后测试。
2.编写Gawk文件测试网络性能
Awk语言是一种对文件进行提取、分析的脚本语言,而Gawk是GNU公司在此基础上开发的,它针对trace文件每一行(Line)搜索特定的模式(Patterns),当发现该行符合指定的模式时,gawk就会在该行执行指定的动作(actions)。
直到所有行都处理完成。
3.编写脚本文件
Shell脚本有点类似Unix的命令行,但是,经测试Cygwin下的for循环语句在Unix下无法识别,如果要移植代码需要改一段循环。
4.无线网络模拟
同样是基于Tcl编程的与有线网络的配置不同之处就是多了对一些信道参数的设定以及对无线节点参数的设定。
配置的参数增加,一方面使模拟场景更加具体,更加有针对性,另一方面也增加了模拟的复杂度。
5.无线网络场景仿真
对AODV下,50节点的随机运动进行场景仿真,简要分析网络性能。
6.协议仿真
对于协议仿真,在Tcl基础上进行面向对象的封装,即OTcl程序。
(六)系统设计
1.网络拓扑构建
网络拓扑结构的建立要针对节点建立链路,最基本的是带一条关键链路
1.1拓扑定义
a)建立新的实例
Setns[newsimulator]
b)创建跟踪文件
Procfinish{}{
c)定义结束程序
d)这里结束trace跟踪文件,可以设置对trace文件的执行
exit0
}
procrecord{}
{
e)跟踪程序,这里可以对接收端数据流量进行统计
exit0
}
setn0[$nsnode]…
f)这里建立新的节点
g)这里定义网络拓扑及节点位置关系
h)这里可以监视队列,限制关键队列带宽
i)设置代理并对代理进行绑定
$nsat5.0“finish”
j)适当时机,呼叫结束进程,停止模拟
$nsrun
k)开始模拟
1.2需要注意的问题
在网络拓扑定义的过程中,有以下几点需要注意:
c)建立拓扑要注意节点间的顺序,最好为节点起上有顺序的名字,如node(0)、node
(1)。
无线网络节点一般为如下格式:
node_(0)、node_
(1)。
d)对于多节点的网络模拟最好用for循环来定义节点、节点拓扑及绑定业务流。
e)Tcl/OTcl编程尽量用一个好的编辑器,如PsPad就是一个优秀的编辑器,有自动保存、恢复上次打开的页面、多色显示等功能,非常适合Tcl。
f)在节点链路的循环方式定义中,节点链路位置关系分orientright、orientright-up和orientright-down三种;但是当链路个数小于3时就不能分三种定义,而是两种orientright-up、orientright-down;链路数为一时只有orientright一种关系。
2.调用Gawk文件测试网络性能
网络性能分析一般包括吞吐量、丢包率、平均时延、延时抖动等几个方面[2]。
其执行格式如下:
Gawk–fprogramfile.awkinput-file1input-file2…
主要是对Gawk脚本的编写,如果对每一个流都进行分析,那样在链路数太多的情况下将会十分繁琐。
所以,该设计采用了一种更加实用的方法,即只对关键链路的输入输出流定义模式,方法是在程序中根据输入输出节点增加搜索条件。
对于有FTP业务流的性能分析,要在Patterns中加上对pkt_type的判断,
业务必须是TCP类型才能增加数据记录,因为Ack也包括在内,不应算作数据。
对于无线性能仿真,可以通过对业务处理节点列的判断,集成到Gawk文件中去,这样可以对无线和有线混合的情况进行仿真。
在性能模拟中需要注意的有以下几点:
TCP的gawk文件编写应注意排除ack对丢包率的干扰,因为数据吞吐量只是针对数据包而言的。
但是trace文件不管这些,忠实的记录下每一笔数据流入流出网段,以及节点代理的发送和接收事件。
对于TCP业务流来说,确认报文ack,不应计算在内。
具体做法是在采样业务数据时增加Pkt_type==”TCP”判断。
针对有线网络性能模拟要明了网络拓扑以及节点序号,以便gawk进行处理时设置采样的依据。
因为trace文件格式不同,无线网络性能分析和有线网络分析应区别对待。
这里采用的方法是针对无线网络trace文件的第三列(无线网络的业务处理)与有线网络trace的第三列(数据来源)数据的不同进行判断,因为节点这一列格式为_0_可以用node_=substr(node,2,1)的方式进行提取,然后判断业务类型trace_type是否为AGT代理。
3.网络性能测试脚本
编写Shell脚本的目的是为了人机交互,和方便运行,以及用来得到一个加权统计的性能分析。
命令行下直接输文件名就能执行。
其工作主要有:
g)循环(次数根据$step变量定)将不同速率下的网络性能分析结果记录下来。
h)生成plot文件,分别用单独绘图和组合绘图的方式绘制网络分析结果图形,并输出到.gif文件。
i)重新运行Tcl程序,得到nam文件并执行。
j)输出程序说明文档”Attention.txt”,并执行gawk命令将loss_rate的详细信息输出到文档。
清理所有跟踪文件及其他临时文件(*.nam、*.tr、*.ns、*.plot、gawk分析结果文件),以便节省空间。
4.无线网络仿真分析
无线信道需要配置如下几处:
传输模型
网络接口类型(无线、有线)
MAC层协议
接口队列类型
逻辑链路类型
采用的天线模型
网络接口队列大小
无线节点个数
路由协议
5.无线网络场景仿真
随机节点生成的文件有生成trace文件有aodv.tr、aodv.nam,plot文件是1.plot[3-4]。
Cbrgen.tcl是通信场景生成文件,setdest.exe是移动场景生成文件,其中
cbrgen.tcl一般在这个目录下:
C:
\Cygwin\home\Administrator\ns-allinone-2.28\ns-2.28\indep-utils\cmu-scen-gen\cbrgen.tcl。
setdest.exe一般在这个目录下:
C:
\Cygwin\home\Administrator\ns-allinone-2.28\ns-2.28\indep-utils\cmu-scen-gen\setdest\setdest.exe。
为方便运行,可以放在Tcl程序文件夹下。
场景运行方法,打开xx窗口,cd到此目录,然后输入run回车既运行。
6.Myping协议仿真
对于协议仿真,我只涉及到初步的OTcl编程,定义了一个新的代理类型Ping,
继承了Agent代理的属性。
需要仿造Agent的文件写Ping.c和Ping.h。
在TCL文件中,只要把代理类型改成Ping就行了。
系统仿真及结果分析
下面是仿真的具体过程
(七)系统仿真与调试
NS2版本ns-2.28,平台WindowsXP+Cygwin,程序编辑器PsPad
(八)仿真实验与结果分析
1.网络拓扑仿真实验
一个简单的网络拓扑包括4个节点、三条链路、两条业务流(CBR或FTP)和trace跟踪文件。
在此基础上可以考虑增加不同业务流,即CBR与FTP业务流混合的情形。
在此基础上可扩展为6个节点、两条链路,到8个节点、3条链路。
不同业务流。
但所有的工作仅仅在于机械的重复定义节点及网络拓扑,节点数增大时将会非常麻烦,或者在分析策略改变或者参数改变引起的性能变化时需要重新编程。
为此我考虑到通过命令行传参的方式改变丢弃策略、发送速率(UDP)、发送窗口值(TCP)、链路数目。
2.网络拓扑结果分析
图2一个基本的总线网拓扑
可以看出这个网络还没有丢包的情况,关键链路流量在最大带宽限制之内。
图3参数命令行显示
这是命令行的显示,可以通过改变参数设定不同的拓扑,提示的那一句应该为channel’scount,oddnumber(输入奇数),因为拓扑的构建当时考虑了中间那条是orientright的链接。
图411条链路的网络
这是生成的nam文件,可以看到生成链路是11条,并生成了业务流,拥塞丢弃的分组用大色块表示,在缓冲区中排队的队列用小色块表示,垂直进入队列。
对于不同的监视和队列带宽限制,可以看到大色块出现的频率有所变化,这是因为大色块和小色块的总量守恒,增大关键链路带宽丢弃的数据包就相对少一些。
图5链路的吞吐量-以11号链路为例
这是输出的记录文件结果记录的是在仿真时间内接收端带宽的动态变化,即吞吐量。
以同样方式模拟混合链路吞吐量
图6混合链路吞吐量
这是由record记录下来的接收端带宽,FTP业务流从0.0s开始就有,但发现TCP的吞吐量竟然趋近于0,以为是程序编错了。
经检查发现,在上图的TCP链路中仿真定义的带宽单位是bit,而混合链路中统一规定为Mbps!
两者相差8*1000倍,所以混合链路中的TCP带宽当然很小,但也从另一个层面发现问题:
基于UDP的业务流优先级要高于基于TCP的业务流,或者是UDP的流量远高于TCP。
3.网络性能分析实验
网络性能分析针对每种业务进行模拟,以Shell脚本方式执行Gawk语句,
Shell脚本简明而强大,所以我用它设计一个程序得到了加权平均的性能分析结果,并将性能分析结果输出到gif文件,将详细说明及详细丢包信息输出到Attention.txt文件中,因为丢包率是一个数值,我在打印丢包率到图片时以时间为横坐标,并把打印时间设在仿真时间的1/2处,其实定义在哪里无所谓,都是一个点。
临时文件jitter、throughput、delay、loss是gawk的分析结果,随着每次循环进行加权统计动态刷新,用完后删除。
4.网络性能分析结果
图7三条UDP链路性能分析
关键链路采用公平队列算法,其它之路采用DropTail算法。
丢包率约是0.194,即19.4%,还是挺严重的,网络平均时延在3s开始迅速增大约65ms,在4s后由于业务流相继停止时延逐渐降到0。
通过对吞吐量观察发现,业务在0.0s开始,在1.0s增加,因为又增加一条CBR业务流,但是吞吐量远没有增加到2倍,因为关键链路限制了最大带宽导致拥塞丢弃。
图8三条链路TCP的性能分析
图9TCP性能分析加权结果(RED策略)
性能分析结果:
星型网(5节点)
cbrsend:
0recv:
0
cbr_evrage_loss_rate:
0.00000000%
tcpsend:
21794recv:
21378
tcp_evrage_loss_rate:
1.90878223%
环形网(7节点)
cbrsend:
594recv:
591
cbr_evrage_loss_rate:
0.505%
tcpsend:
0recv:
0
tcp_evrage_loss_rate:
0.000%
性能比总线网要高。
通过与加权(注意,是加权,不是加权平均,但反应同样的问题)结果的对比,发现TCP在平均时延、丢包率、抖动等方面的性能都是优于UDP的,但是吞吐量远小于同样条件下的UDP链路。
并且通过一次统计结果大于加权统计结果,这说明在不同发送窗口下,的网络性能是不同的而默认的窗口128的网络性能不是最优的。
本课程设计也对星型网和环形网进行了性能分析。
得到的丢包率信息为
星型网
cbrsend:
0recv:
0
cbr_evrage_loss_rate:
0.000%
tcpsend:
1496recv:
1429
tcp_evrage_loss_rate:
4.479%
本课程设计也进行了对FQ队列和DropTail队列的分析[5],三种队列规则相比,RED丢包现象最为严重,DropTail次之。
但RED的链路利用率比使用其他两种队列类型都高。
比较数据包的平均时间延迟和投递率会发现,使用FQ队列管理虽然对TCP服务和CBR业务的吞吐量都很高,但是数据包端到端延时过长,降低了网络服务质量。
5.无线网络仿真及结果
无线性能分析如jitter和吞吐量
图10无线网络搭建
图117个无线节点的网络
方法,建立无线信道模型,配置好节点。
定义起始位置,在运行过程中用setdest进行移位运动。
调用格式为:
$nsattime"$nodesetdestXYspeed"
例如:
$nsat3.0"$node_(0)setdest250.0250.010.0"
表示仿真开始3.0s节点0移动到坐标(250.0,250.0),速度是10.0m/s.
图12无线网络的吞吐量
这是对7各节点在AODV动态路由协议下的仿真结果。
图13无线网络的抖动分析
AODV下,50节点的随机运动进行场景仿真。
调用格式如下:
nscbrgen.tcl–typecbr-nn50-seed1–mc10–rate2.0
#意为建立
50个移动节点/
10对通信连接/
每秒两个分组/
CBR通信场景/
setdest.exe是移动场景生成文件,调用格式为:
setdest–n50–p0–s20–t300–x1000–y300
#意为建立
50移动节点/
每个点停0s/
最大移动速度20m/s/
仿真时间300s/
移动区域1000*300/
移动场景/
图14无线网络场景分析
6.Myping
这是OTcl编程的结果,在Tcl语言的基础上封装了新的Ping类代理,实现最简单的,发信息——回送应答功能。
图15Myping协议仿真
总结与体会
这次课程设计进行到现在已基本结束,在这些天通过自己的学习和实践、实验,对NS2的开发有初步的认识。
(九)设计总结
本次课程设计对总线网的拓扑性能进行了深入分析。
NS2是一个优秀的网络模拟工具但是入门较难,概括起来,我认为主要原因有以下几点:
1、软件开发环境配置比较繁琐
由于NS2是开源、易扩展的,所以网络上流传各种各样的版本,一些版本的协议文件不一定是最新的,NS2在Linux下安装和在Windows+Cygwin下安装各有利弊,安装步骤错误造成安装失败。
2、需要编程基础,熟练Linux基本命令格式。
a)需要C、C++编程基础,C语言我们都学过,但是C++在类与对象方面进行了扩充,因为没有做过这方面的训练,所以对C++的编程思想理解还停留在表象。
b)需要短时间内掌握Tcl语言、Gawk语言、Shell命令行。
c)进行深入研究,还需要涉及头文件定义和修改。
d)程序语言在不同运行平台下,有不同的参数设置和命令格式
例如:
一个循环执行程序可在Cygwin模拟平台下这样写
foriin$(seq1$step3000)
do
nsudp.tcl$i
gawk-fdelay.awkrate=$ioutput.tr>>delay
gawk-floss.awkrate=$ioutput.tr>>loss
gawk-fjitter.awkrate=$ioutput.tr>>jitter
gawk-fthroughtput.awkrate=$ioutput.tr>>throughtput
rm-foutput.tr
echo"refresh..."
done
但是,在Linux平台下就不能执行,需要另外一种格式。
3、模拟可以说是“基于编程的可视化”,不同的分析需要用不同的思路编程解决,不同的性能分析需要在新的情境下重新布局。
4、协议分析复杂,研究方向多,不知从何下手。
所有这些都是对一个新手的挑战
(一十)个人体会
1、这些天虽说辛苦,但总体来说所获也颇多。
通过这次仿真训练,我对NS2仿真软件有了更好的掌握。
分析解决问题的能力有所提升。
都说NS2仿真比较难,但我没有后悔当初的选择,因为随着研究的深入,我发现对NS2网络模拟有了更进一步的认识。
主要有以下方面:
a)Tcl编程需要遵循特定的顺序,变量在子函数中继承有两种方法,一种是在子程序中声明为global全局变量,另一种是传参给进程并在进程中绑定变量名,例如:
procrecord{tcp_output_}{
upvar$tcp_tcp
#将tcp_和tcp的值绑定
upvar$output_output
#将output_和output的值绑定
globalnsn_con
}
b)仿真的重要意义不仅仅在于简单的网络分析,还可以把它运用到交通规划及流量监控等方面
c)在网络性能模拟中主要是对trace文件的不同事件进行判断,然后进行相应的变量运算,这里应注意的是加上pkt_type类型判断,避免ack业务流影响吞吐量。
d)养成良好的编程习惯,for循环一次打两个花括号、格式要对齐,方便查错、对于重复性的工作就要想一定有更好更简洁的方法去做,比如可以编写脚本程序代替手工操作、注释要完善,方便理解及参阅、Tcl编程一个隐性的规定,要在程序头加入对编译器位置的注释、Tcl程序对格式的要求十分严
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 NS2 通信 系统 仿真 本科 课程设计