【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

原文地址:https://www.cnblogs.com/myworld7/p/12189686.html

时间: 2024-07-29 21:55:06

【NS-3学习】ns-3模拟基础:目录结构,模块,仿真流程的相关文章

iOS项目管理:目录结构和开发流程

iOS项目管理:目录结构和开发流程 最近正在做一个大版本的更新,现在在重构中.... 发现很多人在一个项目的开始不知道开发流程是什么,也不是非常清晰的知道一个项目该有目录结构.如果项目小或者是在做第一版的时候都还能应付的来,但一次比一次更新的更困难.原因就是在你项目的刚开始一个合理的目录结构,没有一个系统管理.时间久了类多了,就一头雾水.   目录结构 AppDelegate Models Macro General Helpers Utils Sections Resources 一个合理的目

<模拟电子学习1>Multisim 12.0 结构和仿真51最小的单芯片系统

周围环境: 系统环境: win7 64位置 软件平台:Multisim 12.0 目的: 刚毕业,可是模电知识也忘得差点儿相同了,加之自己想搞搞硬件设计.假设仅仅是看模电书.不实践,还是终觉浅.当做兴趣一样学学模电,仿真仿真. Multisim的MCU少,就拿51来练练手.搭建51单片机仿真系统,配合着记录一下书本的知识. 概述: 最后使用Multisim 12.0搭建出来的最小系统为图1-1所看到的,通过编敲代码能够使LED1循环闪烁. 图1-1 正常来说.51单片机最小系统一般包含单片机.晶

Andorid学习笔记-eclipse-bundle包SDK目录结构

eclipse-bundle包目录结构: #SDK: add-ons:附属添加,额外功能,附属文件(google地图): build-tools; docs:开发文档: extras:额外的配置文件,例如USB驱动,摄像头的驱动: platforms:安卓系统版本: platform-tools:平台工具,用的最多的就是adb工具(android debug bridge调试桥): sources:源码: system-images:系统镜像: tools:开发用到的工具,例如模拟器:

iOS 8:【转】iOS项目的目录结构和开发流程

源地址:http://limboy.me/ios/2013/09/23/build-ios-application.html 网上相关的资源不多,开源的且质量还不错的iOS项目也是少之又少,最近正好跟同事合作了一个iOS项目,来说说自己的一些想法. 目录结构 AppDelegate Models Macro General Helpers Vendors Sections Resources 一个合理的目录结构首先应该是清晰的,让人一眼看上去就能大概了解目录的职责,且容易应对新的变化. AppD

iOS项目目录结构和开发流程

来源:http://mobile.51cto.com/hot-431205.htm 网上关于iOS项目的资源不多,开源的且质量还不错的iOS项目也是少之又少,最近正好跟同事合作了一个iOS项目,来说说自己的一些想法.一个合理的目录结构首先应该是清晰的,让人一眼看上去就能大概了解目录的职责,且容易应对新的变化. AD:WOT2014课程推荐:实战MSA:用开源软件搭建微服务系统 网上关于iOS项目的资源不多,开源的且质量还不错的iOS项目也是少之又少,最近正好跟同事合作了一个iOS项目,来说说自己

[原创] linux课堂-学习笔记-课程3.Linux目录结构介绍及内核与shell分析

一.目录说明 1.1 bin 一般用户,可执行的系统内置命令 1.2 sbin 系统管理员,可执行的系统内置命令 1.3 boot 启动文件目录,启动有关的文件都保存在此 1.4 dev 设备管理文件,如移动硬盘.U盘.光驱等 1.5 home 用户主目录,一般情况下:一个用户都会有相对应的文件夹,以用户名称命名 1.6 lib 动态链接库共享库,类型windows的.dll文件库 其设计目的在于共享.重用部分组件,提高程序开发效率等 若依赖于太多库,也会有弊端,如安装时提示各种组件缺失等(像w

Linux基础-目录结构

/:根目录 /bin:存放可执行程序(二进制文件) /etc:存放系统或者用户安装的软件所用的一些配置文件 /lib:操作系统运行时候使用的一些基本动态库 /media:自动挂载外设,会将外设挂载到该目录下(例:u盘) /mnt:手动挂载目录,一般默认挂载到该目录下 /opt:默认是空目录,通常作为应用程序的安装目录 /root:超级用户家目录 /sbin:"super bin",存放超级用户(root用户)运行时需要用到的可执行程序 /usr:"user software

linux云计算集群架构学习笔记: 1-2 文件的目录结构

文件的基本管理和XFS文件系统备份恢复 1.1  Linux系统目录结构,相对/绝对路径. 1.2  创建/复制/删除文件,rm -rf / 意外事故 1.3 查看文件内容 1.4 xfs文件系统的备份和恢复 在windows中文件在磁盘里如上图, 而在Linux当中一切都是文件,没有磁盘的概念了,这是 linux与windows的不同,设备也看成文件 1.1.1  linux系统目录结构 /   /home   /root   /dev   /usr   /etc   /boot   /lib

python学习之路(基础篇)——基本语法流程控制

一.hello world程序 1. 在linux 下创建一个文件叫hello.py,并输入 print("Hello World!") 然后执行命令:python hello.py ,输出 localhost:~ jieli$ vim hello.py localhost:~ jieli$ python hello.py Hello World! 2.由 python 解释器来执行 #!/usr/bin/env python print "hello,world"