1.NS3目录结构
Waf是基于Python开发的编译工具,ns-3系统本身和将要写的仿真代码都由waf负责编译运行。
Scratch目录一般存放用户脚本文件,也可以把要运行的例子拷贝到该目录下。
Example是ns-3提供的关于如何使用ns-3的例子,包含许多模块的使用,如能量、路由、无线网络等。
Doc目录是帮助文档,可以使用./waf --doxygen编译本地Doxygen文档。
Build目录是ns-3编译目录,包含编译文件时使用的共享库和头文件(build/ns3)。
Src是ns-3源码目录。
模块里面的wscript文件结构是固定的,用来注册模块中包含的源码和使用其他模块情况。Model目录包含模块代码的.cc和.h文件。Helper目录存放的是模块对应的helper类代码的源文件。Test目录包含的是模块设计者编写的模块测试代码,而examples目录存放的是应用该模块的实例代码。Doc是帮助文档,bindings目录是模块用来绑定python语言的。
常用模块:
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:流量监控模块。
下面是几种典型的网络模块。
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层。
对新技术:
Click:ns-3中集成的可编程模块化的软件路由(the click modular router)。
Openflow:在ns-3中仿真OpenFlow交换机。
MPI:并行分布式离散事件仿真,ns-3实现了标准的信息传递接口(MPI,message passing interface)。
Emu:ns-3可以集成到实验床和虚拟机环境下。
2.NS-3模拟基本流程
使用ns-3进行网络仿真时,一般经过一下4个步骤:
1、选择或开发相应模块。
根据实际仿真对象和仿真场景选择相应的仿真模块。
如有限局域网络(CSMA),无线局域网络(Wi-Fi);
节点是否需要移动(mobility);
使用何种应用程序(application);
是否需要能量管理(energy);
使用何种路由协议(Internet、aodv等);
是否需要动画演示(visualizer、netanim)等
如果搭建的网络比较新,读者就需要开发自己设计的协议
2、编写网络仿真脚本:C++或者Python。
编写脚本过程:
1)生成节点(如网卡、应用程序、协议栈等)
节点相当于一个空的计算机外壳,接下来要给计算机安装网络所需要的软硬件,如网卡、应用程序、协议栈等
2)安装网络设备(如CSMA、WiFi、wimax、point-to-point)
不同的网络类型有不同的网络设备,从而提供不同的信道、物理层和mac层
3)安装协议栈:ns-3一般是TCP/IP协议栈。
依据网络选择具体协议(如udp还是tcp)、选择路由协议(olsr、aodv、global等)并为其配置ip地址
4)安装应用层协议
依据选择的传输层协议选择相应的应用层协议,有时需要自己编写应用层产生网络数据流量的代码。
5)其他配置(如节点是否要移动,是否要能量管理)
6)启动仿真。
网络场景配置完成,启动仿真。
以上概念使网络节点实现了物理连接,要实现通信还需要软件支持,也就是协议,应用层产生数据,利用类socket编程实现数据分组的向下传递,数据分组通过协议栈tcp、ip向下传递给网络设备(可简单理解为网卡),该网络设备包括mac层物理层协议,于是数据分组就像在真实网络中流动一样,由数据帧转换成二进制流,最终变成信号通过媒体信道传输到目的节点。
目的节点收到数据分组后从下往上逐层转交,由媒体信号转换成二进制,二进制转换成数据帧,再转换成IP数据分组,然后经由传输层的端口号转交给相应进程。
3、仿真结果分析。
仿真结果有两种:一种是网络场景,另外一种是网络数据。
网络场景,如节点拓扑结构、移动模型等,一般通过可视化界面(pyviz或netanim)可直观观察到
网络数据也可在可视化界面下有简单统计。此外可以通过专门的统计框架(status)或自行通过ns3提供的追追踪系统(tracing)收集、统计、分析相应的网络数据,如数据分组的延迟、网络流量、分组丢失了、节点消息缓存队列
4、依据仿真结果调整网络配置参数或修改源代码
转自:https://blog.csdn.net/jocelyn_osshun/article/details/77765892