NS2无师自通.docx

上传人:b****6 文档编号:7870452 上传时间:2023-05-12 格式:DOCX 页数:45 大小:71.99KB
下载 相关 举报
NS2无师自通.docx_第1页
第1页 / 共45页
NS2无师自通.docx_第2页
第2页 / 共45页
NS2无师自通.docx_第3页
第3页 / 共45页
NS2无师自通.docx_第4页
第4页 / 共45页
NS2无师自通.docx_第5页
第5页 / 共45页
NS2无师自通.docx_第6页
第6页 / 共45页
NS2无师自通.docx_第7页
第7页 / 共45页
NS2无师自通.docx_第8页
第8页 / 共45页
NS2无师自通.docx_第9页
第9页 / 共45页
NS2无师自通.docx_第10页
第10页 / 共45页
NS2无师自通.docx_第11页
第11页 / 共45页
NS2无师自通.docx_第12页
第12页 / 共45页
NS2无师自通.docx_第13页
第13页 / 共45页
NS2无师自通.docx_第14页
第14页 / 共45页
NS2无师自通.docx_第15页
第15页 / 共45页
NS2无师自通.docx_第16页
第16页 / 共45页
NS2无师自通.docx_第17页
第17页 / 共45页
NS2无师自通.docx_第18页
第18页 / 共45页
NS2无师自通.docx_第19页
第19页 / 共45页
NS2无师自通.docx_第20页
第20页 / 共45页
亲,该文档总共45页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

NS2无师自通.docx

《NS2无师自通.docx》由会员分享,可在线阅读,更多相关《NS2无师自通.docx(45页珍藏版)》请在冰点文库上搜索。

NS2无师自通.docx

NS2无师自通

网络仿真利器NS-2无师自通七天速成系列Ⅰ:

NS-2简介与实验环境的安装

近年来,网络通信技术日新月异,网络技术的研究炙手可热,促进人们不断的提高研究水平,更新研究技术,增加研究手段。

目前网络通信的研究一般分为以下三种方式:

(1)理论研究,

(2)网络模拟,(3)试验测试。

而网络模拟是目前网络通信研究中一种重要的方法。

而NS-2是进行网络仿真最流行的软件之一,已广泛被科研院所和各大高校用于进行网络分析、研究和教学。

1.简介

   NS-2(NetworkSimulatorVersion2)最早来源于1989年哥伦比亚大学开发的RealNetworkSimulator项目,是一款开源免费的网络模拟软件。

目前NS-2可用于仿真各种不同的通信网络。

已经实现的仿真模块有:

网络传输协议,如TCP和UDP;业务源流量产生器,如FTP、Telnet、WebCBR和VBR;路由队列管理机制,如Droptai、RED和CBQ;路由算法,如Dijkstra,以及无线网络的WLAN,Adhoc路由,移动IP和卫星通信网络等。

NS-2也为进行局域网的仿真而实现了多播以及一些MAC子层协议。

2.NS-2试验环境的安装与配置

NS-2需要在linux操作系统下运行,然而大多数人对linux操作系统不太熟悉,更习惯于windows操作系统,所以就需要把NS-2安装在windows平台下。

本实验环境的配置工具如下:

Winxp+VMwareWorkstation6+RedHatlinux+ns-allinone-2.30.

2.1Winxp下安装VMwareWorkstation6

2.2启动VMwareWorkstation6,新建虚拟机,在新建的虚拟机中选择Redlinux5,安装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(即allinone).此处和以后的试验环境我们使用的是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目录下),$tarzxfns-allione-2.30.tar.gz(解压软件包)$cdns-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键进行插入

exportNS_HOME=~/ns-allinone-2.30

exportPATH=$NS_HOME/tcl8.4.13/unix:

$NS_HOME/tk8.4.13/unix:

$NS_HOME/bin:

$PATH

exportLD_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

exportTCL_LIBRARY=$NS_HOME/tcl8.4.13/library

在设置的过程中一定要细心。

export后有一个空格,其他地方是以”:

”来分割的。

