NS2网络仿真

您所在的位置:网站首页 广元卫生人才网招聘 NS2网络仿真

NS2网络仿真

2023-10-03 05:47| 来源: 网络整理| 查看: 265

NS2安装与配置TCP/UDP比较仿真静态/动态路由仿真

1.安装与配置 1.1更新系统

sudo apt-get update #更新源列表 sudo apt-get upgrade #更新已经安装的包 sudo apt-get dist-upgrade #更新软件,升级系统

1.2安装ns2需要的几个包

sudo apt-get install build-essential sudo apt-get install tcl8.5 tcl8.5-dev tk8.5 tk8.5-dev #for tcl and tk sudo apt-get install libxmu-dev libxmu-headers #for nam

1.3下载安装包 官网下载地址(http://www.isi.edu/nsnam/ns/nsbuild.html#allinone) 下载allinone,将下载得到的压缩包放到自己指定的位置即可。

1.4解压安装包,并进行安装

tar xvfz ns-allinone-2.35.tar.gz cd ns-allinone-2.35 sudo ./install #进行安装

第一次安装报错: linkstate/ls.h:137:20: note: use ‘this->erase’ instead make: * [linkstate/ls.o] Error 1 Ns make failed!

修改ls文件:ns-2.35/linkstate/ls.h 第137行 void eraseAll() { erase(baseMap::begin(), baseMap::end()); } 改为:void eraseAll() { this->erase(baseMap::begin(), baseMap::end()); } 保存后

sudo ./install #重新安装顺利完成

1.5配置环境变量

gedit ~/.bashrc

(不是空白文件) 在文件末尾添加 :

# add path for ns2 export PATH=”$PATH:/home/安装文件夹名/ns-allinone-2.35/bin:/home/安装文件夹名/ns-allinone-2.35/tcl8.5.10/unix:/home/安装文件夹名/ns-allinone-2.35/tk8.5.10/unix” export LD_LIBRARY_PATH=”$LD_LIBRARY_PATH:/home/安装文件夹名/ns-allinone-2.35/otcl-1.14:/home/安装文件夹名/ns-allinone-2.35/lib” export TCL_LIBRARY=”$TCL_LIBRARY:/home/安装文件夹名/ns-allinone-2.35/tcl8.5.10/library”

1.6验证ns2安装

关闭终端,重启终端,输入ns,出现%,说明ns2安装成功。 注意:环境变量配错的话,会提示 程序“ns”尚未安装。 您可以使用以下命令安装: sudo apt-get install ns2” 请勿通过该命令安装,还是回到1.5修改环境变量吧!

1.7安装nam

进入nam目录:

cd ns-allinone-2.35/nam-1.15

进入后

sudo ./configure

,然后

sudo make

注意,此处会出错

提示为“installation of tcl seems incomplete or can’t be found automatically”忘记截图了

解决方法: sudo ./configure –with-tcl=/home/用户目录/文件存放目录/ns-allinone-2.35/tcl8.5.10 –with-tcl-ver=8.5.10 –with-tk=/home/用户目录/文件存放目录/ns-allinone-2.35/tk8.5.10 –with-tk-ver=8.5.10 最后

sudo make install

命令行输入nam弹出nam console说明nam安装成功。

这里写图片描述

注意:如果通过“sudo apt-get install nam”安装的nam,执行nam命令会报异常 “段错误,核心文件已转储” 遇到该问题的可以“sudo apt-get remove –purge nam”卸载nam及其配置后按1.7进行安装。

1.8测试simple.tcl

cd ns-allinone-2.35/ns-2.35/tcl/ex/ ns simple.tcl

显示下图则全部安装成功! 这里写图片描述

上述安装过程参考博客: Ubuntu 16.04 安装ns2.35+nam

2.TCP/UDP比较

2.1网络结构图

这里写图片描述

2.2实验解释

① 网络环境包含两个传输节点s1,s2,路由器r和数据接收端d; ② S1到r之间与s2到r之间的网络频宽都是2Mbps,传递延迟时间都是10ms。网络结构的频宽瓶颈是在r到d之间,频宽为1.7Mbps,传递延迟为20ms。 ③ 所有链路的管理机制都是DropTail,且r到d之间的最大队列长度是10个封包的长度; ④ 在s1与d之间会有一条FTP的联机,FTP应用程序构建在TCP纸上,所以必须先建立一条FTP的联机,因此在s1上使用TCP agent产生“tcp”来发送TCP的封包;在目的地d使用TCPsink Agent产生“sink”来接收TCP的数据,并产生回复封包(ACK)返回发送端; ⑤ 在s2与d之间有一条固定的传输速率的联机,CBR应用程序的结构在UDP之上,为此必须在s2使用UDP agent来产生,“udp”来发送UDP封包,在d上用Null Agent 来产生“sink”,以接收由s2传送过来的UDP封包。 ⑥ CBR是在0.1s开始发送,4.5s结束传输;FTP是在1.0s开始发送,4.0s结束传输。

2.3源代码分析

#产生一个仿真对象 set ns [new Simulator] #定义两种颜色,一种模拟TCP,一种模拟UDP $ns color 1 Blue $ns color 2 Red #nam文件 set nf [open tcp_udp.nam w] $ns namtrace-all $nf #追踪文件(日志) set nd [open tcp_udp.tr w] $ns trace-all $nd #定义结束程序 proc finish {} { global ns nf nd $ns flush-trace close $nf close $nd exec nam out.nam & exit 0 } #建立源节点 set s1 [$ns node] set s2 [$ns node] #路由器 set r [$ns node] #目的节点 set d [$ns node] #建立链路,droptail的队列管理方式 $ns duplex-link $s1 $r 2Mb 10ms DropTail $ns duplex-link $s2 $r 2Mb 10ms DropTail $ns duplex-link $r $d 1.7Mb 20ms DropTail #设置r到d之间Queue Limit为10个封包大小 $ns queue-limit $r $d 10 #建立nam中的位置关系 $ns duplex-link-op $s1 $r orient right-down $ns duplex-link-op $s2 $r orient right-up $ns duplex-link-op $r $d orient right # 观测r到d之间queue的变化 $ns duplex-link-op $r $d queuePos 0.5 #建立一条TCP的联机 set tcp [new Agent/TCP] $ns attach-agent $s1 $tcp set sink [new Agent/TCPSink] $ns attach-agent $d $sink $ns connect $tcp $sink #nam中,TCP的联机会以蓝色表示 $tcp set fid_ 1 #在TCP联机之上建立FTP应用程序 set ftp [new Application/FTP] $ftp attach-agent $tcp $ftp set type_ FTP #建立udp联机 set udp [new Agent/UDP] $ns attach-agent $s2 $udp set null [new Agent/Null] $ns attach-agent $d $null $ns connect $udp $null #udp红色 $udp set fid_ 2 #在UDP联机之上建立CBR应用程序 set cbr [new Application/Traffic/CBR] $cbr attach-agent $udp $cbr set type_ CBR #设置包大小速率 $cbr set packet_size_ 1000 $cbr set rate_ 1mb $cbr set random_ false #设置开始结束时间 $ns at 0.1 "$cbr start" $ns at 1.0 "$ftp start" $ns at 4.0 "$ftp stop" $ns at 4.5 "$cbr stop" #结束TCP联机 $ns at 4.5 "$ns detach-agent $s1 $tcp ; $ns detach-agent $d $sink" #结束模拟 $ns at 5.0 "finish" #执行模拟 $ns run

2.4执行结果

这里写图片描述

3.静态/动态路由(动态路由使用距离矢量路由算法)

3.1网络拓扑 这里写图片描述

3.2实验分析

该试验主要观察当链路状态发生变化时,使用静态路由和动态路由的差异性。 ① 结点n0会使用FTP将数据传送给n4,传送时间为0.1~3.0s; ② 在1.0s时,链路n1到n3发生问题,数据无法从n1到n3之间的链路传送; ③ 在2.0s时,链路n1到n3问题解决,数据又可以从此链路传送。

3.3源代码分析

#产生一个仿真对象 set ns [new Simulator] #若是使用者有指定使用距离矢量(distance vector)算法的动态路由方式 #则设定路由的方式为DV if {$argc==1} { set par [lindex $argv 0] if {$par=="DV"} { $ns rtproto DV } } #以藍色表示所传送的封包 $ns color 1 Blue #nam文件 set file1 [open out.nam w] $ns namtrace-all $file1 #結束程序 proc finish {} { global ns file1 $ns flush-trace close $file1 exec nam routing.nam & exit 0 } #创建五个结点 set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node] set n4 [$ns node] #设置链路 $ns duplex-link $n0 $n1 0.5Mb 10ms DropTail $ns duplex-link $n1 $n2 0.5Mb 10ms DropTail $ns duplex-link $n1 $n3 0.5Mb 10ms DropTail $ns duplex-link $n3 $n4 0.5Mb 10ms DropTail $ns duplex-link $n3 $n2 0.5Mb 10ms DropTail #设定在nam中的位置关系 $ns duplex-link-op $n0 $n1 orient right $ns duplex-link-op $n1 $n2 orient right $ns duplex-link-op $n1 $n3 orient down $ns duplex-link-op $n3 $n4 orient right $ns duplex-link-op $n3 $n2 orient right-up #建立TCP联机 set tcp [new Agent/TCP] $tcp set fid_ 1 $ns attach-agent $n0 $tcp set sink [new Agent/TCPSink] $ns attach-agent $n4 $sink $ns connect $tcp $sink #建立FTP联机 set ftp [new Application/FTP] $ftp attach-agent $tcp $ftp set type_ FTP #设定在1.0秒時,n1到n3间的链路出现问题 $ns rtmodel-at 1.0 down $n1 $n3 #设定在2.0秒時,n1到n3間的链路又恢复正常 $ns rtmodel-at 2.0 up $n1 $n3 #在0.1秒時,FTP开始传送数据 $ns at 0.1 "$ftp start" #在3.0秒時,结束传送数据 $ns at 3.0 "finish" #模拟开始 $ns run

3.4实验结果

静态路由: 这里写图片描述

这里写图片描述

DV动态路由

这里写图片描述

这里写图片描述

参考书籍:

NS2仿真实验-多媒体和无线网络通信 柯志亨



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3