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));