为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

NS-2无师自通

2011-10-02 30页 doc 238KB 17阅读

用户头像

is_934103

暂无简介

举报
NS-2无师自通网络仿真利器NS-2无师自通七天速成系列Ⅰ: NS-2简介与实验环境的安装 网络仿真利器NS-2无师自通七天速成系列Ⅰ: NS-2简介与实验环境的安装 近年来,网络通信技术日新月异,网络技术的研究炙手可热,促进人们不断的提高研究水平,更新研究技术,增加研究手段。目前网络通信的研究一般分为以下三种方式:(1)理论研究,(2)网络模拟,(3)试验测试。而网络模拟是目前网络通信研究中一种重要的方法。而NS-2是进行网络仿真最流行的软件之一,已广泛被科研院所和各大高校用于进行网络分析、研究和教学。 1.简介     NS-2(Netw...
NS-2无师自通
网络仿真利器NS-2无师自通七天速成系列Ⅰ: NS-2简介与实验环境的安装 网络仿真利器NS-2无师自通七天速成系列Ⅰ: NS-2简介与实验环境的安装 近年来,网络通信技术日新月异,网络技术的研究炙手可热,促进人们不断的提高研究水平,更新研究技术,增加研究手段。目前网络通信的研究一般分为以下三种方式:(1)理论研究,(2)网络模拟,(3)试验测试。而网络模拟是目前网络通信研究中一种重要的方法。而NS-2是进行网络仿真最流行的软件之一,已广泛被科研院所和各大高校用于进行网络分析、研究和教学。 1.简介     NS-2(Network Simulator Version 2)最早来源于1989年哥伦比亚大学开发的Real Network Simulator项目,是一款开源免费的网络模拟软件。目前NS-2 可用于仿真各种不同的通信网络。已经实现的仿真模块有:网络传输,如TCP 和UDP;业务源流量产生器,如FTP、Telnet、Web CBR 和VBR;路由队列管理机制,如Droptai、RED 和CBQ;路由算法,如Dijkstra,以及无线网络的WLAN,Ad hoc 路由,移动IP 和卫星通信网络等。NS-2 也为进行局域网的仿真而实现了多播以及一些MAC 子层协议。 2. NS-2试验环境的安装与配置 NS-2需要在linux操作系统下运行,然而大多数人对linux操作系统不太熟悉,更习惯于windows操作系统,所以就需要把NS-2安装在windows平台下。 本实验环境的配置工具如下:Winxp+ VMware Workstation6+RedHat linux+ ns-allinone-2.30. 2.1 Winxp下安装VMware Workstation6 2.2启动VMware Workstation6,新建虚拟机,在新建的虚拟机中选择Red linux 5,安装linux系统. 插入系统盘,进行启动,系统自动的会找到未分区的预留空间进行安装,按照提示进行安装.在分区的过程中,建议划出一个2倍于内存的交换类型空间(swap类型),一个100M的ex3类型的"/home"空间,剩下的全部分给ex3类型的"/"根空间。分区采用自动分区,分区如下: 在安装的过程中,要选择开发的组件,默认是不安装的,刚开始不太熟悉,可以选择全部安装。然后按照提示一步步的安装即可。   注意:在安装linux过程中要注意以下两点:第一,在虚拟机下安装,一定要选择自定义模式,然后选择硬盘类型为IDE类型,否则无法安装成功,第二,一定要在linux系统的安装过程中,要选择自定义方式,安装需要的软件,包括编辑软件。第三,配置linux环境有三种选择,直接安装linux系统,windows+模拟环境cygwin和windows+虚拟机+linux下安装。如果出于学习考虑,建议采用第三种方法,如果真正的去做实验建议采用第一种方法。当然,我们也可以选择不安装,而使用模拟环境cygwin来模拟linux系统,如果你要真正的学习网络模拟的话,不建议采用这中方法。  2.3在linux环境下安装NS-2 假设你已经安装好linux系统,下面开始NS-2模拟环境的安装与配置。NS-2软件建议选择allinone (即all in one).此处和以后的试验环境我们使用的是ns-allinone-2.30。将ns-allinone-2.30.tar.gz 文件放在当前用户的home下,如果你是从网络上下载,一般默认是在这个目录下,你可以检查下;如果你通过其他方式,本实验是通过U盘的方式,把文件复制到该目录中。 2.3.1安装ns-2 如果是root用户的显示为“主机名#”,非root用户显示为“主机名$".果是root用户,你的home目录为/root,非root用户的home目录为/home/用户名。 命令说明:$cd (转到home目录下),$tar zxf ns-allione-2.30.tar.gz(解压软件包)$cd ns-allinone-2.30 (进入ns-allinone-2.30目录下) $./install    (运行安装命令)   2.3.2设置全局路径变量 上一步的安装成功后,最后输出部分会提示你必须设置三个全局变量path,ld_library_path和tcl_library.在自己的根目录下编辑终端配置文件 .bashrc,注意要带"."开头, .bashrc是bash终端的配置文件,在Linux中它是隐藏文件,一般用ls命令看不出来,但可以采用vi命令编辑该文件:   $cd $vi .bashrc (用linux系统提供的vi编辑器来编辑 .bashrc文件) 将光标移动到最后一行,按下insert键进行插入 export NS_HOME=~/ns-allinone-2.30 export PATH=$NS_HOME/tcl8.4.13/unix:$NS_HOME/tk8.4.13/unix:$NS_HOME/bin:$PATH export LD_LIBRARY_PATH=$NS_HOME/tcl8.4.13/unix:$NS_HOME/tk8.4.13/unix:$NS_HOME/otcl-1.12:$NS_HOME/vlib:$LD_LIBRARY_PATH export TCL_LIBRARY=$NS_HOME/tcl8.4.13/library 在设置的过程中一定要细心。export后有一个空格,其他地方是以”:”来分割的。”~/“home目录,你也可以不用设置这个变量都是可以的,对于具体的版本中包含软件版本不同,可参看上面的图和下边的脚本进行相应放入更改。 编辑结束,按键盘上的退出键esc:退出插入模式,再输入“:wq”存盘退出.  2.3.3 简单测试 打开一个新终端 输入ns回车,在%号后输入空格+puts+空格+"hello world",如果显示 hello world 则配置成功。否者查找原因重新配置。 如有问题请发邮件询问与技术支持:duankesong@126.com 网络仿真利器NS-2无师自通七天速成系列Ⅱ: NS-2实例编写  安装NS-2后,就可以运行该软件了。NS-2有两种运行方式,第一种是“脚本方式”,假设这里有个已编好的文件example.tcl文件,通过在linux控制端输入 ns example.tcl就可以运行该脚本了。第二种方法就是“命令行方式”,通过在linux系统下输入ns进入NS-2模拟环境。然后输入各种指令交互的运行。 1.编写一个tcl脚本一般分为以下几个步骤: 1)        创建模拟器对象,用来定义和控制模拟过程。在这个过程中,首先创建一个simulator 对象。 2)        设置跟踪文件 3)        创建网络拓扑结构。 4)        配置节点属性。 5)        创建拓扑结构 6)        设置代理和应用层协议,并进行绑定。 7)        使用模拟器对象的at过程设置节点事件和时间的对应关系。 8)        使用模拟器对象的run过程开始模拟。 9)        结果分析。模拟结束后,将得到保存模拟过程的trace文件,接下来的主要工作就是对于这个结果文件根据需求进行数据分析,同时可以用gnuplot等画图工具直观的显示数据分析结果。 2,下边是一个实例。新建一个文件,保存为example.tcl [Tcl Script] # 产生一个仿真的对象 set ns [new Simulator]   #针对不同的资料流定义不同的颜色,这是要给NAM用的 $ns color 1 Blue $ns color 2 Red   #开启一个NAM trace file set nf [open out.nam w] $ns namtrace-all $nf   #开启一个trace file,用来记录封包传送的过程 set nd [open out.tr w] $ns trace-all $nd   #定义一个结束的程序 proc finish {} {         global ns nf nd         $ns flush-trace         close $nf         close $nd         #以背景执行的方式去执行NAM         exec nam out.nam &         exit 0 }   #产生四个网络节点 set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node]   #把节点连接起来 $ns duplex-link $n0 $n2 2Mb 10ms DropTail $ns duplex-link $n1 $n2 2Mb 10ms DropTail $ns duplex-link $n2 $n3 1.7Mb 20ms DropTail   #设定ns2到n3之间的Queue Size为10个封包大小 $ns queue-limit $n2 $n3 10   #设定节点的位置,这是要给NAM用的 $ns duplex-link-op $n0 $n2 orient right-down $ns duplex-link-op $n1 $n2 orient right-up $ns duplex-link-op $n2 $n3 orient right   #观测n2到n3之间queue的变化,这是要给NAM用的 $ns duplex-link-op $n2 $n3 queuePos 0.5   #建立一条TCP的联机 set tcp [new Agent/TCP] $tcp set class_ 2 $ns attach-agent $n0 $tcp set sink [new Agent/TCPSink] $ns attach-agent $n3 $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 $n1 $udp set null [new Agent/Null] $ns attach-agent $n3 $null $ns connect $udp $null #在NAM中,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   #设定FTP和CBR资料传送开始和结束时间 $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 $n0 $tcp ; $ns detach-agent $n3 $sink"   #在仿真环境中,5秒后去呼叫finish来结束仿真(这样要注意仿真环境中 #的5秒并不一定等于实际仿真的时间 $ns at 5.0 "finish"   #执行仿真 $ns run   3,实验结果与数据分析如下:     仿真结束后,会产生两个档案,一个是out.nam,这是给NAM用的,用来把仿真的过程用可视化的方式呈现出来,这可以让使用者用”看”的方式去了解封包传送是如何从来源端送到接收端。另一个档案是out.tr,这个档案记录了仿真过程中封包传送中所有的事件,例如第一笔记录是一个CBR的封包,长度为1000bytes,在时间0.1秒的时候,从n1传送到n2。这个档案对我们做效能分析很重要,所以要先对这个档案的格式做仔细的介绍。   + 0.1   1 2 cbr 1000 ------- 2 1.0 3.1 0 0 - 0.1   1 2 cbr 1000 ------- 2 1.0 3.1 0 0 + 0.108 1 2 cbr 1000 ------- 2 1.0 3.1 1 1 - 0.108 1 2 cbr 1000 ------- 2 1.0 3.1 1 1 r 0.114 1 2 cbr 1000 ------- 2 1.0 3.1 0 0 + 0.114 2 3 cbr 1000 ------- 2 1.0 3.1 0 0 - 0.114 2 3 cbr 1000 ------- 2 1.0 3.1 0 0 + 0.116 1 2 cbr 1000 ------- 2 1.0 3.1 2 2 - 0.116 1 2 cbr 1000 ------- 2 1.0 3.1 2 2 r   0.122 1 2 cbr 1000 ------- 2 1.0 3.1 1 1 + 0.122 2 3 cbr 1000 ------- 2 1.0 3.1 1 1 .................................................................   每一笔记录的开始都是封包事件发生的原因,若是r则表示封包被某个节点所接收,若是+则表示进入了队列,若是-则表示离开队列,若是d则表示封包被队列所丢弃。接着的第二个字段表示的是事件发生的时间;字段三和字段四表示事件发生的地点(从from node到to node);字段五表示封包的型态;字段六是封包的大小,字段七是封包的旗标标注;字段八表示封包是属于那一个资料流;字段九和字段十是表示封包的来源端和目的端,这两个字段的格式是a.b,a代表节点编号,b表示埠号(port number);字段十一表示封包的序号;最后字段十二表示封包的id。以前面trace file的第一笔为例,意思就是说有一个封包pakcet id为0,资料流id为2,序号为0,长度为1000 bytes,型态为CBR,它是从来源端1.0要到目的地3.1,在时间0.1秒的时候,从节点1进入了节点2的队列中。 网络仿真利器NS-2无师自通七天速成系列Ⅲ:Tcl和Otcl语言 Ns-2的实现是由表示层和实现层。实现层:采用C++对象,方便协议和算法的实现,提高执行效率;表示层:采用OTcl对象,方便拓扑和节点属性的修改,提高仿真便利性。 语法说明: Tcl只支持”字符串”一种数据结构,一种分割符就是空格 1、基本命令格式: Command arg arg1 arg2 arg3 一个Tcl命令是由空格符分割的关键字所组成。其中,command是命令名称或者是一个Tcl过程名,其余都是该命令的参数。 一个Hello world!的例子: % puts stdout {Hello World!} 在这个例子,命令puts后面跟着两个参数,stdout 用来定义输入流。大括号把多个单词组成一个简单的参数。 2、变量: 用set命令进行定义。注意参数之间是一个空格进行分割。 Set 参数一, 参数二 参数一为变量名,参数二为变量的赋值。 用$命令来获取变量的值,具体格式为:$变量名,中间没有空格 用unset命令来删除变量,使用方式为unset 变量名1,变量名二,。。。。。 用info命令来查看变量是否存在, 3.   变量的组合和替代 变量的替代分为命令替代,又称欠套替代和反斜杠替代,与转移字符类似。 命令替代用中括号[]来实现。 反斜杠替代与转义字符的含义类似。 双引号组合把组合内容作为字符串来看待,中间不允许有替代出现,而大括号替代则可是有替代出现,两者都实现把一串命令组合为一组命令的作用 4   数学运算 支持数学运算和位运算和逻辑运算。用expr命令把表达式传递给解释器,如:expr 4*5 5. Tcl中用proc来定义过程,命令格式为: Proc 过程名 参数 过程体 过程名可以为任何字符,过程名和变量名没有任何冲突,为了习惯,过程名第一个字母大写。 参数多余一个用大括号组合,过程体多余一行也用大括号组合 过程体中的return可以省略。 6.流程控制命令 6.1,if 表达式 then 命令体1 else 命令体2 6.2,switch flags 表达式 条件一 命令体1 条件二 命令体2。。。default 命令体n 一般情况下的格式为组合格式: switch flags 表达式{ 条件一 {命令体1} 条件二 {命令体2}。。。default {命令体n}} 其中flags为表达式的匹式,有三种,-exact为默认的,为精确匹配 -glob为通配模式,*为任意字符,?为单个字符。 -regexp为正则表达式匹配,表达式为正则表达式。 6.3,for循环命令 For 初始化 测试 表达式 循环体 Foreach While 6.4,catch命令用来扑获错误 6.5 用break,continue,return 6,注释 # 来注释。最前注释一行,后边注释加分号和#如 ;# 7,数组 8,面向对象的tcl  在tcl中增加了对象的支持,如类的定义,继承与封装,构造和析构函数 网络仿真利器NS-2无师自通七天速成系列Ⅳ:NS-2网络控件及其   1,Simulator类 在NS-2中,每个模拟过程需要一个类对整个过程进行控制和管理。这个类就是simulator类。这个类封装了节点(note),链路(link),代理(agent),数据分组格式等。整个模拟过程通过创建一个模拟类对象开始,通过调用这个对象的各个过程实现创建节点,构建拓扑结构图,对模拟的各个方面进行配置,定义事件,根据定义的事件模拟整个网络的运行等。 创建一个模拟器类对象的格式为: Set ns [new simulator] 2,NS-2是一个事件驱动的模拟器,通常包括两部分:事件的触发时间和用来处理时间的功能函数的句柄。NS-2中模拟内部at过程的主要功能是在特定的时间调度事件处理函数处理事件。 Set ns [new simulator] $ns at 5.0 “handle_fun” $ns run Proc handle_fun{}{puts”this is the event handle function”} 目前事件调度程序有四种事件调度器,分别为:链式,堆式,时间队列式,和实时,其中时间队列式为默认的。 本节相关概念为: Set ns [new simulator] Set now[$ns now] $ns halt $ns run $ns at
/
本文档为【NS-2无师自通】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索