您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 计算机网络ns2实验报告
课程:计算机网络项目:实验4ns2实验一、实验目的安装并运行网络仿真器NS2,了解其功能模块及配套工具的使用,掌握利用NS2进行网络仿真的方法,为进一步的网络系统性能分析设计创造良好的条件。二、实验原理NS2(NetworkSimulatorversion2,网络仿真软件第二版)是一种面向对象的网络仿真器,本质上是一个离散事件模拟器。最早来源于1989年哥伦比亚大学开发的RealNetworkSimulator项目,是一款开源免费的网络模拟软件。由加州大学伯克利分校(UCBerkeley)开发而成。它本身有一个虚拟时钟,所有的仿真都由离散事件驱动的。目前NS2可用于仿真各种不同的通信网络。已经实现的仿真模块有:网络传输协议,如TCP和UDP;业务源流量产生器,如FTP、Telnet、WebCBR和VBR;路由队列管理机制,如Droptai、RED和CBQ;路由算法,如Dijkstra,以及无线网络的WLAN,Adhoc路由,移动IP和卫星通信网络等。NS2也为进行局域网的仿真而实现了多播以及一些MAC子层协议。NS2使用C++和OTcl作为开发语言。NS2可以说是OTcl的脚本解释器,它包含仿真事件调度器、网络组件对象库以及网络构建模型库等。事件调度器用于计算仿真时间,并且激活事件队列中的当前事件,执行一些相关的事件,网络组件通过传递分组来相互通信,但这并不耗费仿真时间。所有需要花费仿真时间来处理分组的网络组件都必须要使用事件调度器,它先为这个分组发出一个事件,然后等待这个事件被调度回来之后,才能做下一步的处理工作。事件调度器的另一个用处就是计时。由于效率的原因,NS2将数据通道和控制通道的实现相分离,为了减少分组和事件的处理时间,事件调度器和数据通道上的基本网络组件对象都使用C++写出并编译的,这些对象通过映射对OTcl解释器可见。三、实验内容(1)安装ns-allinone-2.35(2)NS2仿真示例-nam方式四、实验结果与分析:建立一个OTcl脚本文件setns[newSimulator]/建立对象$nscolor1Blue/设定颜色$nscolor2Redsetnf[openout.namw]/打开跟踪文件$nsnamtrace-all$nfprocfinish{}{/定义结束过程globalnsnf$nsflush-traceclose$nfexecnamout.nam&exit0}setns0[$nsnode]setns1[$nsnode]setns2[$nsnode]setns3[$nsnode]$nsduplex-link$ns0$ns21Mb10msDropTail$nsduplex-link$ns1$ns21Mb10msDropTail$nsduplex-link$ns3$ns21Mb10msDropTail$nsduplex-link-op$ns0$ns2orientright-down$nsduplex-link-op$ns1$ns2orientright-up$nsduplex-link-op$ns2$ns3orientright$nsduplex-link-op$ns2$ns3queuePos0.5setudp0[newAgent/UDP]/建立代理UDP$udp0setclass_1$nsattach-agent$ns0$udp0setcbr0[newApplication/Traffic/CBR]$cbr0setpacketSize_500$cbr0setinterval_0.005$cbr0attach-agent$udp0setudp1[newAgent/UDP]$udp1setclass_2$nsattach-agent$ns1$udp1setcbr1[newApplication/Traffic/CBR]$cbr1setpacketSize_500$cbr1setinterval_0.005$cbr1attach-agent$udp1setnull0[newAgent/Null]/建立代理NULL$nsattach-agent$ns3$null0$nsconnect$udp0$null0$nsconnect$udp1$null0$nsat0.5$cbr0start/传送数据$nsat1.0$cbr1start$nsat4.0$cbr1stop$nsat4.5$cbr0stop$nsat5.0finish/调用结束过程$nsrun/仿真结果如下:实验分析:系统从n0开始传送数据实验分析:系统从n1开始传送数据实验分析:采用FIFO机制丢包,丢弃n0发送的数据包(3)代码:setns[newSimulator]setf0[openout0.trw]setf1[openout1.trw]setf2[openout2.trw]for{seti0}{$i5}{incri}{setn$i[$nsnode]}$nsduplex-link$n0$n31Mb100msDropTail$nsduplex-link$n1$n31Mb100msDropTail$nsduplex-link$n2$n31Mb100msDropTail$nsduplex-link$n3$n41Mb100msDropTailprocfinish{}{globalf0f1f2close$f0close$f1close$f2execxgraphout0.trout1.trout2.tr-geometry800x400&exit0}procattach-expoo-traffic{nodesinksizeburstidlerate}{setns[Simulatorinstance]setsource[newAgent/UDP]$nsattach-agent$node$sourcesettraffic[newApplication/Traffic/Exponential]$trafficsetpacketSize_$size$trafficsetburst_time_$burst$trafficsetidle_time_$idle$trafficsetrate_$rate$trafficattach-agent$source$nsconnect$source$sinkreturn$traffic}procrecord{}{globalsink0sink1sink2f0f1f2setns[Simulatorinstance]settime0.5setbw0[$sink0setbytes_]setbw1[$sink1setbytes_]setbw2[$sink2setbytes_]setnow[$nsnow]puts$f0$now[expr$bw0/$time*8/1000000]puts$f1$now[expr$bw1/$time*8/1000000]puts$f2$now[expr$bw2/$time*8/1000000]$sink0setbytes_0$sink1setbytes_0$sink2setbytes_0$nsat[expr$now+$time]record}setsink0[newAgent/LossMonitor]setsink1[newAgent/LossMonitor]setsink2[newAgent/LossMonitor]$nsattach-agent$n4$sink0$nsattach-agent$n4$sink1$nsattach-agent$n4$sink2setsource0[attach-expoo-traffic$n0$sink02002s1s100k]setsource1[attach-expoo-traffic$n1$sink12002s1s200k]setsource2[attach-expoo-traffic$n2$sink22002s1s300k]$nsat0.0record$nsat10.0$source0start$nsat10.0$source1start$nsat10.0$source2start$nsat50.0$source0stop$nsat50.0$source1stop$nsat50.0$source2stop$nsat60.0finish$nsrun结果如下:实验分析:三条数据流的峰值分别为0.1Mbit/s,0.2Mbit/s,0.3Mbit/s五、实验总结在nam辅助分析工具中发现ftp1在零秒开始启动,ftp2在第三秒时刻开始启动,都在第十秒停止,这符合设计目标。在发送端收到新一轮的确认包时发送包的数量也增一,传输的过程中队列的长度超过一定值时开始丢包。这由设定的队列最小的门限值和队列最大门限值决定。当队列长度小于最小门限值时一定不会丢包,只有超过最小门限值时才会发生丢包,且超过的越多丢弃的概率越大。当队列长度超过最大门限值时队列一定丢包。丢包后的确认包不再让发送窗口增大,反而从零开始增加。传送过程中,丢包不再决定于队列的长度了,而是根据平均队列长度随机丢弃,因为采用的是RED丢包机制。通过本次实验,让我比较熟悉的掌握了NS2的使用方法,为以后进一步的网络分析设计奠定了基础,同时,本次实验也让我对LINUX系统有了更多的了解!
本文标题:计算机网络ns2实验报告
链接地址:https://www.777doc.com/doc-4445128 .html