”~/“home目录,你也可以不用设置这个变量都是可以的,对于具体的版本中包含软件版本不同,可参看上面的图和下边的脚本进行相应放入更改。

编辑结束,按键盘上的退出键esc:

退出插入模式,再输入“:

wq”存盘退出.

 2.3.3简单测试

打开一个新终端输入ns回车,在%号后输入空格+puts+空格+"helloworld",如果显示helloworld则配置成功。

否者查找原因重新配置。

如有问题请发邮件询问与技术支持:

duankesong@

网络仿真利器NS-2无师自通七天速成系列Ⅱ:

NS-2实例编写

 安装NS-2后,就可以运行该软件了。

NS-2有两种运行方式,第一种是“脚本方式”,假设这里有个已编好的文件example.tcl文件,通过在linux控制端输入nsexample.tcl就可以运行该脚本了。

第二种方法就是“命令行方式”,通过在linux系统下输入ns进入NS-2模拟环境。

然后输入各种指令交互的运行。

1.编写一个tcl脚本一般分为以下几个步骤:

1)       创建模拟器对象,用来定义和控制模拟过程。

在这个过程中,首先创建一个simulator对象。

2)       设置跟踪文件

3)       创建网络拓扑结构。

4)       配置节点属性。

5)       创建拓扑结构

6)       设置代理和应用层协议,并进行绑定。

7)       使用模拟器对象的at过程设置节点事件和时间的对应关系。

8)       使用模拟器对象的run过程开始模拟。

9)       结果分析。

模拟结束后,将得到保存模拟过程的trace文件,接下来的主要工作就是对于这个结果文件根据需求进行数据分析,同时可以用gnuplot等画图工具直观的显示数据分析结果。

2,下边是一个实例。

新建一个文件,保存为example.tcl

[TclScript]

#产生一个仿真的对象

setns[newSimulator]

 

#针对不同的资料流定义不同的颜色,这是要给NAM用的

$nscolor1Blue

$nscolor2Red

 

#开启一个NAMtracefile

setnf[openout.namw]

$nsnamtrace-all$nf

 

#开启一个tracefile,用来记录封包传送的过程

setnd[openout.trw]

$nstrace-all$nd

 

#定义一个结束的程序

procfinish{}{

       globalnsnfnd

       $nsflush-trace

       close$nf

       close$nd

       #以背景执行的方式去执行NAM

       execnamout.nam&

       exit0

}

 

#产生四个网络节点

setn0[$nsnode]

setn1[$nsnode]

setn2[$nsnode]

setn3[$nsnode]

 

#把节点连接起来

$nsduplex-link$n0$n22Mb10msDropTail

$nsduplex-link$n1$n22Mb10msDropTail

$nsduplex-link$n2$n31.7Mb20msDropTail

 

#设定ns2到n3之间的QueueSize为10个封包大小

$nsqueue-limit$n2$n310

 

#设定节点的位置,这是要给NAM用的

$nsduplex-link-op$n0$n2orientright-down

$nsduplex-link-op$n1$n2orientright-up

$nsduplex-link-op$n2$n3orientright

 

#观测n2到n3之间queue的变化,这是要给NAM用的

$nsduplex-link-op$n2$n3queuePos0.5

 

#建立一条TCP的联机

settcp[newAgent/TCP]

$tcpsetclass_2

$nsattach-agent$n0$tcp

setsink[newAgent/TCPSink]

$nsattach-agent$n3$sink

$nsconnect$tcp$sink

#在NAM中,TCP的联机会以蓝色表示

$tcpsetfid_1

 

#在TCP联机之上建立FTP应用程序

setftp[newApplication/FTP]

$ftpattach-agent$tcp

$ftpsettype_FTP

 

#建立一条UDP的联机

setudp[newAgent/UDP]

$nsattach-agent$n1$udp

setnull[newAgent/Null]

$nsattach-agent$n3$null

$nsconnect$udp$null

#在NAM中,UDP的联机会以红色表示

$udpsetfid_2

 

#在UDP联机之上建立CBR应用程序

setcbr[newApplication/Traffic/CBR]

$cbrattach-agent$udp

