1206101-24伍支庆NS2网络模拟编程报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

HUNANCITYUNIVERSITYNS2网络模拟编程报告模拟题目:基于NS2的TCP建模与仿真专业:网络工程学生姓名:伍支庆班级学号:1206101-242015年11月6日1.模拟目的1.学会NS2的安装过程,并熟悉NS2的环境;2.观察并解释NAM动画,分析Trace文档。3.学会用awk和gnuplot分析吞吐量、封包延迟、抖动率和封包丢失率。2.模拟环境本实验中编写的脚本simulator.tcl见附录一。实际模拟的网络结构图如图2所示。包含4个node,各节点之间都是以全双工的链路相连。n0和n2之间链路的带宽为2Mbps,延迟为10ms,为DropTail队列方式;n1和n2之间链路带宽为2Mbps,延迟为10ms,也为DropTail队列方式;n2和n3之间链路的带宽为1.7Mbps,延迟为20ms,也为DropTail方式。n0处有一个FTP的TCP流量产生器,n1处为CBR的UDP流量产生器,n3有一个接收TCP的sink和接收UDP的NULL。仿真结束后,会产生两个档案,一个是out.nam,这是给NAM用的,用来把仿真的过程用可视化的方式呈现出来,这可以让我们很直观的方式去了解封包传送是如何从来源端送到接收端。另一个档案是out.tr,这个档案记录了仿真过程中封包传送中所有的事件,例如第一笔记录是一个CBR的封包,长度为1000bytes,在时间0.1秒的时候,从n1传送到n2。3.模拟过程封包延迟测量CBR封包端点到端点间延迟时间的程序写在measure-delay.awk中。measure-delay.awk的具体代码查看附录。在终端输入如下命令:gawk-fmeasure-delay.awkout.trcbr_delay此指令将运行结果存储到cbr_delay文件中,以便进行绘图。接着输入gnuplot,得到下图接着按下图输入,为接下来要画的时延图做标识:运行上图最后一条指令后得到图3:抖动率就是延迟时间变化量delayvariance,由于网络的状态随时都在变化,有时候流量大,有时候流量小,当流量大的时候,许多封包就必需在节点的队列中等待被传送,因此每个封包从传送端到目的地端的时间不一定会相同,而这个不同的差异就是所谓的Jitter。Jitter越大,则表示网络越不稳定。量测CBRflow抖动率的代码写在measure-jitter.awk内,具体见附录。运行方法仿照4.3.1,可得下图4:封包丢失率测量CBR封包丢失率的代码写在measure-drop.awk内,具体见附录。运行awk-fmeasure-drop.awkout.trcbr_drop后,可在cbr_drop中找到如下信息:其中第一行表示CBR总共送出了550个封包,丢失了8个。第二行表示总的丢包率为0.014545。接下来的几行中,第一列表示时间,第二列表示丢包率。仿照上两例,只不不过为了利用gnuplot,要把先把前两行删除。最终可得丢包率随时间的变化如图5所示:吞吐量量测CBR吞吐量的代码写在measure-throughput.awk内。4.模拟源代码#有线场景,四个节点,FTT+TCP用蓝色表示,CBR+UDP用红色表示setns[newSimulator]#设置颜色$nscolor1Blue$nscolor2Redsettracefd[openout.trw]$nstrace-all$tracefdsetnamtracefd[openout.namw]$nsnamtrace-all$namtracefdprocfinish{}{globalnstracefdnamtracefd$nsflush-traceclose$tracefdclose$namtracefdexecnamout.nam&exit0}setn0[$nsnode]setn1[$nsnode]setn2[$nsnode]setn3[$nsnode]$nsduplex-link$n0$n22Mb10msDropTail$nsduplex-link$n1$n22Mb10msDropTail$nsduplex-link$n2$n31.7Mb20msDropTail$nsqueue-limit$n2$n310#用于设置NAM显示时,各节点的相对位置$nsduplex-link-op$n0$n2orientright-down$nsduplex-link-op$n1$n2orientright-up$nsduplex-link-op$n2$n3orientright$nsduplex-link-op$n2$n3queuePos0.5settcp[newAgent/TCP]$tcpsetclass_2$nsattach-agent$n0$tcpsetsink[newAgent/TCPSink]$nsattach-agent$n3$sink$nsconnect$tcp$sink$tcpsetfid_1setftp[newApplication/FTP]$ftpattach-agent$tcp$ftpsettype_FTPsetudp[newAgent/UDP]$nsattach-agent$n1$udpsetnull[newAgent/Null]$nsattach-agent$n3$null$nsconnect$udp$null$udpsetfid_2setcbr[newApplication/Traffic/CBR]$cbrattach-agent$udp$cbrsettype_CBR$cbrsetpacket_size_1000$cbrsetrate_1mb$cbrsetrandom_false$nsat0.1$cbrstart$nsat1.0$ftpstart$nsat4.0$ftpstop$nsat4.5$cbrstop#以下这一行可有可无$nsat4.5$nsdetach-agent$n0$tcp;$nsdetach-agent$n3$sink$nsat5.0finishputsCBRpacketsize=[$cbrsetpacket_size_]putsCBRinterval=[$cbrsetinterval_]$nsrun丢包率awk处理脚本measure-drop.awk:BEGIN{dropNum=0;totalNum=0i=0;lossrate[i]=0;timeArr[i]=0;}{event=$1;time=$2;fromNode=$3;toNode=$4;pktType=$5;pktSize=$6;flags=$7;fid=$8;srcAddr=$9;stAddr=$10;seqNum=$11;pktId=$12;if(fromNode==1&&toNode==2&&event==+){totalNum++;timeArr[i]=time;lossrate[i]=(float)(dropNum/totalNum);i++;}if(fid==2&&event==d)dropNum++;}END{printf(#numberofpacketsent:%d,lost:%d\n,totalNum,dropNum);printf(#lostrateofpackets:%f\n,dropNum/totalNum);printf(%f\t%f\n,timeArr[j],lossrate[j]);}处理时延的awk脚本measure-delay.awk:BEGIN{#程序初始化,设定一变量以记录目前最高处理封包的ID。highest_packet_id=0;}{action=$1;time=$2;node_1=$3;node_2=$4;type=$5;flow_id=$8;node_1_address=$9;node_2_address=$10;seq_no=$11;packet_id=$12;#记录目前最高的packetIDif(packet_idhighest_packet_id)highest_packet_id=packet_id;#记录封包的传送时间if(start_time[packet_id]==0)start_time[packet_id]=time;#记录CBR(flow_id=2)的接收时间if(flow_id==2&&action!=d){if(action==r){end_time[packet_id]=time;}}else{#把不是flow_id=2的封包或者是flow_id=2但此封包被drop的时间设为-1end_time[packet_id]=-1;}}END{#当资料列全部读取完后,开始计算有效封包的端点到端点延迟时间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(startend)printf(%f%f\n,start,packet_duration);}}吞吐量awk代码measure-throughput.awk:BEGIN{init=0;i=0;}{action=$1;time=$2;node_1=$3;node_2=$4;src=$5;pktsize=$6;flow_id=$8;node_1_address=$9;node_2_address=$10;seq_no=$11;packet_id=$12;if(action==r&&node_1==2&&node_2==3&&flow_id==2){pkt_byte_sum[i+1]=pkt_byte_sum[i]+pktsize;if(init==0){start_time=time;init=1;}end_time[i]=time;i=i+1;}}END{#为了画图好看,把第一笔记录的throughput设为零,以表示传输开始printf(%.2f\t%.2f\n,end_time[0],0);for(j=1;ji;j++){th=pkt_byte_sum[j]/(end_time[j]-start_time)*8/1000;printf(%.2f\t%.2f\n,end_time[j],th);}#为了画图好看,把第后一笔记录的throughput再设为零,以表示传输结束printf(%.2f\t%.2f\n,end_time[i-1],0);}抖动率awk代码measure-jitter.awk:BEGIN{#程序初始化old_time=0;old_seq_no=0;i=0;}{action=$1;time=$2;node_1=$3;node_2=$4;type=$5;flow_id=$8;node_1_address=$9;node_2_address=$10;seq_no=$11;packet_id=$12;#判断是否为n2传送到n3,且封包型态为cbr,动作为接受封包if(node_1==2&&node_2==3&&type==cbr&&action==r){#求出目前封包的序号和上次成功接收的序号差值dif=seq_no-old_seq_no;#处理第一个接收封包if(dif==0)dif=1;#求出jitterjitter[i]=(time-old_time)/dif;seq[i]=seq_no;i=i+1;old_seq_no=seq_no;old_time=time;}}END{for(j=1;ji;j++)printf(%d\t%f\n,seq[j],jitter[j]);}4.模拟结果从丢包率、时延、吞吐量和抖动率的变化图中,可以看出当丢包率增加时,端到端之间的时延也在增加,而吞吐量则下降,丢包率、时延和吞吐量在表示网络性能的好坏时有一定的关系。在

1 / 19
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功