【NS-3学习】ns-3模拟基础:目录结构,模块,仿真流程
前言
ns-3是一个离散事件驱动网络模拟器,旨在满足学术研究和教学对网络仿真模拟的需求。ns-3项目是一个始于2006年的开源项目,负责开发ns3软件。 ns-3并不是ns-2的扩展,而是一个全新的模拟器。ns-3的官网:http://www.nsnam.org/
下面介绍 ns-3的软件目录 、现有模块和ns-3的仿真流程。
ns-3的目录结构
AUTHORS examples src utils.pyc wutils.py
bindings LICENSE test.py VERSION wutils.pyc
build Makefile testpy.supp waf
CHANGES.html README twoflow-1-0.pcap waf.bat
contrib RELEASE_NOTES utils waf-tools
doc scratch utils.py wscript
-
waf
基于Python开发的编译工具,ns-3系统本身和我们写的仿真代码都是由waf负责编译运行的。 -
scratch
该目录一般存放用户脚本文件,也可以把要运行的例子拷贝到此目录下,该目录是ns-3默认的脚本存放目录,使用waf编译运行脚本文件时,可以不加目录scratch,如果脚本文件在其他目录下需要在文件名前加目录 -
examples
是由ns-3提供的关于如何使用ns-3的例子,包含了许多模块的使用,如能量、路由、无线网络等,入门ns-3这个目录下例子很重要。其中,tutorial目录下的例子很适合入门者学习。 -
doc
帮助文档 -
build
ns-3编译结果存放目录,包含编译文件时使用的共享库和头文件 -
src
ns-3源代码目录。src下面的子目录:antenna dsdv netanim test aodv dsr network topology-read applications energy nix-vector-routing traffic-control bridge fd-net-device olsr uan brite flow-monitor openflow virtual-net-device buildings internet point-to-point visualizer click internet-apps point-to-point-layout wave config-store lr-wpan propagation wifi core lte sixlowpan wimax create-module.py mesh spectrum wscript csma mobility stats csma-layout mpi tap-bridge
每个子目录的结构都如下:
bindings doc examples helper model test wscript
其中,wscript文件结构是固定的,用来注册模块中包含的源代码和使用其他模块情况;模块代码的.cc和.h文件包含在model目录下;helper目录用来存放模块对应的helper类代码的源文件;test目录包含的是模块设计者编写的模块测试代码;examples目录存放的是应用该模块的示例代码;doc是帮助文档;bindings目录是模块用来绑定Python语言的。
我们也可以添加和修改模块达到我们的模拟目的。
ns-3模块简单介绍
Waf: Leaving directory `/home/sakura/Application/ns-allinone-3.29/ns-3.29/build'
Build commands will be stored in build/compile_commands.json
'build' finished successfully (7.849s)
Modules built:
antenna aodv applications
bridge buildings config-store
core csma csma-layout
dsdv dsr energy
fd-net-device flow-monitor internet
internet-apps lr-wpan lte
mesh mobility mpi
netanim (no Python) network nix-vector-routing
olsr point-to-point point-to-point-layout
propagation sixlowpan spectrum
stats tap-bridge test (no Python)
topology-read traffic-control uan
virtual-net-device wave wifi
wimax
Modules not built (see ns-3 tutorial for explanation):
brite click openflow
visualizer
Leaving directory `./ns-3.29'
当成功编译ns-3后,将显示如上结果。下面介绍ns-3中一些常用的模块。
- core: ns-3的内核模块,实现了ns-3的基本机制,如智能指针(Ptr)、属性(attribute)、回调(callback)、随机变量(random variable)、日志(logging)、追踪(tracing)和事件调度(event scheduler)等内容。
- network: 网络数据分组(packet)的模块。
- Internet: 实现了关于TCP/IPv4和IPv6的相关协议族,包括IPv4 IPv6 ARP UDP TCP、邻居发现和其他相关协议,目前大多数网络都是基于Internet协议栈。
- applications: 几种常用的应用层协议。
- mobility: 移动模型模块,当前移动设备普及、移动网络盛行,许多网络场景都离不开节点的移动。
- topology-read: 读取指定轨迹文件数据,按照指定格式生成相应的网络拓扑。
- energy:能量管理模块,关于移动网络的。
- status:统计框架模块,方便ns-3仿真的数据收集、统计和分析。
- tools:统计工具,包括统计作图工具gunplot的接口和使用
- visualizer:可视化界面工具PyViz。
- netanim:动画演示工具 NetAnim
- propagation:传播模型模块
- flow-monitor:流量监控模块
下面是几种典型的网络模块:
- point-to-point:实现了点到点通信的网络
- CSMA:实现了给予IEEE 802.3的以太网络,包括MAC层、物理层和媒体信道
- Wi-Fi:无线网络或者是有基础设施的ad hoc网络
- mesh:实现了基于IEEE 802.1的无线mesh网络
- wimax:实现了基于IEEE 802.16的标准无线城域网
- LTE:(long term evolution, 长期演进)是第三代合作伙伴计划主导的通用移动通信系统技术的长期演进
- UAN:ns-3的水声通信网络(underwater acoustic network)模块,能仿真水下网络场景,实现了信道、物理层和MAC层
ns-3模拟的基本流程
-
选择或开发相应的模块
根据实际仿真对象和仿真场景选择相应的仿真模块:如有线局域网(CSMA)或还是无线局域网(Wi-Fi),若是没有相应模块,那就需要自己编写。 -
编写网络仿真脚本
若是有了相应的模块,那么我们就可以搭建网络仿真环境,ns-3仿真脚本支持2种语言:C++和Python,两种语言接口的API接口是一样的,但是部分API可能没有Python的接口。所以,仿真主要还是采用C++进行编写。编写ns-3仿真脚本的大体过程如下【具体的例子查看
examples/tutorial/
下面 的示例,后面也会分析一些】:-
生成节点:ns-3中节点相当于一个空的计算机外壳,我们需要根据需求给这个计算机安装网络所需要的软硬件,如网卡、应用程序、协议栈等。
-
安装网卡设备:不同的网络类型有不同的网络设备,从而提供不同的通信、物理层和MAC层,如CSMA WI-FI WIMAX和point-to-point等。
-
安装协议栈:ns-3网络中一般是TCP/IP协议栈,依据网络选择具体协议,如是UDP还是TCP,选择何种不同的路由协议(OLSR AODV 和Global等)并为其配置相应的IP地址,ns-3既支持IPv4也支持IPv6 。
-
安装应用层协议:依据选择的传输层协议选择相应的应用层协议,但是有时需要自己编写应用层产生数据流量的代码。
-
其他配置:如节点是否移动,是否需要能量管理等
-
启动仿真:整个网络场景配置完毕,启动仿真
-
-
仿真结果分析
仿真机过一般有两种:一种是网络场景,二是网络数据。网络场景如节点拓扑结构、移动模型等,一般通过可视化界面(PyViz或者NetAnim)可直接观测到。网络数据可以在可视化界面进行简单统计,此外还可以通过专门的统计框架status或者自行通过ns-3提供的追踪框架收集、统计和分析相应的网络数据,如数据分组的延迟、网络流量、分组丢失和节点消息缓存队列的等。 -
依据仿真结果调整网络配置参数或者修改源代码。
小结
接触NS-3也有一年多了,刚学完NS-3基础时心想着总结成博客,但是被后面的各种事情耽搁,╮(╯▽╰)╭真正的原因可能还是整理决心不够吧,想着等以后有时间再搞,就一拖再拖。这次趁着放寒假有时间就好好NS-3的学习笔记整理出来吧。
对NS-3的总结,我写的比较浅薄,这里强推我老师的博客,深入浅出地剖析了NS-3的核心组成。
对NS-3仿真模拟有什么疑问,可以评论留言,也可以私信我,大家一起进步。
参考:
[1]马春光.姚建盛.ns-3网络模拟器基础及应用[M].北京:人民邮电出版社,2014