$cbrsettype_CBR

$cbrsetpacket_size_1000

$cbrsetrate_1mb

$cbrsetrandom_false

 

#设定FTP和CBR资料传送开始和结束时间

$nsat0.1"$cbrstart"

$nsat1.0"$ftpstart"

$nsat4.0"$ftpstop"

$nsat4.5"$cbrstop"

 

#结束TCP的联机(不一定需要写下面的程序代码来实际结束联机)

$nsat4.5"$nsdetach-agent$n0$tcp;$nsdetach-agent$n3$sink"

 

#在仿真环境中,5秒后去呼叫finish来结束仿真(这样要注意仿真环境中

#的5秒并不一定等于实际仿真的时间

$nsat5.0"finish"

 

#执行仿真

$nsrun

 

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则表示封包被队列所丢弃。

接着的第二个字段表示的是事件发生的时间;字段三和字段四表示事件发生的地点(从fromnode到tonode);字段五表示封包的型态;字段六是封包的大小,字段七是封包的旗标标注;字段八表示封包是属于那一个资料流;字段九和字段十是表示封包的来源端和目的端,这两个字段的格式是a.b,a代表节点编号,b表示埠号(portnumber);字段十一表示封包的序号;最后字段十二表示封包的id。

以前面tracefile的第一笔为例,意思就是说有一个封包pakcetid为0,资料流id为2,序号为0,长度为1000bytes,型态为CBR,它是从来源端1.0要到目的地3.1,在时间0.1秒的时候,从节点1进入了节点2的队列中。

网络仿真利器NS-2无师自通七天速成系列Ⅲ:

Tcl和Otcl语言

Ns-2的实现是由表示层和实现层。

实现层:

采用C++对象,方便协议和算法的实现,提高执行效率;表示层:

采用OTcl对象,方便拓扑和节点属性的修改,提高仿真便利性。

语法说明:

Tcl只支持”字符串”一种数据结构,一种分割符就是空格

1、基本命令格式:

Commandargarg1arg2arg3

一个Tcl命令是由空格符分割的关键字所组成。

其中,command是命令名称或者是一个Tcl过程名,其余都是该命令的参数。

一个Helloworld!

的例子:

%putsstdout{HelloWorld!

}

在这个例子,命令puts后面跟着两个参数,stdout用来定义标准输入流。

大括号把多个单词组成一个简单的参数。

2、变量:

用set命令进行定义。

注意参数之间是一个空格进行分割。

Set参数一,参数二参数一为变量名,参数二为变量的赋值。

用$命令来获取变量的值,具体格式为:

$变量名,中间没有空格

用unset命令来删除变量,使用方式为unset变量名1,变量名二,。

用info命令来查看变量是否存在,

3.  变量的组合和替代

变量的替代分为命令替代,又称欠套替代和反斜杠替代,与转移字符类似。

命令替代用中括号[]来实现。

反斜杠替代与转义字符的含义类似。

双引号组合把组合内容作为字符串来看待,中间不允许有替代出现,而大括号替代则可是有替代出现,两者都实现把一串命令组合为一组命令的作用

4  数学运算支持数学运算和位运算和逻辑运算。

用expr命令把表达式传递给解释器,如:

expr4*5

5. Tcl中用proc来定义过程,命令格式为:

Proc过程名参数过程体

过程名可以为任何字符,过程名和变量名没有任何冲突,为了习惯,过程名第一个字母大写。

参数多余一个用大括号组合,过程体多余一行也用大括号组合

过程体中的return可以省略。

6.流程控制命令

6.1,if表达式then命令体1else命令体2

6.2,switchflags表达式条件一命令体1条件二命令体2。

default命令体n

一般情况下的格式为组合格式:

