ns-3是一个离散事件驱动网络模拟器,旨在满足学术研究和教学对网络仿真模拟的需求。ns-3项目是一个始于2006年的开源项目,负责开发ns3软件。 ns-3并不是ns-2的扩展,而是一个全新的模拟器。ns-3的官网:http://www.nsnam.org/
下面介绍 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语言的。
我们也可以添加和修改模块达到我们的模拟目的。
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中一些常用的模块。
下面是几种典型的网络模块:
选择或开发相应的模块
根据实际仿真对象和仿真场景选择相应的仿真模块:如有线局域网(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
原文:https://www.cnblogs.com/myworld7/p/12189686.html