NS3安装与脚本说明文档

  • 格式:pdf
  • 大小:332.39 KB
  • 文档页数:8

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 mercurial

3、sudo apt-get install bzr

4、sudo apt-get install gdb valgrind

5、sudo apt-get install gsl-bin libgsl0-dev libgsl0ldbl

6、sudo apt-get install flex bison libfl-dev

7、sudo apt-get install g++-3.4 gcc-3.4

8、sudo apt-get install tcpdump

9、sudo apt-get install sqlite sqlite3 libsqlite3-dev

10、sudo apt-get install libxml2 libxml2-dev

11、sudo apt-get install libgtk2.0-0 libgtk2.0-dev

12、sudo apt-get install vtun lxc

13、sudo apt-get install uncrustify

14、sudo apt-get install doxygen graphviz imagemagick

15、sudo apt-get install texlive texlive-extra-utils texlive-latex-extra

16、sudo apt-get install python-sphinx dia

17、

sudo apt-get install python-pygraphviz python-kiwi python-pygoocanvas libgoocanvas-dev

18、sudo apt-get install libboost-signals-dev libboost-filesystem-dev

19、sudo apt-get install openmpi*⼆、下载ns-3

最简单的下载⽅法是,在linux下输⼊以下命令:cd

mkdir tarballs

cd tarballs

wget http://www.doczj.com/doc/31786f7cf011f18583d049649b6648d7c0c7085d.html /releases/ns-allinone-3.13.tar.bz2

tar xjf ns-allinone-3.13.tar.bz2

如果进⼊虚拟机中ns-allinone-3.13⽂件夹中,可以看到以下⽂件:build.py ns-3.13/ pybindgen-0.15.0.795/ util.py

constants.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找到http://www.doczj.com/doc/31786f7cf011f18583d049649b6648d7c0c7085d.html ⽂件。运⾏这个脚本可以仿真⼀个简单的点到点链路。

除去开始的声明,该程序由以下⼏个部分组成: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 namespace

using namespace ns3;

在C++的命名空间⾥,ns-3的项⽬使⽤名称ns3。在这个组中的声明在全域命名空间(global namespace)的范围之外,这样的⽬的是使得ns3的代码可以⽅便的与其它代码结合起来。3、Logging

NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");

声明⼀个记录组件,可以调⽤它的名字“FirstScriptExample”来决定是否记录控制信息。4、Main Function

int

main (int argc, char *argv[])

{

与C++⼀样,定义⼀个主函数。Ns-3的脚本实际上就是⼀个C++ 程序。LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO); LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_INFO);

上⾯两⾏代码的⽬的是,建⽴两个记录组件分别安装在EchoClient和EchoServer应⽤中。记录组件分为不同的等级,对应于记录信息的详尽程度。这⼀点,在后⽂会提到。在这⾥,记录的等级是INFO。5、Topology HelpersNodeContainer

NodeContainer nodes;

nodes.Create (2);

创建两个节点。PointToPointHelper

PointToPointHelper pointToPoint;

pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));

pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));

在实际中,外围的物理设备与信道有⼀种紧密相连的关系,例如⽆线⽹卡和⽆线信道。所以,在ns-3中,使⽤可以利⽤同⼀个Topology Helper同时定义这两个对象,并将它们连接起来。以上代码,将PointToPointNetDevice的属性DateRate设置为5Mbps,将PointToPointChannel 的属性Delay设置为2ms。值得注意的是,在此时并没有真正地创建这两个对象,在这⾥实际上是事先的定义。NetDeviceContainer

NetDeviceContainer devices;

devices = pointToPoint.Install (nodes);

在上⽂中,我们已经定义了两个节点,并使⽤PointToPointHelper在两个节点之间定义了PointToPointNetDevice和PointToPointChannel。

在这⾥,才真正创建了以上两个对象。PointToPointHelper中的函数Install以nodes为参数,⽤前⽂已经设置好的参数,为每个节点建⽴了⼀个PointToPointNetDevice,并且⽤PointToPointChannel连接起来。InternetStackHelper

InternetStackHelper stack;

stack.Install (nodes);

为每个节点安装互联⽹协议栈,例如TCP、UDP、IP等。Ipv4AddressHelper

Ipv4AddressHelper address;

address.SetBase ("10.1.1.0", "255.255.255.0");

代码的⽬的是为节点⾥的设备分配IP地址。第⼆⾏是确定⼦⽹地址为10.1.1.0,⼦⽹掩码为255.255.255.0。在这⾥,设备默认的起始地址为10.1.1.1,以后依次递增。即10.1.1.1、10.1.1.2、10.1.1.3等。Ipv4InterfaceContainer interfaces = address.Assign (devices);

在ns-3中,⽹络设备的地址是与接⼝⼀⼀对应的。Application

UdpEchoServerHelper

UdpEchoServerHelper echoServer (9);

ApplicationContainer serverApps = echoServer.Install (nodes.Get (1));

serverApps.Start (Seconds (1.0));

serverApps.Stop (Seconds (10.0));