switchflags表达式{条件一{命令体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),数据分组格式等。

整个模拟过程通过创建一个模拟类对象开始,通过调用这个对象的各个过程实现创建节点,构建拓扑结构图,对模拟的各个方面进行配置,定义事件,根据定义的事件模拟整个网络的运行等。

创建一个模拟器类对象的格式为:

Setns[newsimulator]

2,NS-2是一个事件驱动的模拟器,通常包括两部分:

事件的触发时间和用来处理时间的功能函数的句柄。

NS-2中模拟内部at过程的主要功能是在特定的时间调度事件处理函数处理事件。

Setns[newsimulator]

$nsat5.0“handle_fun”

$nsrun

Prochandle_fun{}{puts”thisistheeventhandlefunction”}

目前事件调度程序有四种事件调度器,分别为:

链式,堆式,时间队列式,和实时,其中时间队列式为默认的。

本节相关概念为:

Setns[newsimulator]

Setnow[$nsnow]

$nshalt

$nsrun

$nsat

3,节点note

在网络中将分布在不同地理位置的主机,交换机,路由器等网络设备在NS-2中统统抽象为一个节点,本节将介绍NS-2中节点的创建和配置方法。

根据网络节点之间通信方式的不同,分组的传输方式有两类,单播和多播。

单播节点的配置:

Setns[newsimulator]

Setn0[$nsnode]

一个单播节点是由地址分类器和端口分类器两个tcl对象组成的。

地址分类器主要判断分组的地址和转发分组到下一个接收器。

节点的地址模拟网络中的ip地址,有两种类型,默认为flat类型的,分类器中有一张shot表模拟网络中的路由表,一个shot码和一个节点地址相对应。

端口分类器的主要功能是按照分组的目的端口进行匹配,将分组传递给相应的agent对象。

多播节点的配置:

多播节点的配置,首先要把Multicast属性值设置为:

on,然后调用node过程创建多播节点。

创建一个多播节点的方法:

Setns[newSimulator-Multicaston]

Setn1[$nsnode]

注意多播结构是一对多的通信,一个多播分组在转发时,分组需要被转发给多个目标对象,这就要求多播节点能够生成该分组的多个拷贝,多播节点包含复制器(Replicator)对象,并使用其生成分组的拷贝。

多播节点主要是由多播分类器和复制器组成。

多播分类器根据源地址,和目的地址,将分组分类,富欧泊分类器内部保存了一张链式hash表,表的每一项包含源地址,多播目的地址,和slot码。

3.1节点的配置。

无线网了中的节点是移动节点,拥有不同于有限节点的各种特性。

所谓节点的配置就是在节点创建之前设定节点的各项属性,可是使用模拟器对象ns的内部过程node-config{}来配置节点的属性。

包括,所有节点的属性,无线节点的属性和卫星节点的配置。

与节点有关的命令

$nsnode[]配置节点的类型,默认为没有分层的flat类型。

$nodeid此命令是返回节点的id号。

$nodenode-addr此命令是返回节点的地址。

$nodereset此命令重新设置绑定于节点的代理。

$nodedetach将代理从这个节点上删除,然后在这个端口上绑定一个空代理。

$nodeattach

port_num>节点自动为其分配一个端口号,并将该代理绑定到节点上。

3.2链路(link)

链路层负责对物理层上传输的数据进行检错和纠错。

NS-2中的数据链路层同时实现了物理层,数据链路层和部分网络层的功能。

本节主要讲述如何将不同的节点连接起来。

完成整个网络拓扑的结构的构建。

因此,一个完整的网络拓扑包括节点的创建和节点的连接(用链路)两个部分,即节点和链路是组成网络哟拓扑的两个要素。

网络设备见的通信方式可以分为单工,半双工和全双工三种方式。

单工是数据只能沿一个方向传输。

任何时候都不能改变数据传输的方向,在NS-2中我们采用创建简单的单向链路simplex-link来进行模拟这种通信方式。

半双工通信方式中,数据可以单向传输,但必须交替进行。

不常用。

全双工通信放式中,数据可以同时双向传输。

在NS-2中我们通过创建双向链路duplex-link来进行模拟。

创建单向链路

Setns[newsimulator]

$nssimples-link

上述代码创建了一条node1到node2的单向链路,并且定义了链路的一下各项特性。

创建链路的带宽。

延时队列类型

创建双向链路

Setns[newsimulator]

$nsduplex-link

等价于

Setns[newsimula

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2