ns-3模拟基本流程(附ns-3中的一些概念概述)

ns-3模拟基本流程

1)选择或开发相应的模块

根据实际仿真对象和仿真场景选择相应的仿真模块:如是有线局域网络(CSMA)还是无线局域网络(Wi-Fi);节点是否需要移动(mobility);使用何种应用程序(application);是否需要能量(energy)管理;使用何种路由协议(internet、aodv等);是否需要动画演示等可视化界面(visualizer、netanim)等。

2)编写网络仿真脚本

有了相应的模块,就可以搭建网络仿真环境。ns-3仿真脚本支持在2种语言:C++和python,但是2种语言的API接口是一样的(部分API还没有提供python接口)。

编写ns-3仿真脚本的大体过程如下:

  • 生成节点:ns-3中节点相当于一个空的计算机外壳,接下来要给这个计算机安装网络所需要的软硬件,如网卡,应用程序,协议栈等。
  • 安装网络设备:不同的网络类型有不同的网络设备,从而提供不同的信道,物理层和MAC层,如CSMA,Wi-Fi,WiMAX和point-to-point等。
  • 安装协议栈:ns-3网络中一般是TCP/IP协议栈,依据网络选择具体协议,如是UDP还是TCP,如何选择不同的路由协议(OLSR、AODV、Global等)并为其配置相应的IP地址,ns-3既支持IPv4也支持IPv6。
  • 安装应用层协议:依据选择的传输层协议选择相应的应用层协议,但有时需要自己编写应用层产生网络数据流量的代码。
  • 其他配置:如节点是否移动,是否需要能量管理。
  • 启动仿真:整个网络场景配置完毕,启动仿真。

API(Application Programming Interface,应用程序编程接口)
是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

ns-3仿真的基本模型如下图所示:
ns-3模拟基本流程(附ns-3中的一些概念概述)_第1张图片
搭建ns-3网络仿真场景和搭建实际网络类似,首先需要有网络节点,ns-3中使用节点Node的概念;节点需要有网络设备,类似于网络接口卡,ns-3中有网络设备Net Device的概念;网络设备通过传输媒体连接,ns-3中使用信道Channel的概念来代表传输媒体。其中,信道Channel和网络设备Net Device是对应的,CSMA网络设备对应CSMA的信道,Wi-Fi网络设备对应Wi-Fi的信道。

以上概念使网络节点实现了物理连接,但要真正实现通信还需要软件的支持,也就是协议。应用层产生数据,利用类socket编程实现数据分组的向下传递,数据分组通过协议栈——TCP/IP向下传递给网络设备,该网络设备包括MAC层,物理层协议,于是数据分组就像在真实的网络中流动一样,由数据帧转换成二进制流,最终变成信号通过媒信道传输到目地节点。

目的节点收到数据分组后从下往上逐层转交,由媒体信号转换成二进制,由二进制转换成数据帧,再由数据帧转换成IP数据分组,然后经由传输层的端口号转交给相应的进程(应用程序application)。这样就在ns-3中完成了一次和真实网络极为相近的完整数据传输过程。

3)仿真结果分析

仿真结果一般有两种,一种是网络场景,如节点拓扑结构,移动模型等,一般可以通过可视化界面(pyviz或NetAnim)可以直接观测到。另一种是网络数据,它除了可以在可视化界面下进行简单统计,也可以通过专门的统计框架(stats)或者通过ns-3提供的追踪(tracing)系统收集,统计和分析相应的网络数据,如数据分组的延迟、网络流量、分组丢失率等。

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

有时实际结果与预期相差较大,这时就需要分析原因(是网络参数有问题还是协议本身有问题),然后重新设计,仿真,直到达到满意的结果。

ns-3中的一些概念概述:

结点Node

在因特网术语中,连接到网络的计算设备称为主机终端系统。由于ns-3是网络模拟器,而不是特定的Internet模拟器,因此我们故意不使用术语host,因为它与Internet及其协议密切相关。相反,我们使用一个更通用的术语,也可以用于源于图论的其他模拟器——节点

