当前位置:文档之家› NS3安装与脚本说明文档

NS3安装与脚本说明文档

NS-3说明文档第一章主要内容:一、配置二、下载ns-3三、建立ns-3项目四、测试ns-3五、运行一个脚本一、配置本次的使用环境是linux/Ubuntu。

在安装ns-3之前,需要输入以下命令,进行事先的配置。

1、如果对C++组件的需求比较少,输入以下命令:sudo apt-get install gcc g++ python如果对python组件的需求比较少,输入以下命令:sudo apt-get install gcc g++ python python-dev以上命令二者选一。

之后的命令依次输入。

2、sudo apt-get install mercurial3、sudo apt-get install bzr4、sudo apt-get install gdb valgrind5、sudo apt-get install gsl-bin libgsl0-dev libgsl0ldbl6、sudo apt-get install flex bison libfl-dev7、sudo apt-get install g++-3.4 gcc-3.48、sudo apt-get install tcpdump9、sudo apt-get install sqlite sqlite3 libsqlite3-dev10、sudo apt-get install libxml2 libxml2-dev11、sudo apt-get install libgtk2.0-0 libgtk2.0-dev12、sudo apt-get install vtun lxc13、sudo apt-get install uncrustify14、sudo apt-get install doxygen graphviz imagemagick15、sudo apt-get install texlive texlive-extra-utils texlive-latex-extra16、sudo apt-get install python-sphinx dia17、sudo apt-get install python-pygraphviz python-kiwi python-pygoocanvas libgoocanvas-dev18、sudo apt-get install libboost-signals-dev libboost-filesystem-dev19、sudo apt-get install openmpi*二、下载ns-3最简单的下载方法是,在linux下输入以下命令:cdmkdir tarballscd tarballswget /releases/ns-allinone-3.13.tar.bz2tar xjf ns-allinone-3.13.tar.bz2如果进入虚拟机中ns-allinone-3.13文件夹中,可以看到以下文件:build.py ns-3.13/ pybindgen-0.15.0.795/ util.pyconstants.py nsc-0.5.2/ README那么ns-3已经下载成功,并解压完毕。

三、建立ns-3项目最简单的建立方法是使用build.py文件。

从根目录进入到包含有build.py文件的路径下。

输入以下命令:./build.py --enable-examples --enable-tests会经过一段时间,出现一大段安装代码,但最后会显示‘build’finished successfully(2m30.586s)。

于是就建立成功了。

四、测试ns-3从根目录下进入到ns-3.13下,运行./test.py文件。

使用如下命令:./test.py –c core这个命令通常被用来快速地验证ns-3是否被正确地安装。

如果出现以下报告,说明安装成功:92 of 92 tests passed(92 passed, 0 failed, 0 failed, 0 crashed, 0 valgrind errors)五、运行一个脚本从根目录进入到ns-3.13目录下,运行以下命令:./waf --run hello-simulator输出结果为Hello Simulator。

第二章主要内容:一、核心的概念二、点对点通信代码三、实际运行一、核心的概念1、Node 节点在ns-3中,用一个抽象的节点node来表示基本的计算设备。

在C++中,用一个类Node来定义节点的概念。

在仿真中,我们可以在节点上添加功能,例如应用、协议栈、具有驱动的外围设备等等。

2、Application应用在ns-3中,用一个抽象的概念application来仿真实际的用户进程产生的活动。

在C++中,用一个类Application来定义这个概念。

3、Channel信道在ns-3中,用一个抽象的概念channel来表示基本的通信子网,用来连接节点node。

在C++中,用一个类Channel来定义这个概念。

4、Net Device网络设备在ns-3中,net device这个抽象概念包括了硬件和它们相应的驱动程序。

在仿真中,net device 被“安装”于节点node中,通过信道channel与其它的节点node进行通信。

在C++中,用一个类NetDevice来定义这个概念。

5、Topology Helper构建一个通信网络,需要用大量的操作来完成将Net Devices连接到Nodes上,将Net Devices 与Channels连接起来,并分配IP地址等工作。

在ns-3中,可以通过Topology Helper将这些操作结合到一个统一的模块中,方便操作。

二、点对点通信代码(目的:熟悉操作流程)根据前面的安装步骤,可以在目录tarballs/ns-allinone-3.13/ns-3.13/examples/tutorial找到文件。

运行这个脚本可以仿真一个简单的点到点链路。

除去开始的声明,该程序由以下几个部分组成:1、Modules Include#include "ns3/core-module.h"#include "ns3/network-module.h"#include "ns3/internet-module.h"#include "ns3/point-to-point-module.h"#include "ns3/applications-module.h"上面每一个include files在tarballs/ns-allinone-3.13/ns-3.13/build/ns-3.13下。

对头文件不做过多的介绍。

2、NS-3 namespaceusing namespace ns3;在C++的命名空间里,ns-3的项目使用名称ns3。

在这个组中的声明在全域命名空间(global namespace)的范围之外,这样的目的是使得ns3的代码可以方便的与其它代码结合起来。

3、LoggingNS_LOG_COMPONENT_DEFINE ("FirstScriptExample");声明一个记录组件,可以调用它的名字“FirstScriptExample”来决定是否记录控制信息。

4、Main Functionintmain (int argc, char *argv[]){与C++一样,定义一个主函数。

Ns-3的脚本实际上就是一个C++ 程序。

LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO); LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);上面两行代码的目的是,建立两个记录组件分别安装在EchoClient和EchoServer应用中。

记录组件分为不同的等级,对应于记录信息的详尽程度。

这一点,在后文会提到。

在这里,记录的等级是INFO。

5、Topology HelpersNodeContainerNodeContainer nodes;nodes.Create (2);创建两个节点。

PointToPointHelperPointToPointHelper pointToPoint;pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));在实际中,外围的物理设备与信道有一种紧密相连的关系,例如无线网卡和无线信道。

所以,在ns-3中,使用可以利用同一个Topology Helper同时定义这两个对象,并将它们连接起来。

以上代码,将PointToPointNetDevice的属性DateRate设置为5Mbps,将PointToPointChannel 的属性Delay设置为2ms。

值得注意的是,在此时并没有真正地创建这两个对象,在这里实际上是事先的定义。

NetDeviceContainerNetDeviceContainer devices;devices = pointToPoint.Install (nodes);在上文中,我们已经定义了两个节点,并使用PointToPointHelper在两个节点之间定义了PointToPointNetDevice和PointToPointChannel。

在这里,才真正创建了以上两个对象。

PointToPointHelper中的函数Install以nodes为参数,用前文已经设置好的参数,为每个节点建立了一个PointToPointNetDevice,并且用PointToPointChannel连接起来。

InternetStackHelperInternetStackHelper stack;stack.Install (nodes);为每个节点安装互联网协议栈,例如TCP、UDP、IP等。

Ipv4AddressHelperIpv4AddressHelper address;address.SetBase ("10.1.1.0", "255.255.255.0");代码的目的是为节点里的设备分配IP地址。

相关主题