http://www.cnblogs.com/lovemo1314/archive/2011/02/12/1951365.html
一、简介
1. 什么是NS-3?
NS是一个离散事件驱动网络模拟器。官方定义:(from
http://www.nsnam.org/)
ns-3 is a discrete-event network simulator for Internet systems, targeted primarily for research and educational use. ns-3 is free software, licensed under the GNU GPLv2 license, and is publicly available for research, development, and use.
ns-3 is intended as an eventual replacement for the popular ns-2 simulator. The project acronym “nsnam” derives historically from the concatenation of ns (network simulator) and nam (network animator).
2. NS-3 vs NS-2
NS-3虽然冠以一个“3”,但事实上跟它广泛流行的前任NS-2并非一脉相承,或者从使用角度上说,仅仅继承了一个名称而已。NS-3基本上是一个新的 模拟器,不支持NS-2的API。NS-3是完全用C++编写的(也有可选的Python接口),而NS-2一部分模块使用C++而另一部分使用 OTcl。因而NS-3最大的特点就是脚本可以C++或Python语言,而在NS-2中,我们使用的是OTcl。
NS-3的功能仍旧在开发中,因此它远没有NS-2完善(当然NS-2的维护也在进行中)。NS-3并不包含目前所有NS-2的功能,但它具有某些新的特性:正确的多网卡处理、IP寻址策略的使用、更详细的802.11模块等等。
Latest stable release: ns-3.2.1 (November 20, 2008)
4. NS-3的一些名词解释
POSIX:Portable Operating System Interface
一组操作系统API的协议/标准族,最开始为了Unix系统上的可移植性而开发的,也适用于其他操作系统。
Doxygen:Documentation Generator
支持C++、C、Java、Objective-C、Python、IDL、Fortran、VHDL、PHP、C#等各种语言的文档生成器,用于从源代 码中生成说明文档。(类似于我之前使用过的Sandcastle,貌似更加强大些,有必要得学习一下。)
nam:Network Animator
基于Tcl/TK的网络动画演示工具,能提供拓扑和包级别的动画以及数据流观察。(参考http://www.isi.edu/nsnam/nam/)
Mercurial
NS-3代码维护使用的源码版本控制管理系统
Waf
NS-3项目使用的新一代的基于Python的构建系统(Build System)
WireShark
一种GUI包嗅探器。由于NS-3能生成.pcap文件,因此可以使用类似于WireShark的软件对数据进行分析
tcpdump
另一种包嗅探器。在Linux下使用CLI进行数据分析
2.1 网络资源
NS-3用户有必要知道几个重要的网站:
2.2 源码管理系统Mercurial
复杂的软件系统需要一种途径,用于管理和组织对现有代码和文档的修改。有很多种方法可以实现这种管理,读者可能已听说过某些版本控制软件,CVS(Concurrent Version System)或许是其中最常见的一个。
在NS-3的主页上,读者也可以获取到有关Mercurial和NS-3配合使用的最常用信息。
2.3 编译系统Waf
读者下载NS-3的源码到本地系统之后,需要对源码进行编译来生成可执行程序。正如源码管理方式多种多样,编译源码也有多种工具。最常用的工具是make. Make最出名的一点:它可能是编译大型和高可配置型系统最难的一种方法。因此,有很多替代工具被开发出来。最近,大型高可配置系统的编译工具大多选择用Python语言来开发。
NS-3的编译系统采用了Waf。它是用Python开发的新一代编译管理系统。读者不必掌握python,即可编译现有的NS-3项目。如果读者想要扩展现有的NS-3系统,大多数情况只需了解Python知识的很少且非常直观的一个子集。
正如以上所述,NS-3的脚本由C++或者Python编写。从NS-3.2开始,NS3的API提供了python语言接口,但是所有的模块都是由C++编写的。这里,我们假定读者掌握C++知识和了解面向对象的相关概念。我们将在用到一些高级的概念或者读者可能不熟悉的语言特性、习惯用语或设计模式时适当地花些时间复习它们。但是我们也不希望本教程变成C++教程,所以我们希望读者能够掌握基本的C++命令。在网站上和书籍中,你可以找到无数的关于C++知识的信息。
如果读者是个
C++新手,那么您在继续阅读本指南之前可能需要找一些
C++教程或者网站,至少必须熟悉一下
C++的基本语言特征。例如,
Cplusplus教程。
NS-3系统开发过程中使用了许多的
GNU
工具链(
toolchain)组件。所谓软件的工具链是指在给定环境中可用编程工具的集合。如果读者想要快速地了解一下
GNU
工具链所包含的内容,请浏览
http://en.wikipedia.org/wiki/GNU_toolchain . NS-3使用
gcc,
GNU
binutils,以及
gdb. 但是,我们并不使用
GNU编译系统工具(
build system tools),既不用
make,也不用
autotools,而是使用
Waf来作为编译管理工具。
通常,
NS-3使用者的工作环境为
Linux或者类
Linux系统。对于
Windows环境,有几种可以不同程度模拟
Linux环境的软件,比如
Cygwin。
NS-3支持在
Cygwin环境下的开发。
Windows用户可以浏览
http://www.cygwin.com/获取该软件
(虽然有许多工程维护者使用
MinGW,但是
MinGW现在还没有得到官方支持
)。
Cygwin可以提供许多流行的
Linux系统命令。但是,某些情况下它也会出现问题,因为它毕竟只是
Linux系统的模拟。
Cygwin和
Windows中其他程序的交互也有可能会导致程序出现问题。
如果读者正在使用
Cygwin或者
MinGW;并使用着
Logitech的某些软件产品,我们或许可以让您少点麻烦:建议您去看一看
MinGW
FAQ。
搜索Logitech并阅读FAQ条目:“为什么当我编译源码时,make经常崩溃,留下一个sh.exe.stackdump文件”。无论您相信与否,当运行Logitech时,Logitech
进程监视器潜入了每个正在系统中运行的动态连接库(DLL)当中。它可能导致您的Cygwin或者MinGw的动态连接库奇怪地中止,常常也会阻止调试器的运行。所以当运行Cygwin的时候,一定要小心您的Logitech软件。
替代Cygwin的一种选择是安装虚拟机,比如在VMware上安装Linux虚拟机。
2.5 套接字编程
我们假定读者对本教程所举例子中的
Berkeley套接字
API基本熟悉。如果您不了解套接字,我们建议您学习一下这些
API和一些常见的使用例程。
TCP/IP
Sockets in C这本书可以帮助您很好地理解
TCP/IP套接字。