转自http://blog.csdn.net/and_w/article/details/61430056
网站
这里有一些任何 ns-3 用户都必须了解的重要资源。主站点位于 http://www.nsnam.org 提供 ns-3 系统的基本信息。详细文档位于 http://www.nsnam.org/documentation/ 。你也能在本页发现有关系统架构的内容。
http://www.nsnam.org/wiki/ 是 ns-3 主站点补充内容的 WiKi。你可以在此找到用户和开发者的 FAQ,当然也有故障排除指南、第三方贡献代码、论文等。
源代码可以在 http://code.nsnam.org 找到。你可以在名为 ns-3-dev
的仓库下找到当前开发树。你也可以发现以前的发行版本和核心开发者的试验性仓库。
Mercurial
复杂的软件系统需要一些方法来管理对底层代码和文档的组织和更改。有许多方法可以完成这一壮举,你可能已经听说过一些能够完成这件事的系统。并行版本系统(Concurrent Version System,CVS)可能其中是最有名的。
ns-3 项目使用 Mercurial 作为她的源代码管理系统。完成本教程你并不需要对 Mercurial 了解很多,但我们还是推荐你熟悉 Mercurial 并使用它访问源代码。Mercurial 的网站在 http://www.selenic.com/mercurial/,从该站点你可以获得这个软件配置管理(Software Configuration Management,SCM)系统的二进制或源文件。Selenic(Mercurial 的开发者)也提供了教程,和快速开始指南。
你可以在 ns-3 主站点发现关于使用 Mercurial 和 ns-3 的重要信息。
Waf
一旦源代码下载到你的本地系统,你就需要编译该源文件以产生可用的程序。就像源代码管理一样,也有很多工具能够执行这一功能。最出名的工具可能是 make
。虽然 make
非常出名,但在大型高度可配置化系统中 make
非常难用。由于这个原因,其他的替代工具被开发出来了。最近一段时间这些系统被用 Python 语言开发出来了。
编译系统 Waf 被用在 ns-3 项目上。它是新一代基于 Python 的编译系统之一。编译现有的 ns-3 系统,你并不需要任何 Python 知识。
如果你想了解关于 Waf “血淋林的”细节,可以访问其主站点 http://code.google.com/p/waf/ 。
开发环境
如上所述,ns-3 上的脚本是用 C++ 或 Python 完成的。 大多数 ns-3 的 API 在 Python 上可用,但模型都是用 C++ 完成的。 本文档假设用户具有 C++ 和面向对象概念方面的应用知识。 我们将花一些时间来回顾一些更加高级的概念或一些可能不太熟悉的语言特性、语言风格和设计模式。 我们不希望本教程变成 C++ 教程,因此我们希望有一个语言的基本命令。有几乎难以想象的 C++ 资源在网络上和印刷品上。
如果你是 C++ 新手,你可能想找一个基于教程或者指导手册的书或网站,并在继续本教程之前至少攻克这门语言的基本特性。例如,学习这个教程。
ns-3 系统采用 GNU “工具链” 的几个组件作为开发工具。 软件工具链是一组在给定环境中可用的编程工具。对于 GNU 工具链包含什么,参看 http://en.wikipedia.org/wiki/GNU_toolchain 。 ns-3 使用了 gcc、GNU binutils 和 GDB 。但是,我们不用 GNU 构建系统工具,既不用 make 也不用 autotools。我们使用 Waf 来完成这些功能。
通常,ns-3 的作者在 Linux 或类 linux 环境下工作。对于那些在 Windows 下运行的,确实存在在某种程度上模拟 linux 环境的环境。 ns-3 项目在过去(但不是现在)确实支持在 Cygwin 环境下开发。 对于下载的细节,参见 http://www.cygwin.com/,访问 ns-3 维基了解 Cygwin 和 ns-3 的详细信息。MinGW 目前没有正式支持。Cygwin 的另一个替代方案是安装虚拟机环境,如 VMware,并安装 linux 虚拟机。
Socket 编程
在本教程的示例中我们将假定使用基本的伯克利套接字(Berkeley Socket)API。如果你对使用 socket 还很陌生,我们建议你查看其 API 和常见用法。阅读 TCP/IP Sockets in C, Donahoo and Calvert 一书可以对 TCP/IP socket 编程有一个很好的概观,我们推荐你阅读。
有一个包含该书例子源码的站点:http://cs.baylor.edu/~donahoo/practical/CSockets/ 。
如果你理解了该书的前四章,你将会很好地理解本教程。对于组播 socket 也有一本相似的书 Multicast Sockets, Makofske and Almeroth 。 它涵盖了你可能需要了解的资源,如果你看了组播示例。