NS-3学习(一)--ns-3目录结构以及模块说明

一、目录结构


首先,我们进入刚刚安装的ns-allinone-3.27,进入目录ns-3.27。我们看一下ns-3的目录结构


我们首先介绍几个常用的目录文件,后续会补充其他目录文件的介绍。

waf:基于python开发的编译工具,不管是ns3系统本身自带的和我们自己写的仿真代码都是都是由waf负责编译的。

scratch:存放用户脚本文件,是ns-3默认的脚本存放目录。我们可以把要运行的脚本文件或者例子放到这个目录下,使用waf运行脚本文件时可以不用加目录scratch,当脚本文件在其他目录时需要在文件名称前加目录名称才能正常编译运行。

examples:里边包含关于如何使用ns-3的例子,包含许多模块的使用,如能量,路由,无线网络等,如果你和我一样是一个ns-3初学者的话,只是想利用ns-3现有模块编写脚本文件进行网络仿真,比如使用常规协议栈中的协议配置一个有线或者无线局域网络等,那么使用examples目录下的示例对我们很有帮助。examples目录下的文件都是我们一些常用到的例子:


build:这个目录是ns-3的编译目录,包含文件编译时使用的共享库和头文件(build/ns3)。

这里对这个build目录补充一下,build是我们利用waf工具编译脚本一定会进入的路径。以aodv.cc脚本(我随便找的,无所谓)的编译说明一下这个过程(其他任何脚本的编译都是这个过程):

aodv.cc脚本里的部分代码如下:

#include "ns3/aodv-module.h"
#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/internet-module.h"
#include "ns3/mobility-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/wifi-module.h" 
#include "ns3/v4ping-helper.h"
#include 
#include 
#include "ns3/netanim-module.h"  

using namespace ns3;

class AodvExample 
{
public:
  AodvExample ();
  bool Configure (int argc, char **argv);
  void Run ();
  void Report (std::ostream & os);

private:
  uint32_t size;
  double step;
  double totalTime;
  bool pcap;
  bool printRoutes; NodeContainer nodes;
  NetDeviceContainer devices;
  Ipv4InterfaceContainer interfaces;
private:
  void CreateNodes ();
  void CreateDevices ();
  void InstallInternetStack ();
  void InstallApplications ();
};

我们不关心里边的内容,主要关注开头的头文件部分。我刚开始也纳闷,这么多文件,waf是怎么找到的,别忘了,build这个目录是ns-3的编译目录,包含文件编译时使用的共享库和头文件,所以我们去这个目录的ns3目录查看,内容如下

NS-3学习(一)--ns-3目录结构以及模块说明_第1张图片

在里边可以很轻松的找到aodv.cc脚本中的头文件,至于以<>括起来的头文件,比如,这些是C语言里的标准库,具体可以百度。

说这些主要是让我们弄明白waf编译的过程首先进入build目录然后再离开build目录。下面的截图很好的说明了这一点:

NS-3学习(一)--ns-3目录结构以及模块说明_第2张图片

src: ns-3的源代码目录,目录结构基本和我们编译过的模块相对应。

NS-3学习(一)--ns-3目录结构以及模块说明_第3张图片


这里我们要强调一下,src目录下的每一个文件基本就是对应一个模块,所以我们在研究某一模块时src目录下对应模块的文件信息对我们至关重要。比如我们要研究wifi这一模块,那么我们进入wifi这个文件夹,查看里边的内容。其他所有的模块里的结构基本是一模一样的



wscript:wscript文件结构是固定的,用来注册模块中包含的源码和使用其他模块情况。

model:    model目录包含模块代码的.cc和.h文件。这里边的脚本一般不用我们修改,这个一般通过help类加到节点上,比如一个gpsr模块里的model里边的脚本使用help类加到某个节点上,用来研究gpsr协议

如果你是一个ns-3的高级应用者的话,ns-3现有模块不能满足你的需求,比如新开发一个路由协议或者设计一个新的能量模型或者移动模型,那现有模块中的model目录下的内容很有参考价值。

helper:    helper目录存放的是模块对应的helper类代码的源文件。主要帮助用户创建节点,给节点添加协议栈,网络设备等等。

test:       test目录包含的是模块设计者编写的模块测试代码。

examples:examples目录存放的是应用该模块的实例代码。这里的代码我们可以参考并且修改,用来测试或仿真某一个协议,并且收集协议的传输延迟,投递率等。

doc:doc是帮助文档。

bindings:bindings目录是模块用来绑定Python语言的。


二、模块说明


1.常用模块

Core:ns-3的内核模块,实现了ns-3的基本机制,如智能指针(Ptr)、属性(attribute)、回调(callback)、随机变量(random ariable)、日志(logging)、追踪(tracing)和事件调度(event scheduler)等内容。


Network: 网络数据分组(packet)的模块,一般仿真会用到。

Internet: 实现了关于TCP/IPv4和IPv6的相关协议族,包括IPv4、IPv6、ARP、UPP、TCP、邻居发现和其他相关协议,目前大多数网络都是基于Internet协议栈的。

Applications: 集中常用的应用层协议

Mobility: 移动模型模块

Topolopy-read: 读取指定轨迹文件数据,按照指定格式生成相应的网络拓扑。网络协议时能量不得不考虑。

Status: 统计框架模块,方便ns-3仿真的数据收集、统计和分析。

Tools: 统计工具,包括统计作图工具gnuplot的接口和使用。

Visualizer: 可视化界面工具PyViz

Netanim: 动画演示工具Netnim

Propagation: 传播模型模块

Flow-monitor: 流量监控模块。

2.几种典型的网络模块

Point-to-point:
实现点对点通信的网络

CSMA: 实现了基于IEEE802.3的以太网络,包括MAC层、物理层和媒体信道。

Wifi: 如何实现基于IEEE 802.11 a/b/g的无线网络,可以是有基础设施的也可以是ad hoc网络。

Mesh: 实现基于IEEE 802.11s的无线mesh网络。

Wimax: 实现了基于IEEE802.16标准的无线城域网络。

LTE: (long term evolution,长期演进)是第三代合作伙伴计划(3GPP,3rd generation partnership project )主导的通用移动通信系统(UMTS,universal mobile telecommunications system)技术的长期演进。

UAN: ns-3的水声通信网络(UAN,underwater acoustic network)模块,能仿真水下网络场景。实现了信道、物理层和MAC层。

3.对新技术

Click: ns-3中集成的可编程模块化的软件路由(the click modular router)。

Openflow: 在ns-3中仿真OpenFlow交换机。

MPI: 并行分布式离散事件仿真,ns-3实现了标准的信息传递接口(MPI,message passing interface)。

Emu:ns-3可以集成到实验床和虚拟机环境下。


参考博客:http://www.cnblogs.com/tempal/p/3798917.html


你可能感兴趣的:(NS-3)