1、(6)测试:在终端输入ns。屏幕上出现%,说明安装成功了。二、构造模型并仿真网络吞吐量与时间的关系(1)我们确定基本模型是A主机经过节点B向节点C发送TCP包,AB和BC段都是1M的带宽。带宽加倍就是将AB和BC变成2M的,而链路加倍就是增加一个节点D,从而增加AD和DC段,A通过B和D节点向C发送数据,并且AB和BC,AD和DC的带宽都是1M的。(2)编写带宽加倍的脚本bandw.tcl如下set ns new Simulator ;#产生一个模拟的对象#定义数据流颜色$ns color 1 Red ;#1为红色#开启Trace跟踪文件,记录分组传送的过程set tracefile open
2、 bandwidth.tr w$ns trace-all $tracefile#开启NAM显示文件set namfile open bandwidth.nam w$ns namtrace-all $namfile#定义结束过程,关闭Trace文件和NAM显示文件,模拟结束时会进行调用proc finish global ns tracefile namfile $ns flush-trace close $tracefile close $namfile #以背景执行的方式去执行NAM exec nam bandwidth.nam & exit 0#定义节点n0n2 set n0 $ns no
3、deset n1 $ns nodeset n2 $ns node#定义节点间的双向链路(包括带宽、延时和队列的类型) $ns duplex-link $n0 $n1 4Mb 10ms DropTail$ns duplex-link $n1 $n2 4Mb 10ms DropTail#建立一个TCP连接set tcp new Agent/TCP ;#建立一个TCP发送代理$tcp set class_ 2$ns attach-agent $n0 $tcp ;#绑定TCP发送代理到节点n0set sink new Agent/TCPSink ;#建立一个TCP接收代理$ns attach-agen
4、t $n2 $sink ;#绑定TCP接收代理到节点n2$ns connect $tcp $sink ;#连接TCP发送代理和接收代理$tcp set fid_ 1#在TCP连接上建立FTP流set ftp new Application/FTP ;#建立一个FTP应用$ftp attach-agent $tcp ;#将FTP流应用绑定到TCP发送代理$ftp set type_ FTP#设置代理的启动和停止时间 $ns at 0.5 $ftp start ;#设定ftp流在0.5s开始$ns at 4.5 $ftp stop#设定ftp流在4.5s结束#在模拟结束时调用结束过程$ns at
5、5.0 finish#执行模拟$ns run编写链路加倍的脚本linkw.tcl如下#产生一个仿真的对象set tracefile open link.tr wset namfile open link.nam w#定义结束过程,关闭Trace文件和NAM显示文件,仿真结束时会进行调用 exec nam link.nam &$ns rtproto DV ;#告知simulator使用动态路由 Node set multiPath_ 1 ;#simulator中所有新的节点均使用多径#定义节点n0n3 set n3 $ns node$ns duplex-link $n0 $n1 2Mb 10ms
6、 DropTail$ns duplex-link $n0 $n3 2Mb 10ms DropTail$ns duplex-link $n1 $n2 2Mb 10ms DropTail$ns duplex-link $n3 $n2 2Mb 10ms DropTail$ns connect $tcp $sink ;$ftp attach-agent $tcp ;#执行模拟 在终端键入两条命令:ns bandwith.tcl 和ns linkwidth.tcl,之后会生成nam文件和trace文件。其中nam文件的图形如下:带宽加倍的nam动画链路加倍的nam动画(3)编写gawk程序,分析trac
7、e文件trace文件记录了仿真过程中事件的类型,事件发生的时间,分组的大小类型等等。通过编写gawk程序来分析trace文件,从而分析网络的性能。执行以上两条命令之后会生成bandwith.tr和linkwidth.tr ,这里我们编写了throught.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 =
8、 $11; packet_id = $12; if(action=r & (node_1=1 & node_2=2)|(node_1=3 & node_2=2) & flow_id=1) pkt_byte_sumi+1=pkt_byte_sumi+ pktsize; if(init=0) start_time = time; init = 1; end_timei = time; i = i+1; END #为了画图好看,把第一笔记录的throughput设为零,以表示传输开始 printf(%.2ft%.2fn, end_time0, 0); for(j=1 ; j band_th 将带宽加
9、倍的分析结果存储到文件band_th 中。通过命令 gawk -f throughput.awk link.tr flink_th将链路加倍的分析结果存储到文件flink_th中。我们因此得到了吞吐量与时间的关系的相关数据。在终端中输入gnuplot,启动gnuplot绘图环境。为了保证绘制的图片以.jpg格式的图片文件形式输出,先键入两条命令:set term jpeg #设置输出图片的格式set output band_th.jpg然后用以下命令将两条曲线画在一个坐标图中。plot “band_th”w l, plot “link_th”w l绘图如下:网络的吞吐量与时间关系图由Trace
10、文件的分析结果,我们可以看出,带宽加倍链路的网络吞吐量比链路加倍链路的网络吞吐量大。三、仿真网络吞吐量与数据包大小的关系以上是在TCP下仿真的,我们还使用同样的网络模型在UDP下分析了网络的吞吐量与UDP包大小的关系。(1)编写带宽加倍的Tcl脚本程序bandw.tcl如下#全局变量opt(rate)和过程getoptset opt(size) 0 ;#变量opt(rate)保存数据速率值proc getopt argc argv ;#过程getopt获取从命令行传递过来的数据值 global opt set opt(size) lindex $argv 0#建立一个模拟对象set ns ne
11、w Simulator#定义不同数据流的颜色$ns color 1 Blue$ns color 2 Red#开启Trace跟踪文件,记录分组传递的过程set tracefd open bandw.tr w$ns trace-all $tracefdset nf open bandw.nam w$ns namtrace-all $nf#定义结束过程,关闭Trace文件和NAM文件,模拟结束是进行调用 global ns tracefd nf close $tracefd close $nf#定义节点n0-n2#定义节点间的双向链路(包括带宽,延时和队列的类型)#调用过程getopt获取数据发送的
12、速率getopt $argc $argvputs opt(size)=$opt(size)#建立一个UDP连接set udp new Agent/UDP$ns attach-agent $n0 $udpset null new Agent/Null$ns attach-agent $n2 $null$ns connect $udp $null$udp set fid_ 2#在UDP连接代理上建立CBR流set cbr new Application/Traffic/CBR$cbr attach-agent $udp$cbr set type_ CBR$cbr set packet_size_
13、$opt(size)B ;#$opt(size) 设定包的大小 $cbr set rate_ 1900Kb #设置代理的启动和停止时间$cbr start$cbr stop#模拟结束是调用结束过程Start Simulation.链路加倍的Tcl脚本程序linkw.tcl如下set tracefd open linkw.tr wset nf open linkw.nam wNode set multiPath_ 1 ;$ns duplex-link $n0 $n1 1Mb 10ms DropTail$ns duplex-link $n1 $n2 1Mb 10ms DropTail$ns dup
14、lex-link $n0 $n3 1Mb 10ms DropTail$ns duplex-link $n3 $n2 1Mb 10ms DropTail#$cbr set type_ CBR$cbr set packet_size_ $opt(size) ;#设定包的大小 $cbr set rate_ 1900Kb ;#将速率设置为1900#$cbr set random_ false(2)编写gawk程序,分析trace文件运行以上两个Tcl脚本会生成两个trace文件bandw.tr和linkw.tr用throught.awk来分析以上脚本生成的trace文件,程序如下: event = $
15、1; time = $2; from_node = $3; to_node = $4; pkt_type = $5; pkt_size = $6; flag = $7; uid = $12; if(event= to_node=2 & pkt_type=cbr) pkt_byte_sumi+1=pkt_byte_sumi+(pkt_size-20); if(init=0) start_time=time; init=1; end_timei=time; i+; th=8*pkt_byte_sumi-1/(end_timei-1-start_time)/1000;%d %.2fn,rate, t
16、h);(3)编写shell脚本程序来控制包的大小变化通过shell脚本程序get_performb和get_performl,我们可以改变UDP包的大小,从而观察出在不同的包大小下的网络的吞吐量,这样就避免了手动重复改变包大小这一参数,程序如下:shell脚本程序get_performb#!/bin/shi=500while $i -le 2500 ; do ns bandw.tcl $i gawk -f throught.awk size=$i bandw.tr throught_b ;#存放数据 i=$($i+50) doneshell脚本程序get_performl ns linkw.t
17、cl $i gawk -f throught.awk size=$i linkw.tr throught_l ;从程序可以看出包大小的起始值是500B,步长为50B,终止点是2500B。在终端执行./get_performb可以分析bandw.tr,分析的数据存放在throught_b中;同理执行./get_performl可以分析bandw.tr, 分析的数据存放在throught_l中。然后我们就可以利用throught_b和throught_l中的数据进行绘图了。(4)绘图绘图程序用gnuplot工具绘图,在终端键入gnuplot, 启动gnuplot绘图环境,为了将图片以jpg格式输出
18、,我们有如下程序:gnuplot set term jpeg #设置图片输出的格式 set output throught.jpg set xlabe packetsize#设置图片的x和y轴的含义 set ylabe throughput plot throught_b w l,throught_l w l #绘图绘图如下:网络的吞吐量与UDP包大小的关系图从图中可以看出UDP包大小在1000B以下或在1850B以上时,两网络的吞吐两基本相同,但UDP包的大小超过1000B时,链路加倍网络的吞吐量急剧下降。并且在1000B到1850B之间带宽加倍的吞吐量一直高于链路加倍的吞吐量。综上分析了网络的吞吐量随时间的变化以及随包大小的变化,我们可以看出带宽加倍的吞吐量优于链路加倍的吞吐量。 .
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1