① 求NS2仿真无线局域网WLAN 802.11b仿真的源代码
NS是一种针对网络技术的源代码公开的、免费的软件模拟平台,研究人员使用它可以很容易的进行网络技术的开发,而且发展到今天,它所包含的模块已经非常丰富,几乎涉及到了网络技术的所有方面。所以,NS成了目前学术界广泛使用的一种网络模拟软件。在每年国内外发表的有关网络技术的学术论文中,利用NS给出模拟结果的文章最多,通过这种方法得出的研究结果也是被学术界所普遍认可的,此外,NS也可作为一种辅助教学的工具,已被广泛应用在了网络技术的教学方面。因此,目前在学术界和教育界,有大量的人正在使用或试图使用NS。
然而,对初学者来说,NS是非常难于掌握的,一般人从学习NS到上手至少需要半年多时间。原因是多方面的:一方面,NS内容庞杂,随软件所提供的手册更新不够快,初学者阅读起来非常困难;另一方面,使用NS还要掌握其它很多必备的相关知识以及相关工具,这会使初学者感到无从入手;有的使用者可能还不了解网络模拟的过程或是对NS软件的机制缺乏理解,这也影响了对NS的掌握。另外,不论在国外还是国内,还没有一本书能集中回答和解决这些问题,这也是NS难于被掌握的一个重要原因。
1、NS2简介
NS2(Network Simulator, version 2)是一种面向对象的网络仿真器,本质上是一个离散事件模拟器。由UC Berkeley开发而成。它本身有一个虚拟时钟,所有的仿真都由离散事件驱动的。目前NS2可以用于仿真各种不同的IP网,已经实现的一些仿真有:网络传输协议,比如TCP和UDP;业务源流量产生器,比如FTP, Telnet, Web CBR和VBR;路由队列管理机制,比如Droptail , RED和CBQ;路由算法,比如Dijkstra等。NS2也为进行局域网的仿真而实现了多播以及一些MAC 子层协议。
NS2使用C++和Otcl作为开发语言。NS可以说是Otcl的脚本解释器,它包含仿真事件调度器、网络组件对象库以及网络构建模型库等。事件调度器计算仿真时间,并且激活事件队列中的当前事件,执行一些相关的事件,网络组件通过传递分组来相互通信,但这并不耗费仿真时间。所有需要花费仿真时间来处理分组的网络组件都必须要使用事件调度器。它先为这个分组发出一个事件,然后等待这个事件被调度回来之后,才能做下一步的处理工作。事件调度器的另一个用处就是计时。NS是用Otcl和C++编写的。由于效率的原因,NS将数据通道和控制通道的实现相分离。为了减少分组和事件的处理时间,事件调度器和数据通道上的基本网络组件对象都使用C++写出并编译的,这些对象通过映射对Otcl解释器可见。
当仿真完成以后,NS将会产生一个或多个基于文本的跟踪文件。只要在Tcl脚本中加入一些简单的语句,这些文件中就会包含详细的跟踪信息。这些数据可以用于下一步的分析处理,也可以使用NAM将整个仿真过程展示出来。
2、使用NS进行网络仿真的方法和一般过程。
进行网络仿真前,首先分析仿真涉及哪个层次,NS仿真分两个层次:一个是基于OTcl编程的层次。利用NS已有的网络元素实现仿真,无需修改NS本身,只需编写OTcl脚本。另一个是基于C++和OTcl编程的层次。如果NS中没有所需的网络元素,则需要对NS进行扩展,添加所需网络元素,即添加新的C++和OTcl类,编写新的OTcl脚本。
假设用户已经完成了对NS的扩展,或者NS所包含的构件已经满足了要求,那么进行一次仿真的步骤大致如下:
(1)开始编写OTcl脚本。首先配置模拟网络拓扑结构,此时可以确定链路的基本特性,如延迟、带宽和丢失策略等。
(2)建立协议代理,包括端设备的协议绑定和通信业务量模型的建立。
(3)配置业务量模型的参数,从而确定网络上的业务量分布。
(4)设置Trace对象。NS通过Trace文件来保存整个模拟过程。仿真完后,用户可以对Trace文件进行分析研究。
(5)编写其他的辅助过程,设定模拟结束时间,至此OTcl脚本编写完成。
(6)用NS解释执行刚才编写的OTcl脚本。
(7)对Trace文件进行分析,得出有用的数据。
(8)调整配置拓扑结构和业务量模型,重新进行上述模拟过程。
NS2采用两级体系结构,为了提高代码的执行效率,NS2 将数据操作与控制部分的实现相分离,事件调度器和大部分基本的网络组件对象后台使用C++实现和编译,称为编译层,主要功能是实现对数据包的处理;NS2的前端是一个OTcl 解释器,称为解释层,主要功能是对模拟环境的配置、建立。从用户角度看,NS2 是一个具有仿真事件驱动、网络构件对象库和网络配置模块库的OTcl脚本解释器。NS2中编译类对象通过OTcl连接建立了与之对应的解释类对象,这样用户间能够方便地对C++对象的函数进行修改与配置,充分体现了仿真器的一致性和灵活性。
3、NS2的功能模块
NS2仿真器封装了许多功能模块,最基本的是节点、链路、代理、数据包格式等等,下面分别来介绍一下各个模块。
(1)事件调度器:目前NS2提供了四种具有不同数据结构的调度器,分别是链表、堆、日历表和实时调度器。
(2)节点(node):是由TclObject对象组成的复合组件,在NS2中可以表示端节点和路由器。
(3)链路(link):由多个组件复合而成,用来连接网络节点。所有的链路都是以队列的形式来管理分组的到达、离开和丢弃。
(4)代理(agent):负责网络层分组的产生和接收,也可以用在各个层次的协议实现中。每个agent连接到一个网络节点上,由该节点给它分配一个端口号。
(5)包(packet):由头部和数据两部分组成。一般情况下,packet只有头部、没有数据部分。
4、NS2的软件构成
NS2包含Tcl/Tk, OTcl, NS,Tclcl。其中Tcl是一个开放脚本语言,用来对NS2进行编程;Tk是Tcl的图形界面开发工具,可帮助用户在图形环境下开发图形界面;OTcl是基于Tcl/Tk的面向对象扩展,有自己的类层次结构;NS2为本软件包的核心,是面向对象的仿真器,用C++编写,以OTcl解释器作为前端;Tclcl则提供NS2和OTcl的接口,使对象和变量出现在两种语言中。为了直观的观察和分析仿真结果,NS2 提供了可选的Xgraphy、可选件Nam。
5、NS现有的仿真元素
从网络拓扑仿真、协议仿真和通信量仿真等方面介绍NS的相应元素:
(1)网络拓扑主要包括节点、链路。NS的节点由一系列的分类器(Classifier,如地址分类器等)组成,而链路由一系列的连接器(Connector)组成。
(2)在节点上,配置不同的代理可以实现相应的协议或其它模型仿真。如NS的TCP代理,发送代理有:TCP,TCP/Reno,TCP/Vegas,TCP/Sack1,TCP/FACK,TCP/FULLTCP等,接收代理有:TCPSINK,TCPSINK/DELACK。TCPSINK/SACK1,TCPSINK/SACK1/DELACK等。此外,还提供有UDP代理及接收代理Null(负责通信量接收)、Loss Monitor(通信量接收并维护一些接收数据的统计)。
(3)网络的路由配置通过对节点附加路由协议而实现。NS中有三种单播路由策略:静态、会话、动态。
(4)在链路上,可以配置带宽、时延和丢弃模型。NS支持:Drop-tail(FIFO)队列、RED缓冲管、CBO(包括优先权和Round-robin 调度)。各种公平队列包括:FQ,SFQ,DRR等。
(5)通信量仿真方面,NS提供了许多通信应用,如FTP,它产生较大的峰值数据传输;Telnet则根据相应文件随机选取传输数据的大小。此外,NS提供了四种类型的通信量产生器:EXPOO,根据指数分布(On/Off)产生通信量,在On阶段分组以固定速率发送,Off阶段不发送分组,On/Off的分布符合指数分布,分组尺寸固定;POO,根据Pareto分布(On/Off)产生通信量,它能用来产生长范围相关的急剧通信量;CBR,以确定的速率产生通信量,分组尺寸固定,可在分组间隔之间产生随机抖动;Traffic Trace,根据追踪文件产生通信量。
② 如何在ubuntu系统下安装NS2网络仿真软件
下载 官方ftp:ftp://ftp.soest.hawaii.e/gmt 需要下载的包包括: gmt-4.5.13-src.tar.bz2 gshhg-gmt-2.3.4.tar.gz 注:GMT中的triangulate命令有两个不同的源码,其中一个遵循GPL协议,另一个不遵循GPL协议。GMT的src包中包含了前者。若有特殊需求,需要使用后者源码的功能,可以下载gmt-4.5.13-non-gpl-src.tar.bz2,并将解压后的triangulate源码覆盖gmt-4.5.13-src.tar.bz2中的相应源码。 依赖关系 基础依赖包 GMT编译过程需要C编译器,以及一些底层的库文件。 对于Ubuntu/Debian: sudo apt-get install gcc g++ make sudo apt-get install libxt-dev libxaw7-dev libxmu-dev libSM-dev 对于CentOS/RHEL/Fedora: sudo yum install gcc gcc-c++ make sudo yum install libXt-devel libXaw-devel libXmu-devel libSM-devel zlib-devel 软件依赖包 GMT4主要依赖于netCDF4,可以直接使用linux发行版官方源中提供的netCDF包。除了netcdf之外,建议还安装gdal包。虽然GMT不依赖于gdal,但gdal可以轻松地将其他数据格式转换为GMT可识别的格式。 对于Ubuntu/Debian: sudo apt-get install libnetcdf-dev libgdal1-dev 对于RHEL/CentOS/Fedora: sudo yum install netcdf netcdf-devel gdal gdal-devel 注意: 一定不要试图自己手动编译netCDF。如果在阅读本文之前曾经手动编译过,一定要将原来手动编译生成的文件删除干净。通常可以使用locate netcdf,找到/usr/local目录下的与netCDF相关的文件,直接删除即可。 CentOS和RHEL的官方源中没有netCDF,需要首先添加EPEL源再安装netCDF;Fedora官方源中自带netCDF; 安装GMT 编译GMT源码 1 2 3 4 5 $ tar -jxvf gmt-4.5.13-src.tar.bz2 $ cd gmt-4.5.13 $ ./configure --prefix=/opt/GMT-4.5.13 $ make $ sudo make install-all 其中--prefix指定了GMT安装路径,你可以指定为其他路径,但要注意后面其他步骤要与这里的路径统一。 安装海岸线数据 1 2 3 $ tar -zxvf gshhg-gmt-2.3.4.tar.gz $ sudo mkdir /opt/GMT-4.5.13/share/coast $ sudo cp -r gshhg-gmt-2.3.4/* /opt/GMT-4.5.13/share/coast/ 修改环境变量 向~/.bashrc中加入GMT4的环境变量,并使环境变量生效: 1 2 3 4 $ echo 'export GMT4HOME=/opt/GMT-4.5.13' >> ~/.bashrc $ echo 'export PATH=${GMT4HOME}/bin:$PATH' >> ~/.bashrc $ echo 'export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${GMT4HOME}/lib64' >> ~/.bashrc $ exec $SHELL -l 说明: 第一个命令向~/.bashrc中添加环境变量GMT4HOME; 第二个命令修改~/.bashrc,将GMT4的bin目录加入到PATH中; 第三个命令将GMT4的lib目录加入到动态链接库路径中,若为32位系统,则为lib;64位系统则为lib64; 第四个命令是重新载入bash,相当于source ~/.bashrc。
③ 我的电脑是win7家庭普通版,想要使用NS2网络仿真器仿真
(一)准备工作
NS2(Network Simulator 2)必须在UNIX/Linux平台下运行,因此一般需要安装UNIX/Linux 操作系统。若要在Windows下使用NS可以采用Windows+虚拟机(VMware、Virtual PC)+NS组合的方式,或者是Windows+Cygwin(一个模拟的Linux平台)+NS组合的方式。目前Windows的使用较为普遍,因此本文主要介绍Windows+Cygwin(一个模拟的Linux平台)+NS的方式。
1.Cygwin
Cygwin是一个在Windows平台上运行的UNIX模拟环境,是Cygnus solutions公司开发的自由软件。它对于学习UNIX/Linux操作环境,从UNIX到Windows的应用程序移植,以及进行某些特殊的开发工作,尤其是使用gnu工具集在Windows上进行嵌入式系统开发,非常有用。随着嵌入式系统开发在国内日渐流行,越来越多的开发者对Cygwin产生了兴趣。
Cygwin当初首先把gcc,gdb,gas等开发工具进行了改进,使他们能够生成并解释Win32的目标文件。然后,他们要把这些工具移植到Windows平台上去。一种方案是基于Win32 API对这些工具的源代码进行大幅修改,这样做显然需要大量工作。因此,他们采取了一种不同的方法——他们写了一个共享库(就是Cygwin dll),把Win32 API中没有的UNIX风格的调用(如fork,spawn,signals,select,sockets等)封装在里面,也就是说,他们基于Win32 API写了一个UNIX系统库的模拟层。这样,只要把这些工具的源代码和这个共享库连接到一起,就可以使用UNIX主机上的交叉编译器来生成可以在Windows平台上运行的工具集。以这些移植到Windows平台上的开发工具为基础,Cygnus又逐步把其他的工具(几乎不需要对源代码进行修改,只需要修改他们的配置脚本)软件移植到Windows上来。这样,在Windows平台上运行bash和开发工具、用户工具,感觉好像在Linux上工作。
目前国内的网站上有"在线安装"和"本地安装"两种。两者在本质上并没有多少不同,只是Cygwin必须安装特定的软件包。默认的软件包不够用。在线安装更够更新Cygwin的的软件包,可以减少安装过程中的一些不必要的错误。因此,本文采用在线安装,下面介绍一下安装Cygwin的步骤:
1. 首先关闭杀毒软件,否则可能会误报病毒导致安装失败。
2. 从http://www.Cygwin.com/ 下载setup.exe在线安装包。
3. 点击setup.exe开始安装,选择”install from Internet”从网络上进行安装,如图
4. 对软件包进行筛选,不需要的软件包点击“skip”,则会跳过该安装包的安装。如图所示
必要软件包是Cygwin用来生成并解释Win32的目标文件,缺一不可。安装过程也可以不点击skip,则默认将所有软件包都安装,如果是系统允许,可建议这么做,避免有些必要的安装包没有选择到,而出现错误。Cygwin必要的安装包如下:
[plain] view plain
gcc
gcc-g++
gnuplot
make
patch
perl
tar
X-startup-scripts
xorg-x11-base
xorg-x11-bin
xorg-x11-devel
xorg-x11-bin-dlls
xorg-x11-bin-lndir
xorg-x11-etc
xorg-x11-fenc
xorg-x11-fnts
xorg-x11-libs-data
软件包安装成功后,点下一步,则安装成功。
2.下载NS2源代码
NS2存在很多版本,不同的版本存在不同的兼容性问题。例如:Ns2.28以后不再提供编译好的可执行文件,因此需要自己编译源码,时间比较长;Ns2.29,2.30等较早版本存在兼容性问题,安装后无法使用,需要打补丁或改源码,操作难度较大,因此要选择最新版本2.35,避免打补丁等操作。打开网址 http://www.isi.e/下载ns-allinone-2.35 安装包。下载完后,解压到c:\Cygwin\home\Administrator\ns-allinone-2.35。路径要严格选择对,否则使用过程中会出现问题。
(二)NS2编译安装
打开Cygwin terminal,切换到解压的目录cd/home/Administrator/ns-allinone-2.35
输入./install安装。此安装过程很缓慢,因为是从源代码进行编译。
(注意:一定要关闭杀毒软件!我发现金山毒霸会误报病毒而导致编译失败)
安装完成后,用 ultraedit 打开 c:\Cygwin\home\Administrator\.bashrc配置环境变量。
在文件的尾部添加如下代码:
[plain] view plain
export
NS_HOME=/home/Administrator/ns-allinone-2.35
export
PATH=$NS_HOME/nam-1.15:$NS_HOME/tcl8.5.10/UNIX:$NS_HOME/tk8.5.10/UNIX:$NS_HOME/bin:$PATH
export
LD_LIBRARY_PATH=$NS_HOME/tcl8.5.10/UNIX:$NS_HOME/tk8.5.10/UNIX:$NS_HOME/otcl-1.14:$NS_HOME/lib:$LD_LIBRARY_PATH
export
TCL_LIBRARY=$NS_HOME/tcl8.5.10/library
使用UtraEdit而不要使用记事本,因为是UNIX文本,删除不必要的空格和回车;环境变量之间要用冒号分隔,而不是分号。
2、必须在Cygwin 下运行 source .bashrc使环境变量生效。
3、环境变量生效后,输入startxwin启动Cygwin的xwindow界面,只有xwindow界面才可以运行NS仿真,否则会出错。如图所示:
4、切换到需要使用的TCL文件目录。输入ns [file-name].tcl启动模拟。可以使用自带的example2.tcl进行测试,如果配置成功
④ 如何用ns2对仿真和测试tcp的拥塞控制算法
快速TCP仿真NS2。你可以下载并部署在NS2模拟器。
FAST TCP(也写作FastTCP)是一种TCP拥塞避免算法在长距离,高延迟链路特别是有针对性的,在网络实验室开发的,加州理工学院,现在被商业化FastSoft。 FastSoft是在2012年收购了Akamai的技术
FastTCP与现有的TCP算法兼容,无需修改只到发送数据的计算机。
大多数当前的拥塞控制算法检测拥塞和减速时,他们发现该数据包被丢弃,使平均发送速率取决于损失概率。这具有两个缺点。首先,低丢失概率必须维持高数据传输率;在TCP中里诺的情况下,非常低的丢失概率是必需的,但即使是新的拥塞避免算法,如H-TCP,BIC TCP和HSTCP需要损失率比由多数无线广域网提供低。此外,分组丢失仅提供关于拥塞等级信息的单个比特,而延迟时间为一个连续量并原则提供有关网络的更多信息。
⑤ ns2网络仿真工具 gnuplot显示结果
ns2是网络仿真模拟器,不是绘图软件,你可以把仿真出来的数据在其他软件上画出来,比如excel或者matlab等等。一般linux自带了一个叫gnuplot的软件可以绘图,你也可以看看怎么使用它。