NS2网络仿真
来源:互联网 发布:windows 设备管理中心 编辑:程序博客网 时间:2024/05/18 11:12
- 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 ns2export 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 $tcpset 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 $udpset 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)算法的动态路由方式#则设定路由的方式为DVif {$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 $tcpset 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仿真实验-多媒体和无线网络通信 柯志亨
- ns2网络仿真5
- NS2网络仿真
- ns2与网络仿真( 转载)
- 大话ns2网络仿真2
- 大话ns2网络仿真3
- 大话ns2网络仿真4
- NS2网络仿真的过程
- ns2 网络仿真工具具体安装步骤
- 基于免费软件ns2的网络仿真
- NS2网络仿真程序一般结构
- NS2仿真:使用NS仿真软件模拟简单网络模型
- NS2仿真
- NS2仿真
- 基于NS2的网络路由协议仿真(AODV、COPE+AODV)
- Windows平台下NS2网络仿真环境的搭建
- NS2网络仿真环境的搭建和使用
- NS2学习路程---1NS仿真创建网络基本框架
- Windows平台下NS2网络仿真环境的搭建
- Educational Codeforces Round 23 C. Really Big Numbers
- WINDOWS相关软件下载链接
- android dm-verity 功能
- Spark多文件输出(MultipleTextOutputFormat)
- React常见问题记录
- NS2网络仿真
- php获取数组长度的方法+实例
- 浅析Apache Spark Caching和Checkpointing
- mui 总页面
- python学习群发邮件
- HashMap的实现原理-博客总结
- mui 地址管理
- 架构设计:负载均衡层设计方案(2)——Nginx安装
- 移植搭建阿里云linux服务器