在ns-3中,基本计算设备抽象称为节点。这个抽象在C ++中表示由类Node表示(在ns-3中也这样表示)。 Node类提供了用于在模拟中管理计算设备的表示方法。

我们应该将Node视为要添加功能的计算机。添加应用程序、协议栈、外围卡及其相关驱动程序,使计算机能够做有用的工作。

应用Application

通常,计算机软件分为两大类:系统软件、应用程序。
系统软件根据某种计算模型组织各种计算机资源,如内存,处理器周期,磁盘,网络等。用户通常运行应用程序获取并使用由系统软件控制的资源来实现某个目标。

通常,系统和应用程序软件之间的分离线是在操作系统中发生的权限级别更改时进行的。在ns-3中没有真正的操作系统概念,特别是没有特权级别或系统调用的概念。但是,我们确实有应用程序的概念。正如软件应用程序在计算机上运行以在“现实世界”中执行任务一样,ns-3应用程序在ns-3节点上运行,以在模拟世界中驱动模拟。

在ns-3中,生成一些要模拟的活动的用户程序的基本抽象是应用程序。这个抽象在C ++中由类Application表示。 Application类提供了在模拟中管理我们的用户级应用程序版本的表示的方法。期望开发人员在面向对象的编程意义上专门化Application类来创建新的应用程序。

信道Channel

在现实世界中,人们可以将计算机连接到网络,数据在这些网络中流动的媒体通常称为信道。将以太网电缆连接到墙上的插头时,将计算机连接到以太网信道。在ns-3的模拟世界中,将节点连接到表示通信信道的对象。这里基本的通信子网抽象称为信道,并由C ++类Channel表示。

Channel类提供了管理通信子网对象和将节点连接到它们的方法。在面向对象编程意义上,开发人员也可以专门使用信道。Channel specialization可以模拟像电线一样简单的东西,还可以模拟像大型以太网交换机那样复杂的东西,或者在无线网络的情况下充满障碍物的三维空间。

网络设备Net Device

过去,如果您想将计算机连接到网络,则必须购买特定类型的网线和称为需要在计算机中安装的外围设备卡的硬件设备。如果外围设备卡实现了某些网络功能,则称为网络接口卡或网卡。今天,大多数计算机都内置了网络接口硬件,用户看不到这些构建块。

如果没有软件驱动程序来控制硬件,NIC(network interface controller网卡)将无法运行。在Unix(或Linux)中,一块外围硬件被归类为Device。设备使用设备驱动程序进行控制,网络设备(NIC)使用网络设备驱动程序(统称为网络设备)进行控制。在Unix和Linux中,可以通过名称(例如eth0)来引用这些网络设备。

在ns-3中,网络设备抽象涵盖软件驱动程序和模拟硬件网络设备“安装”在节点中,以使节点能够通过信道与模拟中的其他节点通信。就像在真实计算机中一样,节点可以通过多个NetDevices连接到多个通道。

网络设备抽象在C ++中由NetDevice类表示。 NetDevice类 提供了管理 Node和Channel对象连接的方法;并且可能由面向对象编程意义上的开发人员专门化。

拓扑助手Topology Helpers

在实际网络中,我们将找到具有添加(或内置)NIC的主机。在ns-3中,我们会说你会发现带有NetDevices的节点。

在大型模拟网络中,需要在Node、NetDevices 和Channels之间安排许多连接。由于将NetDevices连接到节点、将NetDevices连接到通道、分配IP地址等都是ns-3中的常见任务,因此我们提供了所谓的拓扑辅助工具,以使其尽可能简单。例如,可能需要许多不同的ns-3核心操作来创建NetDevice、添加MAC地址、在节点上安装该网络设备、配置节点的协议栈,然后将NetDevice连接到Channel,将多个设备连接到多点通道然后将各个网络连接到互联网络中将需要更多操作。ns-3提供拓扑辅助对象,将这些许多不同的操作组合成一个易于使用的模型,以方便使用。

你可能感兴趣的:(ns-3基础)