网络原理试验指导书.doc_第1页
网络原理试验指导书.doc_第2页
网络原理试验指导书.doc_第3页
网络原理试验指导书.doc_第4页
网络原理试验指导书.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

网络原理试验指导书 网络原理实验指导书(内部使用)游胜计算机与通信学院实验一NS网络模拟平台的安装 一、实验目的1)掌握对NS平台的安装过程 二、实验要求1)在Windows下成功安装NS网络仿真器2)使用NS平台模拟两个以上的网络模拟实验 三、实验过程1)在Windows下安装Visual c+2)通过网络查找到Tcl、Tk、Otcl、Tclcl、NS、nam的源代码并下载,其下载原文件名为tcl8.3.2.tar、ns-src-2.1b9a、otcl-1.0a8.tar、tclcl-src-1.0b12.tar、tk8.3.2.tar、nam-1.0alla-win32.exe,然后将各压缩文件解压到一个新创建的目录(如C:NetSim)下,将nam-1.0alla-win32.exe改名为nam后放在c:NetSimnam下,如图在安装软件包之前先要运行命令vcvars32.bat,在此之前还应改变环境变量,在path中添加C:Program FilesMicrosoft VisualStudioVC98Bin;确定后,环境变量有效。 执行命令vcvars32.bat完成以上操作之后,再对各个软件包进行如下的顺序安装 1、安装Tcl:修改cd c:NetSimtcl8.3.2winmakefiles.vc中的参数TOOLS32和TOOLS32_rc,使它们指向Visual c+相关工具所在目录(如图中黑体字部份)修改后执行命令cd c:NetSimtcl.3.2win nmakef makefile.vc nmakef makefile.vc install(将tcl安装到INSTALLDIR指定目录) 2、安装Tk修改c:NetSimtk8.3.2winmakefile.vc中的TOOL 32、TOOLS32_rc和TCLDIR,如下执行下列cd c:NetSimtk8.3.2win nmakef makefile.vc nmakef makefile.vc install(将tk安装到INSTALLDIR指定目录)添加路径PATH(将tcl的可执行文件所在目录加入)%path%;c:progra1tclbin; 3、安装ORecl:修改c:NetSimotcl-1.0a8makefile.vc,注释STATIC_TCLTK=1,TCLPATCHLEVEL改为83.2,如下图所示修改之后执行以下命令cd c:NetSimotcl-1.0a8nmakef makefile.vc如执行成功即表明Otcl安装完毕。 4、安装TclCL:修改文件C:NetSimtcltc-1.0b12confmakefile.win,修改LOCAL_SRC,注释STATIC_LIB=1,修改TK_VER,TCL_VER,TCL_SUFFIX,TK_SUFFIX变量及OTCL_DIR,TCLCL_DIR路径,如图(黑体字)所示再修改C:NetSimtclcl-1.0b12makefile.vc,TCL_83_LIBRARY_FILES,如图(黑体字)所示修改完成后执行以下命令C:NetSimtclcl-1.0b12nmakef makefile.vc执行完毕则代表安装成功。 5、安装NS修改C:NetSimns-2.1b9aconfmakefile.win中的变量,MSVCDIR指向Visual C+的相关工具所在目录,确认LOCAL_SRC的值是正确的,确认STATICLIB=1已经被注释,确认Tcl,Tk中曾改过的变量的一致性,如下所示修改完成后执行以下命令C:NetSimns-2.1b9a nmakef makefile.vc 6、安装nam:将改名为nam.exe的可执行文件拷贝到C:NetSimnam目录下,至此nam安装成功。 7、修改环境变量NS编译成功后,添加“系统变量”中的“Path”,增加路径“C:Progra1tclbin;c:NetSimns-2.1b9a;c:NetSimnam;C:NetSim;”。 如下图所示 8、测试NS安装是否成功可在命令行中输入ns,如果安装正确的话应该可以看到%提示符。 9.运行NS和nam实验二TCL语言简介 一、实验目地学习TCL语言的基本语法。 二、实验原理TCL(Tool CommandLanguage)在ns2中主要是用来描述脚本的,简单的说就是用来描述要模拟的网路环境和参数设定等。 变数和变数替换就如同其他的程式语言一样,变数(variables)可以被想成是盒子(boxes),是用来储存各种类型的资料的。 这些盒子或者说是变数,都有各自的名称,而这些名称在我们需要取用或者是变更变数的值(value)时会被用到。 C语言在使用变数时,需要事先的宣告,而TCL则不需要事先宣告。 TCL变数是在第一次使用set的指令来指派变数的值时所产生的。 而当我们不在需要某个变数时,可以使用unset来取消这个变数,但一般而言,我们可以不用去做这个动作。 而当我们需要取用或者是变更变数内的值时,只要在变数名称前加上一个$的符号就可以去取用或者是变更变数内的值了,这就是所谓的变数替换。 程序1set foo“john”puts“my name is$foo”执行方法:ns ex1_1.tcl执行的结果:my nameis john程序2set month2set day3set year97set date$month:$day:$yearputs$date执行方法:ns ex1_2.tcl执行的结果:2:3:97程序3set fooputs hieval$foo执行方法:ns ex1_3.tcl执行的结果:Hi表示式TCL包含许多种类的表示式,如数学表示式、关系表示式等。 通常这些表示式都会使用expr这个指令去判断表示式的真假或者去求得表示式的值。 程序1set valueexpr0=1puts$value执行方法:ns ex2_1.tcl执行的结果:0set valueexpr2=1puts$value执行方法:ns ex2_2.tcl执行的结果:1程序3set valueexpr2+3puts$value执行方法:ns ex2_3.tcl执行的结果:5指令替换就如同变数替换一样,指令替换可以把”原tcl script执行结果”取代”原tcl script”。 程序putsI amexpr10*2years old,and myI.Q.isexpr100-25执行方法:ns ex3_1.tcl执行的结果:I am20years old,and myI.Q.is75程序set my_height6.0putsIf Iwas2inches taller,I wouldbeexpr$my_height+(2.0/12.0)feet tall执行方法:ns ex3_2.tcl执行的结果:If Iwas2inches taller,I wouldbe6.166666666666667feet tall流程控制跟其它的程式相同,TCL也提功了一些方法可以用来控制程式运作的流程,这包含了if-else、switch、while、for、foreach等指令,这些指令用来请参考下面范例。 程序set my_plaearthif$my_pla=earthputsI feelright athome.elseif$my_pla=venusputsThis isnot myhome.elseputsI amneither fromEarth,nor fromVenus.set temp95if$temp80putsIts alittle chilly.elseputsWarm enoughfor me.执行方法:ns ex4_1.tcl执行的结果:I feelright athome.Warm enoughfor me.程序set num_legs4switch$num_legs2putsIt couldbe ahuman.4putsIt couldbe acow.6putsIt couldbe anant.8putsIt couldbe aspider.defaultputsIt couldbe anything.执行方法:ns ex4_2.tcl执行的结果:It couldbe acow.程序forset i0$i5incr i1putsIn thefor loop,and i=$i执行方法:ns ex4_3.tcl执行的结果:In thefor loop,and i=0In thefor loop,and i=1In thefor loop,and i=2In thefor loop,and i=3In thefor loop,and i=4程序set i0while$i0return$numset numexpr$num*(-1)return$numset num112set num214set sumsum_proc$num1$num2putsThe sumis$sumputsThe magnitudeof3ismagnitude3putsThe magnitudeof-2ismagnitude-2执行方法:ns ex5_1.tcl执行的结果:The sumis26The magnitudeof3is3The magnitudeof-2is2程序proc dumb_procset myvar4putsThe valueof thelocal variableis$myvarglobal myglobalvarputsThe valueof theglobal variableis$myglobalvarset myglobalvar79dumb_proc执行方法:ns ex5_2.tcl执行的结果:The valueof thelocal variableis4The valueof theglobal variableis79阵列程序set myarray (0)Zeroset myarray (1)Oneset myarray (2)Twoforset i0$i3incr i1puts$myarray($i)执行方法:ns ex6_1.tcl执行的结果:Zero OneTwo程序set person_info(name)Fred Smithset person_info(age)25set person_info(oupation)Plumberforeach thingname ageoupationputs$thing=$person_info($thing)执行方法:ns ex6_2.tcl执行的结果:name=Fred Smithage=25oupation=Plumber程序set person_info(name)Fred Smithset person_info(age)25set person_info(oupation)Plumberforeach thingarray namesperson_infoputs$thing=$person_info($thing)执行方法:ns ex6_3.tcl执行的结果:name=Fred Smithage=25oupation=Plumber字串程序set strThis isa stringputsThe string is:$strputsThe lengthof thestring is:string length$strputsThe characterat index3is:string index$str3putsThe characters from index4through8are:string range$str48putsThe indexof thefirst ourrenceof letteriis:string firsti$str执行方法:ns ex7_1.tcl执行的结果:The stringis:This isa stringThe lengthof thestringis:16The characterat index3is:s Thecharactersfromindex4through8are:isaThe indexof thefirst ourrenceof letteriis:2输出程序set fopen/tmp/myfilewputs$fWe livein Texas.Its already110degrees outhere.puts$f456close$f执行方法:ns ex8_1.tcl执行的结果:请使用文字器打开/tmp/myfile,其内容为:We livein Texas.Its already110degrees outhere.456 三、原理运用实例 (1)example1.tcl如下所示此例为通过两个节点间建立一条双向链路(line)来模拟网络流量传输的过程,其中流量的带宽为1Mbit/s,延迟为10ms,队列为DropTail;流量发生器(CBR)中,分组大小为500Byte,发送间隔为5ms。 1、源代码set nsnew Simulatorset tracefdopen example1.tr w$ns trace-all$tracefd set namtracefdopen example1.nam w$ns namtrace-all$namtracefd proc finishglobal ns tracefd namtracefd$ns flush-trace close$tracefd close$namtracefd exec nam example1.nam&exit0set n0$ns nodeset n1$ns node$ns duplex-link$n0$n11Mb10ms DropTail set udp0new Agent/UDP$ns attach-agent$n0$udp0set cbr0new Application/Traffic/CBR$cbr0set packetSize_500$cbr0set interval_0.005$cbr0attach-agent$udp0set null0new Agent/Null$ns attach-agent$n1$null0$ns connect$udp0$null0$ns at0.5$cbr0start$ns at4.5$cbr0stop$ns at5.0finish$ns run 2、测试结果在源代码中,$ns run代表自行调用,但通过ns example1.tcl运行后,弹出如下窗口解决方法为直接运用nam命令执行nam example1.nam进行动画演示,即会出现如下结果片断。 example1.tr对整个模拟过程进行分析,如下为其片断 (2)example2.tcl如下所示此例为简单无线网络场景模拟,此场景有两个移动点,它们在一个500m*500m的区域内运动,两个节点间有一个TCP数据流。 1、源代码set val(chan)Channel/WirelessChannel;#channel type set val(prop)Propagation/TwoRayGround;#radio-propagation modelset val(if)Phy/WirelessPhy;#work interfacetype set val(mac)Mac/802_11;#MAC type set val(ifq)Queue/DropTail/PriQueue;#interface queuetypeset val(ll)LL;#link layertypeset val(ant)Antenna/OmniAntenna;#antenna modelsetval(ifqlen)50;#max packetin ifqsetval(nn)2;#number ofmobilenodes setval(rp)AODV;#routing protocolsetval(x)500;#X dimensionof thetopography setval(y)500;#Y dimensionof thetopography set nsnew Simulatorset tracefdopen example2.tr w$ns trace-all$tracefd set namtracefdopen example2.nam w$ns namtrace-all-wireless$namtracefd$val(x)$val(y)proc finishglobal ns tracefd namtracefd$ns flush-trace close$tracefd close$namtracefd exeam example2.nam&exit0set toponew Topography$topo load_flatgrid$val(x)$val(y)create-god$val(nn)$ns node-config-addressType flat-adhocRouting$val(rp)-llType$val(ll)-macType$val(mac)-ifqType$val(ifq)-ifqLen$val(ifqlen)-antType$val(ant)-propType$val(prop)-phyType$val(if)-channelType$val(chan)-topoInstance$topo-agentTrace ON-routerTrace ON-macTrace OFF-movementTrace OFFforset i0$i$val(nn)incr iset node_($i)$ns node$node_($i)random-motion0;#disable randommotion$node_ (0)set X_5.0$node_ (0)set Y_2.0$node_ (0)set Z_0.0$node_ (1)set X_390.0$node_ (1)set Y_385.0$node_ (1)set Z_0.0$ns at10.0$node_ (0)setdest20.018.01.0$ns at50.0$node_ (1)setdest25.020.015.0$ns at100.0$node_ (1)setdest490.0480.015.0set tcpnew Agent/TCP$tcp setclass_2set sinknew Agent/TCPSink$ns attach-agent$node_ (0)$tcp$ns attach-agent$node_ (1)$sink$ns connect$tcp$sink set ftpnew Application/FTP$ftp attach-agent$tcp$ns at10.0$ftp startforset i0$i$val(nn)incr i$ns at150.0$node_($i)reset;$ns at150.0finish$ns run 2、测试结果输入命令ns example2.tcl namexample2.nam其中,圆代表路由请求是广播分组实验三乱数产生器 一、实验目的学会如何使用乱数产生器 二、实验原理种子和分布乱数产生器所产生的数值是由种子和分布所控制的,不同的种子或者是分布就会产生出不同的乱数。 我们可以这样思考,当一个种子和分布决定之后,乱数产生器会产生出一个表格,表格内是由一长串不同数字所组成,当我们需要一个乱数,乱数产生器就会去选取这个表格中第一个数字,当再需要另一个乱数,乱数产生器就会去选取这个表格中第二个数字,以此类推,所以当使用种子和分布相同时,得到的乱数会相同,若不同时,得到的乱数会不同。 而在NS2中,若是种子的值为0的话,则表示每次执行程式的时候,乱数产生器都会在产生出不同的表格,也就是说每次得到的乱数都不相同。 三、实验过程在NS2中产生一个乱数产生器,并把种子设定为2,把下面的程式码放入tcl code中。 set rngnew RNG$rng seed2当random variable产生之后,接下来要决定分布,我们可以使用的分布有Pareto、Constant、Uniform、Exponential、或HyperExponentail等等分布。 1.Pareto Distribution:要提供expectation和shaper parameter。 set r1new RandomVariable/Pareto$r1use-rng$rng$r1set avg_10.0$r1set shape_1.22.Constant:set r2new RandomVariable/Constant$r2use-rng$rng$r2set avg_5.03.Uniform distribution:要提供最小值和最大值set r3new RandomVariable/Uniform$r3use-rng$rng$r3set min_0.0$r3set max_10.04.Exponential distribution:要提供平均值set r4new RandomVariable/Exponential$r4use-rng$rng$r4set avg_55.Hyperexponential distribution:set r5new RandomVariable/HyperExponential$r5use-rng$rng$r5set avg_1.0$r5set cov_4.0Tcl Codeset rngnew RNG$rng seed2puts“Testing ParetoDistribution”set r1new RandomVariable/Pareto$r1use-rng$rng$r1set avg_10.0$r1set shape_1.2forset i1$i=3incr iputs$r1valueputs“Testing ConstantDistribution”set r2new RandomVariable/Constant$r2use-rng$rng$r2set avg_5.0forset i1$i=3incr iputs$r2valueputs“Testing UniformDistribution”set r3new RandomVariable/Uniform$r3use-rng$rng$r3set min_0.0$r3set max_10.0forset i1$i=3incr iputs$r3valueputs“Testing ExponentialDistribution”set r4new RandomVariable/Exponential$r4use-rng$rng$r4set avg_5forset i1$i=3incr iputs$r4valueputs“Testing HyperExponentialDistribution”set r5new RandomVariable/HyperExponential$r5use-rng$rng$r5set avg_1.0$r5set cov_4.0forset i1$i=3incr iputs$r5value执行结果Testing ParetoDistribution7.323108e+021.034996e+013.241146e+01Testing ConstantDistribution1.000000e+001.000000e+001.000000e+00Testing UniformDistribution1.762401e+008.823415e+005.983056e+00Testing ExponentialDistribution2.342635e+002.286844e+003.783593e+00Testing HyperExponentialDistribution2.182741e-019.029152e-018.333935e-02不管执行几次,结果都会相同,这是因为seed都固定为2。 若是把seed改为0,第一次执行Testing ParetoDistribution2.384032e+005.089023e+004.105111e+01Testing ConstantDistribution1.000000e+001.000000e+001.000000e+00Testing UniformDistribution1.244962e+007.089372e+009.505300e+00Testing ExponentialDistribution6.821317e-011.152453e+005.977962e+00Testing HyperExponentialDistribution2.182741e-019.029152e-018.333935e-02若是把seed改为0,第二次执行Testing ParetoDistribution2.095560e+003.138167e+004.567834e+00Testing ConstantDistribution1.000000e+001.000000e+001.000000e+00Testing UniformDistribution2.799521e+003.294468e-014.339498e+00Testing ExponentialDistribution8.149149e-011.027426e+004.275210e+00Testing HyperExponentialDistribution2.182741e-019.029152e-018.333935e-02可以看出当seed为0时,Pareto、Uniform、Exponential所得到的结果会不相同。 实验四P TCP同步化现象 一、实验目的探讨TCP同步化现象出现之原因。 二、实验原理当前的伫列管理演算法可以分为两大类被动式伫列管理和主动式伫列管理。 管理路由器伫列长度的传统技术是对每个伫列设置一个最大值(以封包为单位),然后接受封包进入伫列直到伫列长达到最大值,接下来到达的封包就会被拒绝进入伫列直到伫列的长度下降。 这种技术也就是所谓的去尾演算法。 虽然这个方法在当前Inter上得到了广泛的使用,但其存在几个重大缺陷,其中之一就是全局同步问题由于Inter上数据的突发本质,到达路由器的封包也往往是突发的。 如果伫列是满的或者几乎是满的,就会导致在短时间内连续大量地丢封包。 而TCP流具有自适应特性,端发现封包丢失就急剧地减小发送窗口,封包到达速率就会迅速下降,于是网络拥塞得以解除,但端得知网路不再拥塞后又开始增加发送速度,最终又造成网路拥塞,而且这种现象常常会周而复始地进行下去,从而在一段时间内网路处于网路利用率很低的用状态,降低了整体吞吐量,这就是所谓地TCP全局同步现象。 网络拓扑结构 三、实验过程Tcl脚本#number ofconnections set n_con2#Create asimulator objectset nsnew Simulator#Define afinishprocedure proc finishoutput_upvar$output_output global ns n_con forset i0$i$n_conincr iclose$output($i)$ns flush-trace exit0S (1)S(n)R0r1D (1)D(n)tcptcpsinksinkftpftp1.5Mb,40ms10Mb,0.4ms10Mb,0.4msS (1)S(n)R0r1D (1)D(n)tcptcpsinksinkftpftp1.5Mb,40ms10Mb,0.4ms10Mb,0.4msproc recordtcp_output_upvar$tcp_tcp upvar$output_output global ns n_con#Set thetime afterwhich theprocedure shouldbe calledagain settime0.02#Get thecurrent timeset now$ns nowforset i0$i$n_conincr iputs$output($i)$now$tcp($i)set cwnd_#puts$now cwnd_=$tcp (0)set cwnd_#Re-schedule theprocedure$ns atexpr$now+$timerecord tcpoutput#Create fournodes set r0$ns nodesetr1$ns node#Create linksbetween thenodes$ns duplex-link$r0$r11.5Mb40ms DropTail#Set Queue Size oflink(r0-r1)to20$ns queue-limit$r0$r120forset i0$i$n_conincr iset s($i)$ns nodeset d($i)$ns node$ns duplex-link$s($i)$r010Mb0.4ms DropTail$ns duplex-link$r1$d($i)10Mb0.4ms DropTail set output($i)open output$i.ns wforset i0$i$n_conincr iset tcp($i)new Agent/TCPset sink($i)new Agent/TCPSink$ns attach-agent$s($i)$tcp($i)$ns attach-agent$d($i)$sink($i)$ns connect$tcp($i)$sink($i)$tcp($i)set fid_$i$tcp($i)set window_128$tcp($i)set packetSize_512#Setup aFTP overTCP connectionset ftp($i)new Application/FTP$ftp($i)attach-agent$tcp($i)$ftp($i)set type_FTP#Schedule eventsfor theFTP agents$ns at0.0record tcpoutput$ns at0.0$ftp (0)startforset i0$ibyteLength():q_-length();int qlimBytes=qlim_*mean_pktsize_;if(!qib_&(q_-length()+1)=qlim_)|(qib_&(q_-byteLength()+hdr_cmn:aess(p)-size()=qlimBytes)/if thequeue wouldoverflow ifwe addedthis packet.if(drop_front_)/*remove fromhead ofqueue*/q_-enque(p);Packet*pp=q_-deque();drop(pp);elsedrop(p);elseq_-enque(p);/AG ifqueue sizechanges,we dropexcessivepackets.void myfifo:shrink_queue()int qlimBytes=qlim_*mean_pktsize_;if(debug_)printf(shrink-queue:time%5.2f qlen%d,qlim%dn,Scheduler:instance().clock(),q_-length(),qlim_);while(!qib_&q_-length()qlim_)|(qib_&q_-byteLength()qlimBytes)if(drop_front_)/*remove fromhead ofqueue*/Packet*pp=q_-deque();drop(pp);elsePacket*pp=q_-tail();q_-remove(pp);drop(pp);Packet*myfifo:deque()if(summarystats&Scheduler:instance()!=NULL)Queue:updateStats(qib_?q_-byteLength():q_-length();return q_-deque();void myfifo:print_summarystats()/double now=Scheduler:instance().clock();printf(True averagequeue:%5.3f,true_ave_);if(qib_)printf(inbytes);printf(time:%5.3fn,total_time_); (4)修改ns-default.tcl档,设定初始内定值。 a.cd ns-allinone-2.27/ns-2.27/tcl/lib/b.使用文字软体打开ns-default.tcl c.使用搜寻的功能找到Queue/DropTail d.把每个初始设定值都再设一份给Queue/myfifo.Queue/DropTail set drop_front_false Queue/DropTail setsummarystats_false Queue/DropTailsetqueue_in_bytes_false Queue/DropTailsetmean_pktsize_500Queue/myfifo setdrop_front_false Queue/myfifo setsummarystats_false Queue/myfifo setqueue_in_bytes_false Queue/myfifo setmean_pktsize

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论