使用NS2网络仿真软件对信息传输进行仿真课件

合集下载

NS-2基础 课件

NS-2基础  课件


链路和队列: $ns duplex-link-op <attribute> <value>

Attribute的值可以是orient,color、queuePos和label Orient指定了链路的方向(right,left,up,down,rightup,right-down,left-up,left-down) Color指定链路的颜色 Label定义链路显示的名称 queuePos定义队列显示的方向

使用方法:

将setdest名咯添加到Linux系统环境变量,或者是指定路径全 称或在其目录下使用(使用./) #./setdest –n 6 –p 0 –M 30 –t 100 –x 1000 –y 1000 >scenfile.tcl Scenfile.tcl中保存了生成的节点运动场景描述 注:cbrgen和setdest产生的文件均可采用source命令加入到 另一个OTcl脚本中,如果产生的文件用到了诸如node_数组 变量和god_变量,需要在OTcl脚本中预先建立。

NS2 架构

Tcl: Tool Command Language OTcl: Object-Oriented Tcl TclCL: C++ and OTcl linkage
Event Scheduler: event-driven
Network Components:

Agent: TCP、UDP… Traffic Generator: FTP、CBR…

UI: User Interface
4

TCP/IP、NS2 和OSI 7-Layer 的对比

网络模拟器NS-2及其应用分析

网络模拟器NS-2及其应用分析

定义了一个新分组头,要改动 NS 目录下 packet.h 文件的 enum packet_t{ }和 class p_in
fo{ }相应部分;改动 tcl/lib/ns-default.tcl 文件,定义 Tcl 对象的缺省值;改动 tcl/l ib/ns-packet.tcl 文件,在该文件中为新的分组增加一个入口;改动 Makefile 文件,将*. o 文件加入到该文件 NS 对象文件列表中。 (5) 此生成了新的 NS。 在 NS 目录下运行 Make Depend 和 Make,重新编译 NS,至
ph、gnuplot 得出有用的数据曲线,或者用 Nam 观看网络模拟运行过程。
2.2
C + + 建立新协议或修改已有网络对象进行扩展要考虑的问题
如果模拟只要求对现有的协议进行简单修改即可完成,无需建立新的协议代理,
则找到相应的待修改协议代码进行预期的修改,然后直接编译生成新的 NS。然而,当建立 新协议时一般需要考虑以下问题: (1) 并建立恰当的类定义。 (2) 连接函数。 (3) (4) 至少定义接收函数 recv( )和命令函数 command( )。 新协议代码完成后,要对相关文件进行改动。例如,如果 定义 C++代码和 Otcl 代码之间的接口连接,即定义 OTcl 首先定义头文件, 包括数据结构和决定新代理的继承结构,
#建立一条 TCP 连接 set tcp [new Agent/TCP] $tcp set class_ 2 $ns attach-agent $n0 $tcp set sink [new Agent/TCPSink] $ns attach-agent $n3 $sink $ns connect $tcp $sink #在 NAM 中,TCP 的连接以蓝色表示 $tcp set fid_ 1 #在 TCP 连接之上建立 FTP 应用 set ftp [new Application/FTP] $ftp attach-agent $tcp $ftp set type_ FTP #建立一条 UDP 连接 set udp [new Agent/UDP] $ns attach-agent $n1 $udp set null [new Agent/Null] $ns attach-agent $n3 $null $ns connect $udp $null #在 NAM 中,UDP 的连接以红色表示 $udp set fid_ 2 #在 UDP 连接之上建立 CBR 应用 set cbr [new Application/Traffic/CBR] $cbr attach-agent $udp $cbr set type_ CBR $cbr set packet_size_ 1000 $cbr set rate_ 1mb $cbr set random_ false # 设定 FTP 和 CBR 的开始和结束时间 $ns at 0.1 "$cbr start" $ns at 1.0 "$ftp start" $ns at 4.0 "$ftp stop" $ns at 4.5 "$cbr stop" #在 5.0 秒调用 finish 过程结束模拟 $ns at 5.0 "finish" #执行模拟 $ns run

