NS-3笔录

一、简介

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 资源           http://www.nsnam.org/docs/release/tutorial/tutorial_5.html#Resources

2.1   网络资源

NS-3 用户有必要知道几个重要的网站:
    主站点位于 http://www.nsnam.org 提供 NS-3 系统的基本信息。
详细文档位于主站点的 http://www.nsnam.org/documents.html. 您也可以从这个网页上得到系统架构的相关信息。
维基百科 网页http://www.nsnam.org/wiki 可以作为 NS-3 主站点的补充。您可以在那里找到用户和开发者的 FAQs ,以及相关问题的解决途径,第三方的共享代码、论文等等。
NS-3 的源码可以在 http://code.nsnam.org 找到。读者也可以在名为 ns3-dev 的源码仓库找到当前的 NS-3 开发树。还有 NS-3 的之前发行版本和最新测试版本的代码。

2.2   源码管理系统Mercurial

复杂的软件系统需要一种途径,用于管理和组织对现有代码和文档的修改。有很多种方法可以实现这种管理,读者可能已听说过某些版本控制软件, CVS Concurrent Version System )或许是其中最常见的一个。
NS-3 项目采用 Mercurial 系统作为它的源码管理系统。尽管读者在阅读本教程时不需要知道太多的 Mercurial 相关知识,但我们建议读者能够熟悉 Mercurial ,并用于查看 NS-3 源码。 Mercurial 的网址为 http://www.selenic.com/mercurial/ ,读者可以从上面获取到这个软件配置管理系统 (Software Configuration management, SCM) 的二进制程序和源码。 Mercurial 的开发者 Selenic 提供了一个 Mercurial 教程,网址为 http://www.selenic.com/mercurial/wiki/index.cgi/Tutorial/ ,以及快速入门指南: http://www.selenic.com/mercurial/wiki/index.cgi/QuickStart/ .
NS-3 的主页上,读者也可以获取到有关 Mercurial NS-3 配合使用的最常用信息。

2.3   编译系统Waf

读者下载 NS-3 的源码到本地系统之后,需要对源码进行编译来生成可执行程序。正如源码管理方式多种多样,编译源码也有多种工具。最常用的工具是 make. Make 最出名的一点:它可能是编译大型和高可配置型系统最难的一种方法。因此,有很多替代工具被开发出来。最近,大型高可配置系统的编译工具大多选择用 Python 语言来开发。
NS-3 的编译系统采用了 Waf 。它是用 Python 开发的新一代编译管理系统。读者不必掌握 python ,即可编译现有的 NS-3 项目。如果读者想要扩展现有的 NS-3 系统,大多数情况只需了解 Python 知识的很少且非常直观的一个子集。
对于想了解 Waf 细节的读者,可以访问 http://code.google.com/p/waf/ .

2.4   开发环境

 

正如以上所述, 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 套接字。
网站 http://cs.baylor.edu/~donahoo/practical/CSockets/ 包含了 Socket in C 书中所举例子的源码。
如果读者理解了该书中的前四章 ( 如果读者没有这本书的话,可以看上面网站中的源代码 ) ,您会更好的理解本教程的内容。这里还有一本关于多播套接字 (Multicast Sockets) 的书籍( Multicast Sockets, Makofske and Almeroth 。如果您想学习本书中有关多播的例子,该书里面有些资料您可能需要了解。



 

你可能感兴趣的:(NS-3笔录)