当前位置:文档之家› 数据通信实验报告

数据通信实验报告

电子科技大学实验报告实验一NS2的基础使用NS2是一种提供虚拟环境进行网络模拟仿真,能验证网络性能的正确性和进行相关性能测试的软件。

一、实验环境:Ubuntu 12.04/kernel 3.5GCC 4.6.3NS-2.33二、网络拓扑:实验共有6个节点,每个节点的连接情况如图所示。

其中节点N0、N2和节点N1、N2连接,N3、N4和N4、N5连接,N2和N3连接。

从0号节点到2号节点,带宽为2Mb,延时为10ms。

三、实践步骤:切换到用户根目录下cd ~建立自己的文件夹mkdir your_document_name进入刚刚新建的文件夹cd your_document_name新建一个TCL 脚本文件gedit your_TCL_file_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 $tracefile#打开NAM 追踪文件set namfile [open out.nam w]$ns namtrace-all $namfile#新建6 个节点set n0 [$ns node]set n1 [$ns node]set n2 [$ns node]set n3 [$ns node]set n4 [$ns node]set n5 [$ns node]#建立节点之间的链路,格式解释如下#duplex-link 双向链路可选选项(duplex-link,simple-link 单向链路)#$n0 $n2 表明从0 号节点到2 号节点#2.0Mb 申明链路传输速率,可使用Mb,Kb,b#10ms 申明链路传输延迟#DropTail 队列类型$ns duplex-link $n0 $n2 2.0Mb 10ms DropTail#申明链路队列长度$ns queue-limit $n0 $n2 10$ns duplex-link $n1 $n2 2.0Mb 10ms DropTail$ns queue-limit $n1 $n2 10$ns duplex-link $n4 $n3 2.0Mb 10ms DropTail$ns queue-limit $n4 $n3 10$ns duplex-link $n3 $n2 1.0Mb 20ms DropTail$ns queue-limit $n3 $n2 10$ns duplex-link $n3 $n5 2.0Mb 10ms DropTail$ns queue-limit $n3 $n5 10#为NAM 创建节点位置描述,以第一个为例,2 号节点在0 号节点的右下方$ns duplex-link-op $n0 $n2 orient right-down$ns duplex-link-op $n1 $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 udp0 [new Agent/UDP]#将0 号节点Agent/UDP 绑定,以下类似$ns attach-agent $n0 $udp0set null2 [new Agent/Null]$ns attach-agent $n4 $null2#将Agent/UDP 及Agent/Null 节点进行连接$ns connect $udp0 $null2#设置Agent/UDP 包大小$udp0 set packetSize_ 1500#新建另一个UDP 连接set udp1 [new Agent/UDP]$ns attach-agent $n1 $udp1set null3 [new Agent/Null]$ns attach-agent $n5 $null3$ns connect $udp1 $null3$udp1 set packetSize_ 1500#在UDP 连接上新建一个CBR 应用set cbr0 [new Application/Traffic/CBR]$cbr0 attach-agent $udp0$cbr0 set packetSize_ 1500$cbr0 set rate_ 1.0Mb$cbr0 set random_ null#在第1 秒,$cbr0 服务开始发送$ns at 1.0 "$cbr0 start"#在第4 秒,$cbr0 服务停止发送$ns at 4.0 "$cbr0 stop"#在UDP 连接上新建一个CBR 应用set cbr1 [new Application/Traffic/CBR]$cbr1 attach-agent $udp1$cbr1 set packetSize_ 1500$cbr1 set rate_ 1.0Mb$cbr1 set random_ null$ns at 2.0 "$cbr1 start"$ns at 3.0 "$cbr1 stop"#定义一个'finish'过程用以处理模拟结束之后需要完成的动作proc finish {} {#申明使用外部变量global ns tracefile namfile val$ns at $val(stop) "$ns nam-end-wireless $val(stop)"#清空追踪区域$ns flush-trace#关闭trace 文件close $tracefile#关系nam 文件close $namfile#执行系统命令nam out.namexec nam out.nam &exit 0}#在val(stop)时间调用finish 过程$ns at $val(stop) "finish"$ns at $val(stop) "puts \"done\" ; $ns halt"#启动ns$ns run保存退出,在当前目录下,使用ns your_TCL_file_name.tcl 四、实践数据及分析结果:图一(开始传输数据)图二(开始发生丢包)图三(节点1停止发送数据)图四(节点5停止接收数据)图五(节点0停止发送数据)五、实验结论通过这次实验,我学会了在LINUX系统上安装NS2,同时更直观的理解了一旦发生丢包后,节点会等到队列中的数据发送完后才会接受新的数据包。

电子科技大学实验报告实验二实验二TCP性能仿真实验一、网络拓扑:三个节点:N0、N1、N2,节点N0和N1相连,N1和N2相连二、网络配置:TCP协议三、实验环境:Ubuntu 12.04/kernel 3.5GCC 4.6.3NS-2.33四、实践步骤:修改 代码Gedit ~ /ns-allinone-2.33/ns-2.33/tcp/(将窗口阈值一半变为的窗口阈值1/3——wt_)第一处:……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 f0 [open out.tr w]set tracefd [open wired.tr w]$ns trace-all $tracefdset nf [open wired.nam w]$ns namtrace-all $nf#record 过程用以记录仿真过程,然后通过使用XGRAPH 画图软件来表现proc record {} {global sink f0set ns [Simulator instance]#设置经过多少时间再次调用该过程set time 0.5#计数sink 节点接受了多少数据set bw [$sink set bytes_]#设置当前时间set now [$ns now]#计算网络流量并写入文件中puts $f0 "$now [expr $bw/$time*8/1000000]"#重置计数器$sink set bytes_ 0#循环调用该过程$ns at [expr $now+$time] "record"}$ns at 0.0 "record"proc finish {} {global ns tracefd nf val f0$ns at $val(stop) "$ns nam-end-wireless $val(stop)"$ns flush-traceclose $f0close $tracefdclose $nfexec nam wired.nam &exit 0}set n0 [$ns node]set n1 [$ns node]set n2 [$ns node]$ns duplex-link $n0 $n1 2Mb 10ms DropTail$ns duplex-link $n1 $n2 2Mb 10ms DropTail$ns queue-limit $n0 $n1 10$ns queue-limit $n1 $n2 10$ns duplex-link-op $n0 $n1 orient right$ns duplex-link-op $n1 $n2 orient rightset tcp [new Agent/TCP]$ns attach-agent $n0 $tcpset sink [new Agent/TCPSink]$ns attach-agent $n2 $sink$ns connect $tcp $sinkset ftp [new Application/FTP]$ftp attach-agent $tcp$ns at 0.5 "$ftp start"$ns at 4.5 "$ftp stop"$ns at $val(stop) "finish"$ns at $val(stop) "puts \"done\" ; $ns halt"$ns run保存并返回在当前目录调用ns your_TCL_file_name.tcl 观察nam 效果在当前目录调用graph out.tr -geometry 800x400完成上述内容之后,我们再将窗口阈值的一半改为3/4(这个值可以是任意),观察结果有什么不同。

相关主题