数据通信实验报告.docx
电子科技大学实验报告实验一NS2的基础使用NS2是一种提供虚拟环境进行网络摹拟仿真,能验证网络性能的正确性和进行相关性能 测试的软件。一、实验环境:Ubuntu 12.04/kernel 3.5GCC 4.6.3NS-2.33二、网络拓扑:实验共有6个节点,每一个节点的连接情况如图所示。其中节点NO、N2和节点Nk N2 连 接,N3、M和N4、N5连接,N2和N3连接。从0号节点到2号节点,带宽为2Nh延时为 IOmSo© 。 Z©© ©三、实践步骤:切换到用户根目录下Cd Z建立自己的文件夹mkdir your document name进入刚刚新建的文件夹Cd your_document_name新建一个 TCL 脚本文件 gedit your_TCL_f i 1 e_name. tcl# Here is the beginning of this code fileset val (stop) 5. 0 ;#摹拟器结束时间# 新建一个NS摹拟对象set ns new Simulator# 打开NS追踪文件set tracefile open out. tr w$ns trace-all Stracefile# 打开NAM追踪文件 set namfile open out. nam w $ns namtrace-all Snamfile# 新建6个节点set n $ns nodeset nl $ns nodeset n2 $ns nodeset n3 $ns nodeset n4 $ns nodeset n5 $ns node# 建立节点之间的链路,格式解释如下ftduple-link 双向链路可选选项(duplexTink, SimpleTink 单向链 路)# $n0 $n2表明从0号节点到2号节点# 2. OMb申明链路传输速率,可使用Mb, Kb, b# 1OmS申明链路传输延迟# DrOPTail队列类型$ns queue-limit $n0 $n2 10$ns$nsduplex-link queue-limit$nl $n2 2. OMb $nl $n2 10IOms$ns$nsduplex-link queue-limit$n4 $n3 2. OMb$n4 $n3 10IOms$ns$nsduplex-link queue-limit$n3 $n2 1.0Mb $n3 $n2 1020ms$ns $nsduplex-link queue-limit$n3 $n5 2. OMb$n3 $n5 10IOms$ns duplex-link $n0 $n2 2. OMb IOms DropTail#申明链路队列长度DropTailDropTailDropTailDropTail#为NAM创建节点位置描述,以第一个为例,2号节点在0号节点的右下 方$ns duplex-link-op $n0 $n2 orient right-down$ns duplex-link-op $nl $n2 orient right-up$ns duplex-link-op $n4 $n3 orient left-down$ns duplex-link-op $n3 $n2 orient left$ns duplex-link-op $n3 $n5 orient right-down# 新建一个UDP连接set udp new gentUDP# 将0号节点Agent/UDP绑定,以下类似$ns attach-agent $n0 $udpOset null2 new Agent/Nul1$ns attach-agent $n4 $null2# 将Agent/UDP及Agent/Null节点进行连接$ns connect $udpO $nul12# 设置Agent/UDP包大小$udpO set packetSize_ 1500# 新建另一个UDP连接set udpl new Agent/UDP$ns attach-agent $nl $udplset null3 new Agent/Null$ns attach-agent $n5 $null3$ns connect $udpl $nul13$udpl set packetSize_ 1500# 在UDP连接上新建一个CBR应用set cbr new pplicationTrafficCBR$cbr0 attach-agent $udp0$cbr0 set packetSize_ 1500$cbr0 set rate_ 1. OMb$cbr0 set random_ null# 在第1秒,ScbrO服务开始发送$ns at 1.0 $CbrO start”# 在第4秒,$Cbro服务住手发送$ns at 4. 0 zzScbrO stop”# 在UDP连接上新建一个CBR应用set cbrl new App1ication/TrafficCBR$cbrl attach-agent $udpl$cbrl set packetSize_ 1500$cbrl set rate_ 1. OMb$cbrl set random_ null $ns at 2. 0 zzScbrl startz, $ns at 3. 0 $CbrI stop”# 定义一个'finish,过程用以处理摹拟结束之后需要完成的动作 proc finish ) # 申明使用外部变量global ns tracefile namfile val$ns at $val (stop) $ns nam-end-wire 1 ess $val (stop)zz# 清空追踪区域 $ns flush-trace# 关闭trace文件 close Stracefile# 关系nam文件 close Snamfile# 执行系统命令nam out. nam exec nam out. nam & exit 0)# 在VaI(StOP)时间调用finish过程$ns at $val(stop) “finish”$ns at $val (stop) ,zputs "done” ; $ns halt”# 启动ns$ns run保存退出,在当前目录下,使用ns your TCL file name. tcl四、实践数据及分析结果:2/7图一(开始传输数据)4/7图二(开始发生丢包)图三(节点1住手发送数据)6/7图四(节点5住手接收数据)7/7图五(节点。住手发送数据)五、实验结论通过这次实验,我学会了在LINUX系统上安装NS2,同时更直观的理解了一 旦发生丢包后,节点会等到队列中的数据发送完后才会接受新的数据包。电子科技大学实验报告实验二实验二TCP性能仿真实验一、网络拓扑:三个节点:NO、NL N2,节点NO和N1相连,N1和N2相连工网络配置:TCP协议三、实验环境:Ubuntu 12. 04/kernel 3.5GCC 4. 6. 3NS-2. 33四、实践步骤:修改tcp. CC代码Gedit ns-allinone-2. 33ns-2. 33/tcp/tcp. cc(将窗口阈值一半变为的窗口阈值1/3wt_tcpl.cc) 第一处:if (cwnd_ < ssthresh_) slowstart = 1;if (precision_reduce_) /halfwin = windowd() / 2; / halfwin = windowd() / 3;第二处: else int temp;/temp = (int) (window () / 2);/ temp = (int) (window() / 3);halfwin =(double) temp;第三处:switch (how) case 0:* timeouts */ssthresh_ = int( window() / 2 );/ ssthresh_ = int( window() / 3 );if (ssthresh_ < 2)ssthresh_ = 2;cwnd_ = int(wnd_restart_);break;case 1:第四处case 4:* Tahoe dup acks */ssthresh_ = int( window() / 2 );/ ssthresh_ = int( window() / 3 );if (ssthresh_ < 2)ssthresh_ - 2;cwnd_ = 1;break;default:abort ();返回ns根目录执行./install执行安装参照实验1代码,编写tcl代码,实现一个简单的3节点,2条链路的网 络网络如下图这个是该网络结构对应代码set val (stop) 5. 0set ns new Simulator# 设置用XGRAPH软件打开的跟踪文件,通常可以一条完整链路对应一个文 件set f open out. tr wset tracefd open wired, tr w$ns trace-all Stracefdset nf open wired, nam w$ns namtrace-al1 $nfrecord过程用以记录仿真过程,然后通过使用XGRAPH画图软件来表现 proc record ) global sink fset ns Simulator instance# 设置经过多少时间再次调用该过程set time 0. 5# 计数Sink节点接受了多少数据set bw $sink set bytes_# 设置当前时间set now $ns now# 计算网络流量并写入文件中puts $f0 $noW expr $bw/$time*8l000000zz# 重置计数器$sink set bytes_ 0# 循环调用该过程一$ns at expr $now+$time “record”)$ns at 0. 0 "record”proc finish global ns tracefd nf val f$ns at $val(stop) $ns nam-end-wireless $val(stop)$ns flush-traceclose $f0close Stracefdclose $nfexec nam wired, nam &exit 0set n $ns nodeset nl $ns nodeset n2 $ns node$ns duplex-link$n0$nl2Mb10msDropTai1$ns duplex-link$nl$n22MbIOrnsDropTail$ns queue-limit$n0$nl10$ns queue-limit$nl$n210$ns duplex-link-op $n0 $nl orient right$ns duplex-link-op $nl $n2 orient right set tcp new Agent/TCP$ns attach-agent $n0 $tcpset sink new Agent/TCPSink$ns attach-agent $n2 $sink$ns connect Step $sinkset ftp new Application/FTP$ftp attach-agent $tcp$ns at 0. 5 $ftp start,z$ns at 4. 5 $ftp stop”$ns at $val(stop) “finish”$ns at $val (stop) “puts "done” ; $ns halt,z$ns run保存并返回在当前目录调用ns your_TCL_file_name. tcl观察nam效果在当前目录调用 graph out. tr -geometry 800x400完成上述内容之后,我们再将窗口阈值的一半改为3/4(这个值可以是任意),观察结 果有什么不同。接下来在0和2号节点之间同时建立一个UDP链路,并且用实验一的方法建立一个CBR应用,观察结果又有什么不同一、实验数据及分析结果:分析:在开始发送数据是, 拥塞窗口进入慢启动的过程,开始成指数型增长, 到达阀值成线性增长。分析:从图中可看出,发生冗余ACK,拥塞窗口降为之前的普通,如果发生丢包, 则启动超时重传,拥塞窗口降为1,进入慢启动过程。五、实验结论本次实验利用NS2网络仿真器对TCP协议中的拥塞控制中重传机制进行了仿 真,并给出了仿真结果,使我可以更深入了解TCP的这几种算法,印象更为深刻。数据通信NS2仿真实验实验3一、实验要求:请按照以下要求,根据上次实验的代码,设计一个网络拓扑,并用NAM(能用XGRAPH 分析更好)查看网络流量变化并分析结果。要求如下:网络包含4个node,各节点之间都是以全双工的链路相连(duplex-link)。n 和n2之间链路的带宽为2Mbps,延迟为IOms,为DrOPTail队列方式;nl和n2之间链路带 宽为2Mbps,延迟为IOms,也为DrOPTail队列方式;n2和n3之间链路的带宽为1.7Mbps, 延迟为20ms,为RED方式(将DroPTail替换成为RED)。n处有一个FTP的TCP流量产生 器,nl处为CBR的UDP流量产生器,n3有一个接收TCP的Sink和接收UDP的NULLl网络拓扑:节点间位置关系如下图:三、网络配置:TCP、UDP 四、实验项目:根据上次实验的代码,设计一个网络拓扑,并用NAM (能用 XGRAPH分析更好)查看网络流量变化并分析结果五、实验环境:Ubuntu 12. 04/kernel 3.5GCC 4. 6. 3 NS-2. 33六、实践步骤:网络包含4个node,各节点之间都是以全双工的链路相连(duplex-link)o n和n2之间链路的带宽为2Mbps,延迟为IOms,为DropTail 队列方式;nl和n2之间链路带宽为2Mbps,延迟为IOms,也为DropTail队列 方式;2和n3之间链路的带宽为1. 7Mbps,延迟为20ms,为RED方式(将DropTail 替换成为RED) O n处有一个FTP的TCP流量产生器,nl处为CBR的UDP流量产 生器,n3有一个接收TCP的sink和接收UDP的NULLo七、实验数据及分析结果:7/8分析:刚开始CongWin进入慢启动过程,到达一定值后发生冗余ACK延迟,于是 COngWin降为之前的一半,并重新进入线性增长过程,然后又到达一定值后发生 超时,于是CongWin降为L进入慢启动过程。五、实验结论在本次实验中,自己动手设计出一个网络拓扑,更深入了解了网络流量的变 化过程,抽象的理论知识化为实际的操作,更加深入理解了知识。实验四一、实验项目:本实验使用文本处理工具gwak对仿真生成的trace文件进 行解析,处理,然后用以画图或者数据分析。二、实验环境:Ubuntu 12. 04/kernel 3.5GCC 4. 6. 3NS-2.33三、实践步骤:使用文本编辑工具(例如gedt,vim)新建tcl文本文件 Gedit yout_tcl_file_name.tcl复制一下代码到你的tcl文件中:set ns new Simulator$ns lor 1 Blue$ns lor2 Redset nf open out.nam w$ns namtrace-all $nf set nd open out.tr w $ns trace-all $ndproc finish global ns nf nd$ns flush-traceclose $nfclose $ndexec nam out.nam &exit 0set n $ns nodeset 1 $ns nodeset 2 $ns nodeset 3 $ns node$ns duplex-link $nO $n2 2Mb 10ms DropTaiI$ns duplex-link $n1 $n2 2Mb 10ms DropTaiI$ns duplex-link $n2 $n3 1.7Mb 20ms RED$ns queue-limit $n2 $n3 100$ns duplex-link-op $n0 $n2 orient right-down$ns duplex-link-op $n1 $n2 orient right-up$ns duplex-link-op $n2 $n3 orient right# 监控链路队列(n2-n3). (for NAM)$ns duplex-link-op $n2 $n3 queuePos 0.5 set tcp new AgenVTCP$tcp set class_ 2$ns attach-agent $nO $tcpset sink new AgentZTCPSink$ns attach-agent $n3 $sink$ns nnect $tcp $sink$tcp set fid_ 1set ftp new Application/FTP$ftp attach-agent $tcp$ftp set type_ FTPset udp new Agent/UDP$ns attach-agent $n1 $udpset null new Agent/Null$ns attach-agent $n3 $null$ns connect $udp $null$udp set fid_ 2set cbr new Application/T raffic/CBR$cbr attach-agent $udp$cbr set type_ CBR$cbr set packet_size_ 10OO$cbr set rate_ 1 mb$cbr set random_ false$ns at 0.1 "$cbr start"$ns at 1.0 "$ftp start"$ns at 40.0 "$ftp stop"$ns at 4.5 "$cbr stop"$ns at 50.0 "finish',# 监视n2,3的RED队列信息set redq $ns link $n2 $n3 queueset traceq open redQueue.tr w# 监视当前队列长度$redq trace curq_# 监视平均队列长度$redq trace ave_# 将2个监视结果存入文件中$Tedq attach $traceq$ns run3,使用LinUX命令对跟踪队列信息的trace文件(redQueue.tr)进行分离 $grep ''a" redQueue. tr>average. tr$grep Z/Q,Z redQueue.tr > current.tr用文本编辑工具新建一个awk文件Gedit your_awk_file_name_l.awk加入以下代码(注意必须有大括号,否则报错):(print $2,$3 » "average_xg.tr" )用文本编辑工具新建一个awk文件Gedit your_awk_file_name_2.awk加入以下代码:(print $2,$3 »"current_xg.tr")分别调用对应awk程序处理对应文件,例如:Gawk -f your_awk_file_name.awk average.tr得到 average_xg.tr 文件最后使用XgraPh工具对average_xg.tr, CUfTent_xg.tr进行解析得到图象。4,计算丢包率用文本编辑器新建一个awk文件并加入以下代码:#程序初始化BEGINdropNum=0;totalNum=0;i=0;(event = $1;time = $2;fromNode - $3;toNode = $4;pktType = $5;pktSize = $6;flags = $7;fid = $8;srcAddr = $9;dstAddr = $10;seqNm = $11;pktld = $12;if(fromNode =1 && toNode =2 && event ="+")(totalNum+;#记录时间timeArri=time;#计算丢包率Iossratef i=(float)(dropNumtotalNum);i+;)if (fid - 2 && event= "d") dropNum +;)ENDprintf("#number of packet sent%d,lost%dn",totalNum,dropNum);printf("#lost rate of packets%fn,dropNumtotalNum);for(j=0;j<i;j+)printf("%t%n",timeArrj,lossratej);)退出文本编辑器调用命令查看结果Gawk fyour_awk_file_name.awk out. tr5,计算延迟用上述方法,新建一个awk文件,加入以下代码:#delay analyseBEGINKighestPktId=O;)(event = $1;time = $2;fromNode = $3;toNode = $4;pktType = $5;pktSize = $6;flags = $7;fid = $8;srcAddr $9;dstAddr = $10;seqNum = $11;pktld = $12;#判断最大分组标识if(pktld>highestPktld)KighestPktId= pktld;#设置分组开始时间if(beginTime(pktld=O)beginTimepktld=time;#计算结束时间if(fid=2 && event!="d',)if(event=,r")endTimepktld=time; elseendTimepktld=-l;)ENDfor(pktld=0;pktld<=highestPktld;pktld+)(#计算延迟begin=begiTimepktld;end=endTimepktld;pktDuration=end-begin;if(begin<end)printf("%ft%n"begin,pktDuration);)用命令查看结果Gawk fyour_awk_file_name.awk out. tr6,计算吞吐量用文本编辑器新建一个awk文件加入以下代码:SthroughputBEGINfag=O;i=0;)(event = $1;time = $2;fromNode = $3;toNode = $4;pktType = $5;pktSize = $6;flags = $7;fid = $8;SrcAddr = $9;dstAddr = $10;seqNum = $11;pktld = $12;if(event="r" && fromNode=2 && toNode=3 && fid=2)#计算当前总流量pktSmi+l=pktSumi+pktSize;if(flag=O) beginTime=time;fag=l;endTimei=time;i+;)ENDPrintf("%.6ft%5fr,endTime0,O);for(j=l;j<i;j+)#计算并输出网络吞吐率throughput=(float)pktSumj(endTimej-beginTime)* 8/1000;printf("%.6ft%.5fn",endTimej,throughput);)printf("%.6ft%.5fn"dTime(i-l,0);)用命令查看结果Gawk fyour_awk_file_name.awk out.tr四、实验数据及分析结果:WTnii工IlIIulJUIlhIHleIIiiiin,i” ;lln",IIIHlII而IllJlHIijIHIHiwM幽IILI疝川疝8f!Ikgd里划岛!血!而”小牌4|1晶帆IIMMjlraIIPl血!疝Hl油川遍IiIIIl油IlHillllel血I川 IllIIl加Il440-am M Miiiiiii iiIH M IlHUl n NII Il N INlHl J M Il Jl n IR IllMll L IRMMl Il mill lk IRHI Jll R llllllll IIHII INllHIOIIllll IRlIl III 五、实验结论本实验使用文本处理工具gwak对仿真生成的trace文件进行解析,学会了不少平时课堂上 学不到的东西,最后感谢老师。