NS2无线路由协议仿真(NAM动画)

NS2无线路由协议仿真(NAM动画)

5 基于NS2的仿真测试
5. 1nam动画演示
开始界面截图,如图5-1所示。

图5-1 开始界面初始化界面,如图5-2所示。

图5-2 初始化界面Nam动画过程,只有第一条链路如图5-3所示。

图5-3Nam动画一条链路Nam动画过程,有两条链路如图5-4所示。

图5-4Nam动画两条链路
Nam动画过程,有三条链路如图5-5所示。

图5-5Nam动画三条链路
动画演示的过程分析如下:第一条链路在1.4sec时开始建立连接,流量较小,不会产生丢包;第二条链路在10.0sec时启动,链路一和链路二的流量总和仍没有超过带宽总量,丢包仍未产生,链路吞吐量很高效;在20sec时,第三条链路启动以后,流量总和已经超过带宽总量和队列存储范围,会产生丢包;在30sec 时第四条链路启动时,流量进一步增大,丢包数目进一步增多。

整个过程演示符合网络规则和当初设计预测,演示是正确的。

ns2模拟仿真

ns2模拟仿真

实验内容S1到r之间,以及s2到r之间的带宽为2Mbps,传递时延10ms,r到d之间带宽1.7Mbps,传递时延20m1 在NS2中建立UDP联机,学习如何将模拟过程输出到文件,通过工具进行分析2 测量以UDP为传输协议的应用程序的吞吐量(Throughput)、封包延迟(Packet Delay)、抖动率(Packet Jitter)和封包丢失率(Packet Loss Rate);实验目的1 熟悉ns2的使用2 会将模拟过程输出到文件3 会测量以UDP为传输协议的应用程序的吞吐量(Throughput)、封包延迟(Packet Delay)、抖动率(Packet Jitter)和封包丢失率(Packet Loss Rate);实验步骤:1 通过.tcl脚本,是模拟过程输出文件如下tcl文件:set ns [new Simulator]$ns color 0 blue$ns color 1 redset n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]set f [open out.tr w]$ns trace-all $fset nf [open out.nam w]$ns namtrace-all $nf$ns duplex-link $n0 $n2 2Mb 10ms DropTail$ns duplex-link $n1 $n2 2Mb 10ms DropTail$ns duplex-link $n2 $n3 1.7Mb 20ms DropTail$ns queue-limit $n2 $n3 20$ns duplex-link-op $n0 $n2 orient right-up $ns duplex-link-op $n1 $n2 orient right-down $ns duplex-link-op $n2 $n3 orient right$ns duplex-link-op $n2 $n3 queuePos 0.5set udp [new Agent/UDP]$ns attach-agent $n0 $udpset null [new Agent/Null]$ns attach-agent $n3 $null$ns connect $udp $null$udp set class_ 0set cbr [new Application/Traffic/CBR]$cbr attach-agent $udpset tcp [new Agent/TCP]$tcp set class_ 1set sink [new Agent/TCPSink]$ns attach-agent $n1 $tcp$ns attach-agent $n3 $sink$ns connect $tcp $sinkset ftp [new Application/FTP]$ftp attach-agent $tcp$ftp set type_ FTP$ns at 0.1 "$cbr start"$ns at 1.0 "$ftp start"$ns at 4.0 "$ftp stop"$ns at 4.5 "$cbr stop"$ns at 4.0 "$ns detach-agent $n1 $tcp ;$ns detach-agent $n3 $sink"$ns at 5.0 "finish"proc finish {} {global ns f nf$ns flush-traceclose $fclose $nfputs "this is test..."exec nam out.nam &exit 0}$ns run运行结果:结果分析1 测量丢包率:针对out.tr的分析Out.trOut.trevent 有{‘r’.+.- ,d}r 表示收到+ 排队进入- 排队离开d 丢了还有time,from ,to node,pkt type ,flags,fidsize ,fid ,src addr ,dst addr,seqnum ,pkt id 分别对应着out.tr的每一列数字Awk文件由于测量吞吐量等Awk里定义有event = $1;time = $2;fromNode = $3;toNode = $4;pktType = $5;pktSize = $6;flags = $7;fid = $8;srcAddr = $9;dstAddr = $10;seqNum = $11;pktId = $12;测量丢包率代码为:BEGIN {#初始化,设置变量以记录packet 被drop 的数目fsDrops=0;numFs}{#将out.tr文件的相应字段赋值给变量action=$1;time=$2;from=$3;to=$4;type=$5;pktsize=$6;flow_id=$8;src=$9;dst=$10;seq_no=$11;packet_id=$12;#统计从n1 送出多少packetsif (from==1 && to==2 && action=="+")numFs++;#统计flow_id 为0,且被drop的数据包数目if (flow_id==0 && action =="d")fsDrops++;}END {printf("number of packets sent: %d lost: %d\n",numFs,fsDrops);}2吞吐量#throughputBEGIN{flag=0;i=0;}{event = $1;time = $2;fromNode = $3;toNode = $4;pktType = $5;pktSize = $6;flags = $7;fid = $8;srcAddr = $9;dstAddr = $10;seqNum = $11;pktId = $12;if(event=="r" && fromNode==2 && toNode==3 && fid==0){pktSum[i+1]=pktSum[i]+pktSize;if(flag==0){ beginTime=time;flag=1;}endTime[i]=time;i++;}}END{printf("%.6f\t%.5f\n",endTime[0],0);for(j=1;j<i;j++){throughput=(float)pktSum[j]/(endTime[j] -beginTime)*8/1000; printf("%.6f\t%.5f\n",endTime[j],throughput);}printf("%.6f\t%.5f\n",endTime[i-1],0);}3延迟BEGIN {#初始化,设置变量以记录目前已处理数据包的最大ID号highest_packet_id=0;}{#将out.tr文件的相应字段赋值给变量action=$1;time=$2;from=$3;to=$4;type=$5;pktsize=$6;flow_id=$8;src=$9;dst=$10;seq_no=$11;packet_id=$12;#记录目前已处理数据包的最大ID号if (packet_id>highest_packet_id)highest_packet_id=packet_id;#记录数据包的发送的时间if (start_time[packet_id]==0)start_time[packet_id]=time;#记录CBR (其flow_id=0) 的接收时间if (flow_id==0 && action!="d") {if (action=="r") {end_time[packet_id]=time;}}else {#把不是CBR数据包或者被DROP掉的CBR数据包的接收时间设置为-1;end_time[packet_id]=-1;}}END {# 当out.tr中数据行全部读取完后,开始计算有效数据包的端到端的时间延迟for ( packet_id=0; packet_id <= highest_packet_id; packet_id++) {start=start_time[packet_id];end=end_time[packet_id];packet_duration=end-start;#显然,只把接收时间晚于发送时间的记录列出来哦!if (start<end) printf("%f %f\n", start, packet_duration);}}4抖动率BEGIN {#初始化,设置变量以记录目前已处理数据包的最大ID号highest_packet_id=0;}{#将out.tr文件的相应字段赋值给变量action=$1;time=$2;from=$3;to=$4;type=$5;pktsize=$6;flow_id=$8;src=$9;dst=$10;seq_no=$11;packet_id=$12;#记录目前已处理数据包的最大ID号if (packet_id>highest_packet_id)highest_packet_id=packet_id;#记录数据包的发送的时间if (start_time[packet_id]==0)start_time[packet_id]=time;#记录CBR (其flow_id=0) 的接收时间if (flow_id==0 && action!="d") {if (action=="r") {end_time[packet_id]=time;}}else {#把不是CBR数据包或者被DROP掉的CBR数据包的接收时间设置为-1;end_time[packet_id]=-1;}}END {#初始化Jitter计算所需的变量last_seqno=0;last_delay=0;seqno_diff=0;# 当out.tr中数据行全部读取完后,开始计算有效数据包的端到端的时间延迟for ( packet_id=0; packet_id <= highest_packet_id; packet_id++) { start=start_time[packet_id];end=end_time[packet_id];packet_duration=end-start;#显然,只把接收时间晚于发送时间的记录列出来哦!if (start<end) {#得到了delay 值(packet_duration) 后计算jitterseqno_diff=pkt_seqno[packet_id]-last_seqno;delay_diff=packet_duration-last_delay;if(seqno_diff==0) {jitter=0;} else {jitter=delay_diff/seqno_diff;}printf("%f %f\n", start, jitter);#更新变量,方便循环中的下一次计算last_seqno=pkt_seqno[packet_id];last_delay=packet_duration;}}}。

基于NS2的网络仿真

基于NS2的网络仿真

基于NS2的网络仿真1 引言在计算机网络技术迅速发展的今天,网络科研人员需要开发新的网络协议,为网络发展做开拓性的研究;网络设计人员需要研究如何利用现有的资源,使设计的网络达到最高效能。

无论哪一方面,都需要对网络方案进行分析和评价。

通过网络仿真,能对各组件的行为进行较精确的模拟,获得足够数据对系统的性能进行较准确的预测。

NS2(Network Simulator, version 2)是由美国加州Lawrence Berkeley 国家实验室等单位开发的开源免费网络仿真软件。

NS2仿真器的功能非常强大,可扩展性强,执行效率高,目前已广泛应用于局域网、广域网、无线移动网和卫星网络的仿真。

2 NS2简介NS2是一种面向对象的网络仿真器。

从整体上可以将NS2分成三个部分,其中两个部分是提供给用户的接口,另外一部分是核心仿真器。

用户接口1主要由Tcl/Tk、OTcl扩展解释器构成,用户通过使用TCL/TK、OTcl脚本语言,编写网络仿真脚本文件。

脚本语言直观、简洁,用户无需过多了解核心仿真器的内部机制就可以使用NS2。

核心仿真器NS2使用C++代码编写,利用了C++面向对象的机制。

Tclcl提供了NS2与Tcl/Tk、OTcl解释器的连接。

用户接口2是指NAM、Xgraph之类的图形显示工具,仿真器执行用户编写的仿真脚本文件,将运行结果加以记录,随后将记录文件交由NAM程序可视化地显示。

3 NS2的使用与安装3.1 NS2的使用NS2网络仿真可以分为两个层次:一个是基于OTcl脚本编程的层次。

因为是利用NS2已有的网络元素实现网络仿真,所以这时不需要对NS2本身进行任何修改,只要编写Otcl脚本即可;另一个层次是基于C++和OTcl编程的层次。

如果NS2中没有所需的网络元素,这时就需要对NS2进行功能扩展,添加新的网络元素,然后再编写OTcl脚本。

使用NS2进行网络仿真的过程归纳为:(1)分析要解决的问题,设计仿真拓扑结构和仿真模型;(2)编写OTcl脚本;或扩展NS2类,再重新编译NS2,然后编写OTcl脚本;(3)用NS2运行OTcl脚本,通过NAM等工具查看网络仿真过程,对仿真结果进行分析。

基于NS2的网络仿真

基于NS2的网络仿真

课设(三):基于NS2的网络仿真一、课程设计目的1、理解NS2的基本概念;2、熟悉安装NS2的实验环境和基本操作;3、仿真分析UDP通信协议;4、学会生成NS2的Tcl脚本及仿真结果分析;二、课程设计原理1、UDP协议(1)协议概述UDP是User Datagram Protocol的简称,中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,它主要用于不要求分组顺序到达的传输中,分组传输顺序的检查与排序由应用层完成,提供面向事务的简单不可靠信息传送服务。

(2)协议功能描述UDP在IP数据报的头部仅仅加入了复用和数据校验(字段),UDP首部字段由4个部分组成,其中两个是可选的。

各16位的源端口和目的端口用来标记发送和接受的应用进程,因为UDP不需要应答,所以源端口是可选的,如果源端口不用,那么置为零。

在目的端口后面是长度固定的以字节为单位的长度字段,用来指定UDP数据报包括数据部分的长度。

由于缺乏可靠性,UDP应用一般必须允许一定量的丢包、出错和复制。

由于UDP协议缺乏拥塞避免和控制机制,需要基于网络的机制来减小因失控和高速UDP流量负荷而导致的拥塞崩溃效应。

UDP协议只在IP的数据报服务之上增加了很少的功能,这就是端口的功能(有了端口,运输层就能进行复用和分用)和差错检测的功能。

另外,UDP协议应用程序可以是客户机,也可以是服务器程序,不必向TCP协议应用程序那样必须分别建立客户机程序和服务器程序。

在远程控制软件中,如果在局域网内部传输屏幕信息,则使用UDP协议比较容易实现。

但UDP协议不提供可靠性,它的可靠性是交给其他网络设备来解决。

同时用UDP协议来传输的数据一般较小,它需要IP协议来为它对数据进行分段。

2、NS2概述NS2(Network Simulator version2,网络仿真软件第二版)是一种面向对象的网络仿真器,本质上是一个离散事件模拟器。

[课件]NS2网络模拟简介以及MTE、LEACH、LEACH-C协议仿真PPT

[课件]NS2网络模拟简介以及MTE、LEACH、LEACH-C协议仿真PPT

NS2的总体系结构


NS2的目录结构
ns-2.34:存放C++代码的地方; ns-2.34\tcl:存放OTcl代码的地方; Ns-2.34\tcl\lib:存放与组件(agent, node, link, packet, address, routing ) 实现有关的OTcl代码;在此目录下,有以下几个文件:ns-lib.tcl: Simulator 类定义与成员函数实现,如 run,simplexlink,flush-trace等;ns-default.tcl :各种网络组件配置的缺省值。 ns-2.34\tcl\ex, ns-2.34\tcl\test: 存放一些例子脚本文件和验证结果。

NS2的部分类结构


分类器——classifier是Ns-2基本网络组件的一个大类。 它的基本派生类有地址分类器(AddrClassifier)和多播 分类器(McastClassifier)等。基于分类器的基本网络 组件具有1个或多个可能的数据输出路径,属于交换 (Switch)设备(对应来说,连接器Connector只有一个 数据的输出路径)。 拓扑结点(Node)是由一个结点入口对象和若干个分类 器(Classifier)组成的一个符合对象。
节点存活率

节点能量消耗

数据包发送量
仿真后生成 x.data,x.alive,x.energy等文件(x对应的为协 议名称),分别对应的为各个协议的数据包传送个数, 节点生存情况和节点能量消耗,用awk语言编写程序, 提取数据进行分析 在Cygwin中用gnuplot 作出分析结果曲线


节点分布拓扑图(基站位置(0,0))

LEACH模型

9-网络仿真N&S2

9-网络仿真N&S2
1.96s v V M
95% 置信区间:
3-23
置信区间的解释
如果我们按照上述方
法计算置信区间,有 95%的信心包含真正 (未知的)的空间均 值
3-24
ns-2, 网络仿真器
离散事件仿真器 建模网络协议

有线,无限,卫星 TCP, UDP, multicast,
我们的目标: flavor of ns: 简单实例,修 改,执行和记录分析
3-18
置信区间
运行仿真:获得我们感兴趣性能值的估计值V1 重复仿真M次(每次使用新的随机数值集合),获得V2,
...Vm -所有的值都不一样 哪一个V1, … VM是“对”的呢?
凭直觉,M采样的平均值可能会好些,比任何一个M采样

V
V
j 1
M
j
有关V,我们 的置信度?
3-19
暂时特征的例子?
l
m1 m2
3-16
初始条件的效果
第20个客户的延迟柱状图, 假
设队列初始为空 (1000次运 行)
第20个客户的延迟柱状图, 假
设队列初始不为空 (1000次 运行)
3-17
稳定状态行为
如果仿真运行足够长时间,输出结果可能会收敛到一个稳定状态值
avg delay of packets [n, n+10]
化 而且每次运行和下一次运行 都不一样 需要得到延迟的统计特征 第n个客户的延迟期望 当n趋近于无穷时,延迟 表现 平均n个客户的延迟
3-15
过渡行为
依赖于初始条件的仿真输出被叫做“暂时特征
”(i.e., 当初始条件变化时,输出值也会变化
仿真的早期部分 仿真的后阶段部分较少依赖于初始条件
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

西安邮电学院通信与信息工程学院科研训练报告专业班级: 通工0904班 学生姓名: xxxx 学号(班内序号): XXXXXXXX (XX 号)2012 年 11 月 6 日——————————————————————————装订线————————————————————————————————报告份数:使用NS2网络仿真软件对信息传输进行仿真摘要:在人们决定构建一个新的网络系统或者建立一个新的协议时,人们总希望在投入很多成本实验之前能有一种方便修改、结果直观的系统对该网络或协议模型进行测试,开源的网络仿真软件NS因此诞生,为网络拓扑设计与协议开发提供了一个有力的仿真测试平台。

为了对NS2系统进行学习,我建立了两个典型的网络拓扑结构,分别对有线/无线混合网络及路由选择过程进行通信仿真与分析,通过这两个仿真实验达到初步掌握与了解NS2的目的。

关键字:NS2 网络仿真混合网络结构路由选择ABSTRACTNetwork Engineers And Researchers always need a convenient and easy-amend simulation system to test their design of new network topo and protocol before a lot of cost dive into experiment and test,The Network Simulation(NS2) is a powerful ,open source simulation plat which can appease them.Processed from study NS2 system ,I build two emblematical network topo (wired/wireless mixed network and route choose process),via build and simulate this two systems to learn how to use NS2 and NS2’s analyse tools.Keywords:NS2; Network Simulation;Mixed network; Route hoose processO、引言在人们决定构建一个新的网络系统或者建立一个新的协议时,人们总希望在投入很多成本实验之前能有一种方便修改,结果直观的系统对该网络或协议模型进行测试,开源的网络仿真软件NS因此诞生,为网络拓扑设计与协议开发提供了一个有力的仿真测试平台。

NS2的全称是Network Simulation version 2,是一种采用了c++与tcl混合编程的网络仿真语言,具有修改方便、结果直观且易于处理、语言执行效率高等优点,以广泛的应用于网络仿真与协议设计中。

本次科研训练的内容――无线/有线混合网络及路由选择过程仿真正是采用了NS2平台进行仿真,并使用NS2的附加组件NAM,及Linux下的集成组件:Gawk及Gnuplot进行仿真与结果分析一、电子文献检索和科技论文写作如果想对某个项目精确、客观的进行研究,参考以前的文献是不可缺少的过程,而现代化的网络为我们检索资料提供了极大的方便,因此,在研究过程中,必须学会利用网络查找到自己所需的献资料,并将其做为研究的重要参考。

目前我校购买了三个文献数据库的查阅权限以供师生使用,分别是CNKI文献数据库(主要提供论文文献)、超星数字图书馆数据库(主要提供专著)、IEL全文数据(可以查到电气和电子工程领域的大量国际文献),这三个数据库几乎囊括了我们所需要查阅的所有资料。

CNKI数据库包含了国内大量论文,资料详实,提供的查询方法多样,在登录数据库网站并输入用户名和密码后(学校的IP段已绑定,无需输入),即可以使用CNKI数据库查看下载大量的国内文献了。

CNKI提供的检索方法很全面,可以满足不同的检索范围,也可以根据查找目的逐层找到自己所需要的资料,可使用CAJViewer、超星数字图书馆、Adobe Reader等工具打开使用其下载的文献超星数字图书馆是将大量的书籍、专著等通过扫描成PDG格式,并提供专用的客户端进行文献的检索与浏览,西安邮电学院电子检索室的IP已被授权,可以无需账户登录检索。

超星数字图书馆提供的专著超过30万册,且在不断的更新增加,使用其检索文献即可以按照类别进行逐层查找、也可使用各种关键字筛选出所需要的专著。

IEL是由美国电气电子工程学会(IEEE)和国际工程和技术学会联合提供,其包含了大量当今科技领域最重要的文献资料,采用IEEE xplore浏览界面,提供文献浏览、检索等多种资料检索方式,使用IEEE进行资料检索可以找到很多处于科技发展前沿的文献,能为我们提供极大的帮助这三种数据库均数据详实、检索方便易学、且我们学校的电子阅览室的IP均与其进行了绑定,因此是文献查找不可或缺的资料此外,使用google搜索引擎也是搜索所需资料的极佳方法,且提供的资料基本全部为免费资料,此外,利用google,还可以查到别人对这个问题的看法、也可以在专门的论坛上提出问题并与他人进行讨论,极大的方便了我们的研究学习二、实验原理网络仿真是进行网络技术研究的一种基本手段。

在新技术的研究过程中,由于各种原因,实际网络系统的实现往往是代价较高或是不现实的。

在这种情况下,仿真就成了最佳可供选择的测试、评估和验证手段之一。

本文对当前若干主流网络仿真软件进行了简要介绍和评价,并对两款主流的网络仿真软件Opnet和NS2进行了用例对比分析,最后对各种网络仿真软件进行了总结。

网络仿真也被称为网络模拟,因为对各种网络仿真过程来说,其中也有“模拟”的含义,即,网络仿真既可以取代真实的应用环境得出可靠的运行结果和数据,也可以模仿一个系统过程中的某些行为和特征。

顾名思义,网络模拟,就是用计算机程序对通信网络进行模型化,通过程序的运行模仿通信网络的运行过程。

NS是一种针对网络技术的源代码公开的、免费的软件模拟平台,研究人员使用它可以很容易的进行网络技术的开发,而且发展到今天,它所包含的模块已经非常丰富,几乎涉及到了网络技术的所有方面。

所以,NS成了目前学术界广泛使用的一种网络模拟软件。

此外,NS也可作为一种辅助教学的工具,已被广泛应用在了网络技术的教学方面。

因此,目前在学术界和教育界,有大量的人正在使用或试图使用NS。

三、综合实验3.1 仿真前准备由于目前的NS2软件只能在Linux环境下运行,而我们使用的都是windows系统,所以要在windows系统中搭建一个Linux环境,先装cygwin 软件,在cygwin命令窗口中输入命令安装并使用NS2。

3.2实验过程及结果3.2.1有限set ns [new Simulator]$ns color 1 green$ns color 2 Red$ns color 3 blueset nf [open outmuyan.nam w]$ns namtrace-all $nfproc finish {} {global ns nf$ns flush-traceclose $nfexec nam outmuyan.nam &exit 0}set n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]set n4 [$ns node]$ns duplex-link $n0 $n3 1Mb 10ms DropTail $ns duplex-link $n1 $n3 1Mb 10ms DropTail $ns duplex-link $n2 $n3 1Mb 10ms DropTail $ns duplex-link $n3 $n4 2Mb 10ms DropTail $ns queue-limit $n3 $n4 10$ns duplex-link-op $n0 $n3 orient right-down $ns duplex-link-op $n1 $n3 orient right-middle $ns duplex-link-op $n2 $n3 orient right-up $ns duplex-link-op $n3 $n4 orient right$ns duplex-link-op $n3 $n4 queuePos 0.5set tcp [new Agent/TCP]$ns attach-agent $n0 $tcpset sink [ new Agent/TCPSink]$ns attach-agent $n4 $sink$ns connect $tcp $sink$tcp set fid_ 1set udp0 [new Agent/UDP]$ns attach-agent $n1 $udp0set null [new Agent/Null]$ns attach-agent $n4 $null$ns connect $udp0 $null$udp0 set fid_ 2set cbr0 [new Application/Traffic/CBR] $cbr0 set packet_size_ 1000$cbr0 set rate_ 1mb$cbr0 set random_ false$cbr0 attach-agent $udp0$cbr0 set type_ CBRset udp1 [new Agent/UDP]$ns attach-agent $n2 $udp1set null [new Agent/Null]$ns attach-agent $n4 $null$ns connect $udp1 $null$udp1 set fid_ 3set cbr1 [new Application/Traffic/CBR] $cbr1 set packet_size_ 800$cbr1 set rate_ 1mb$cbr1 set random_ false$cbr1 attach-agent $udp1$cbr1 set type_ CBRset ftp [new Application/FTP]$ftp attach-agent $tcp$ftp set type_ FTP$ns at 0.5 "$cbr0 start"$ns at 0.2 "$ftp start"$ns at 3.0 "$ftp stop"$ns at 3.5 "$cbr0 stop"$ns at 1.0 "$cbr1 start"$ns at 4.0 "$cbr1 stop"$ns at 5.0 "finish"$ns run3.2.2无限# This script is created by NSG2 beta1# </nsg>#===================================# Simulation parameters setup#===================================set val(chan) Channel/WirelessChannel ;# channel typeset val(prop) Propagation/TwoRayGround ;# radio-propagation model set val(netif) Phy/WirelessPhy ;# network interface typeset val(mac) Mac/802_11 ;# MAC typeset val(ifq) Queue/DropTail/PriQueue ;# interface queue typeset val(ll) LL ;# link layer typeset val(ant) Antenna/OmniAntenna ;# antenna modelset val(ifqlen) 50 ;# max packet in ifqset val(nn) 2 ;# number of mobilenodes set val(rp) DSDV ;# routing protocolset val(x) 716 ;# X dimension of topography set val(y) 362 ;# Y dimension of topography set val(stop) 5.0 ;# time of simulation end#===================================# Initialization#===================================#Create a ns simulatorset ns [new Simulator]#Setup topography objectset topo [new Topography]$topo load_flatgrid $val(x) $val(y)create-god $val(nn)#Open the NS trace fileset tracefile [open out.tr w]$ns trace-all $tracefile#Open the NAM trace fileset namfile [open out.nam w]$ns namtrace-all $namfile$ns namtrace-all-wireless $namfile $val(x) $val(y)set chan [new $val(chan)];#Create wireless channel#===================================# Mobile node parameter setup#===================================$ns node-config -adhocRouting $val(rp) \-llType $val(ll) \-macType $val(mac) \-ifqType $val(ifq) \-ifqLen $val(ifqlen) \-antType $val(ant) \-propType $val(prop) \-phyType $val(netif) \-channel $chan \-topoInstance $topo \-agentTrace ON \-routerTrace ON \-macTrace ON \-movementTrace ON#=================================== # Nodes Definition#=================================== #Create 2 nodesset n0 [$ns node]$n0 set X_ 402$n0 set Y_ 262$n0 set Z_ 0.0$ns initial_node_pos $n0 20set n1 [$ns node]$n1 set X_ 616$n1 set Y_ 251$n1 set Z_ 0.0$ns initial_node_pos $n1 20#=================================== # Agents Definition#=================================== #Setup a UDP connectionset udp0 [new Agent/UDP]$ns attach-agent $n0 $udp0set null1 [new Agent/Null]$ns attach-agent $n1 $null1$ns connect $udp0 $null1$udp0 set packetSize_ 1500#=================================== # Applications Definition#=================================== #Setup a CBR Application over UDP connection set cbr1 [new Application/Traffic/CBR]$cbr1 attach-agent $udp0$cbr1 set packetSize_ 1000$cbr1 set rate_ 1.0Mb$cbr1 set random_ null$ns at 0.5 "$cbr1 start"$ns at 4.0 "$cbr1 stop"#=================================== # Termination#=================================== #Define a 'finish' procedureproc finish {} {global ns tracefile namfile$ns flush-traceclose $tracefileclose $namfileexec nam out.nam &exit 0}for {set i 0} {$i < $val(nn) } { incr i } {$ns at $val(stop) "\$n$i reset"}$ns at $val(stop) "$ns nam-end-wireless $val(stop)" $ns at $val(stop) "finish"$ns at $val(stop) "puts \"done\" ; $ns halt"$ns run丢包BEGIN {packet=0}{if ($1=="d" && $3=="3" && $4=="4" && $5=="udp"){packet=packet+1event[packet]=$1}}END{print("sum=", packet)}四、学习总结本科研训练完成的是一个基于NS2的有线/无线网络结构仿真与路由选择协议工作过程的验证。

相关文档
最新文档