ns-3 教程 —— 简介

ns-3 模拟器是一款离散事件网络模拟器,主要用于教育和研究领域。ns-3 项目开始于 2006 年,是一个开发 ns-3 的开源项目。

本教程的目的是用结构化的方法使 ns-3 新用户了解系统。新用户有时很难从复杂的手册中收集到有用的信息,并将这些信息转换为可用的仿真。在本教程中,我们将构建一些示例仿真,依次介绍并解释相关关键概念和特性。

随着教程的展开,我们将介绍完整的 ns-3 文档,并为那些有兴趣深入了解系统工作原理的人提供指向源代码的指针。

起初需要注意的几个关键点:

  • ns-3 是开源的,并且该项目致力于为研究人员维护一个开放环境,以共享他们的软件。
  • ns-3 不是向后兼容的,它并不是 ns-2 扩展,而是一个新的模拟器。这两个模拟器都是用 C++ 编写的,但 ns-3 是一个新的模拟器,并不支持 ns-2 的 API。一些 ns-2 的模型已经移植到 ns-3 中了。项目组在 ns-3 构建期间仍然维护 ns-2,并将研究过渡和整合机制。

关于 ns-3

ns-3 为网络研究和教育开发的网络仿真平台。简而言之,ns-3 提供了一个分组数据网络如何工作和运行的模型,也为用户提供了一个用于仿真实验的仿真引擎。使用 ns-3 的理由包括:对实际系统中很难或者不可能执行的项目进行研究;在可重复环境和高度控制下对系统行为进行研究;以及学习网络的工作原理。用户将会注意到 ns-3 中的模型都致力于对互联网协议和网络运行的建模,但 ns-3 并不局限于互联网系统,一些用户正在使用 ns-3 进行基于非互联网系统的建模。

在网络仿真研究中存在很多仿真工具,对比其他仿真工具 ns-3 有如下鲜明特点:

  • ns-3 被设计成一个库集可以组合在一起使用也可以和外部软件库结合使用。相比于一些其他仿真平台单一的集成的图形用户界面(GUI)环境用户所有的任务都在其中执行,ns-3 在这方面更加模块化。一些外部 animator、数据分析和可视化工具能够用于 ns-3。然而,用户也被期望能够使用命令行以及 C++ 和/或 Python 开发工具工作。
  • ns-3 主要用于 linux 系统,也支持 FreeBSD、Cygwin(for windows),原生的对 Windows Visual Studio 的支持也在开发中。
  • ns-3 不是任何公司官方支持的软件产品。ns-3 的支持在用户 mailing list 基础上做着最大的努力。

对于 ns-2 用户

对于那些熟悉 ns-2 (一个在 ns-3 之前广受好评的工具)的用户来说,转移到 ns-3 后最大可见的外部变化是脚本语言的改变。ns-2 使用的脚本语言是 OTcl,可视化工具是网络动画演示器(Network Animator)nam。在 ns-2 中用纯 C++(也就是说, mian() 中没有任何 OTcl 代码)并不能执行任何仿真。另外,一些 ns-2 组件是用 C++ 写的而另一些是用 OTcl 写的。在 ns-3 则完全是用 C++ 写的,附带一些可选的 Python 包。因此仿真脚本既可以用 C++ 写也可以用 Python 写。新的 animator 和可视化工具也在开发和使用中。因此, ns-3 生成 pcap 包跟踪文件(trace file),其他工具也可以用来分析 trace。在本教程中,我们首先关注于直接用 C++ 写脚本,然后通过跟踪文件解释结果。

但也有相似之处(例如,都是基于 C++ 对象的,并且一些 ns-2 代码已经移植到 ns-3 中了)。在教程中,我们将突出 ns-2ns-3 不同之处。

我们经常会听到这样一个问题:“我应该继续使用 ns-2,还是转向 ns-3 呢?”。在笔者看来,除非用户认为他属于 ns-2(基于现有的个人舒适或知识背景,或者基于特定的模型只能用于 ns-2),由于以下原因用户使用 ns-3 会更有生产力:

  • ns-3 被活跃的、快速响应的用户 mailing list 积极维护,而 ns-2 只是轻量维护并且其主要代码树(main code tree)有超过十年没有重大更新了。
  • ns-3 提供的特性在 ns-2 中不可用,例如实现代码( implementation code)执行环境(允许用户在模拟器中运行真正的实现代码)。
  • ns-3 相比于 ns-2 提供了更低层次的抽象,allowing it to align better with how real systems are put together。一些在 ns-2 中发现的限制(例如,在节点上正确的支持多种类型的接口)在 ns-3 已经被修正了。

由于其漫长的历史,ns-2ns-3 具有更加多样化的贡献模块(contributed module)集。然而,ns-3 在很多热门研究领域有更加精细的模型(包括成熟的 LTE 和 WiFi 模型),而且其对实现代码的支持保证了其是广泛适用的高保真模型。用户会惊讶地发现使用 Direct Code Execution (DCE)框架,整个 linux 网络协议栈都能囊括在一个 ns-3 节点中。ns-2 的模型有时会移植到 ns-3 中,特别是用 C++ 实现的模型。

如果陷入疑惑,好的指导方针是查看所有的模拟器(当然包括其他的模拟器),特别是那些模型在你的研究中可用的,但有一条要熟记于心——那就是你的实验使用那些有着活跃开发和维护的工具可能会更好(说的就是你,ns-3)。

贡献

ns-3 是由研究社区创建并服务于研究社区的研究和教育模拟器。她将依赖于不断贡献的社区以开发新的模型,维护和调试现有的模型,以及分享成果。我们希望通过以下策略鼓励人们像曾经的 ns-2 一样对 ns-3 做出贡献:

  • 基于 GUN GPLv2 兼容的开源授权
  • 维基
  • 贡献代码页,同 ns-2 热门的贡献代码页相似
  • 开放的 bug tracker

我们发现如果你现在正在阅读本文档,回馈项目可能并不是你的首要目的,但我们希望你能认识到本项目的精神是贡献——哪怕是反馈给我们你使用 ns-3 的早期体验(例如,“教程某些章节写的不够清楚”),报告陈旧的文档,等等。我们都十分感谢。

教程的组织形式

本教程假定新用户最初遵循如下路径:

  • 尝试下载并编译一个副本;
  • 尝试运行一些示例程序;
  • 观察仿真结果,并尝试调整它。

因此,我们试图沿着上述事件序列组织教程。


你可能感兴趣的:(翻译文档,ns-3)