NS-3学习ns-3模拟基础:目录结构,模块,仿真流程

Posted myworld7

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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模拟的基本流程

  1. 选择或开发相应的模块
    根据实际仿真对象和仿真场景选择相应的仿真模块:如有线局域网(CSMA)或还是无线局域网(Wi-Fi),若是没有相应模块,那就需要自己编写。

  2. 编写网络仿真脚本
    若是有了相应的模块,那么我们就可以搭建网络仿真环境,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 。

    • 安装应用层协议:依据选择的传输层协议选择相应的应用层协议,但是有时需要自己编写应用层产生数据流量的代码。

    • 其他配置:如节点是否移动,是否需要能量管理等

    • 启动仿真:整个网络场景配置完毕,启动仿真

  3. 仿真结果分析
    仿真机过一般有两种:一种是网络场景,二是网络数据。网络场景如节点拓扑结构、移动模型等,一般通过可视化界面(PyViz或者NetAnim)可直接观测到。网络数据可以在可视化界面进行简单统计,此外还可以通过专门的统计框架status或者自行通过ns-3提供的追踪框架收集、统计和分析相应的网络数据,如数据分组的延迟、网络流量、分组丢失和节点消息缓存队列的等。

  4. 依据仿真结果调整网络配置参数或者修改源代码。

小结

接触NS-3也有一年多了,刚学完NS-3基础时心想着总结成博客,但是被后面的各种事情耽搁,╮(╯▽╰)╭真正的原因可能还是整理决心不够吧,想着等以后有时间再搞,就一拖再拖。这次趁着放寒假有时间就好好NS-3的学习笔记整理出来吧。
对NS-3的总结,我写的比较浅薄,这里强推我老师的博客,深入浅出地剖析了NS-3的核心组成。
对NS-3仿真模拟有什么疑问,可以评论留言,也可以私信我,大家一起进步。

参考:
[1]马春光.姚建盛.ns-3网络模拟器基础及应用[M].北京:人民邮电出版社,2014

以上是关于NS-3学习ns-3模拟基础:目录结构,模块,仿真流程的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu安装openmpi && ns-3 mpi

NS3-00-学习资料

ns-3零基础安装教程

NS3系列—7———NS3日志

NS-3 dce 和 iperf3

LTE Manual ——Logging(翻译)