Ns-3是用C++语言编写的开源项目,主要运行平台是GUN/Linux。Windows用户也可以使用Cygwin或Visual Studio运行ns-3,但有些功能无法使用。Ns-3也是一个自由软件。任何组织或个人都可以免费下载、使用和修改ns-3源代码。
Ns-3主要用于模拟计算机网络。它可以在一台计算机上模拟物理世界中各种类型和大小的网络结构。Ns-3没有图形用户界面。使用它进行网络仿真,用户需要经历四个基本步骤:下载源代码、编译源代码、编写仿真脚本、运行仿真脚本。从这个角度来看,ns-3其实更像一个图书馆。它为网络仿真提供了各种应用程序接口。用户在仿真脚本中调用这些API来构建自己的虚拟网络结构。目前ns-3的仿真脚本可以支持C++和Python。
那么ns-3如何模拟一个物理网络呢?
这是关于网络的构成。一般来说,计算机网络可以分为以下两部分。
●由几个节点和连接这些节点的通道组成的网络拓扑。
●在节点和通道中运行的网络协议。
首先,在ns-3模拟的虚拟网络中,将网络拓扑中的节点和通道抽象成各种C++类。并将节点和通道的连接操作抽象为不同C++对象之间的关联。通过这种抽象,可以在ns-3程序中模拟各种类型的网络拓扑,如有线网络中的点对点协议和总线网络,无线网络中的无线局域网和长期演进技术等。这些网络拓扑可以包含几十个、几百个甚至几千个网络节点。其次,对于网络协议的模拟,ns-3使用了一种叫做离散事件的模拟技术。简单来说,这项技术就是将物理世界中的一个连续过程抽象为虚拟世界中的一系列离散事件。该技术使ns-3能够非常逼真地模拟物理世界中的各种网络协议,如应用层的各种包生成器、传输层的TCP和UDP、网络层的IPv4和IPv6协议、链路层和物理层的PPP、IEEE 802.11a/b/g/n和LTE协议等。
图1 NS-3支持的网络协议
仅仅模拟物理网络是不够的。为了帮助用户更方便地模拟网络,ns-3还提供了一系列辅助功能。例如,trace generation功能使用户能够通过第三方软件直接分析ns-3生成的数据。移动模块可以自动为节点指定起始位置和移动轨迹。此外,ns-3构建的虚拟网络可以与物理网络环境高度集成。一方面,ns-3中的虚拟节点可以使用物理网络发送和接收数据;另一方面,物理节点也可以使用ns-3构建的虚拟通道来发送和接收数据包。这样,用户可以直接使用ns-3模拟一个大规模的网络,然后测试真实的网络协议代码,达到节省开发成本的目的。
到目前为止,可以看出ns-3主要用于模拟网络拓扑和运行网络协议。它侧重于协议行为。其他节点的内部硬件延迟、CPU利用率等指标不属于ns-3能力。
自2008年7月发布第一个版本以来,ns-3一直保持着每年2 ~ 3个版本的发布速度。目前,ns-3已广泛应用于第五代移动通信、物联网、软件定义网络、数据中心等计算机网络前沿研究领域。