NS3系列—2———NS3笔录


http://www.cnblogs.com/lovemo1314/archive/2011/02/12/1951365.html


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

复杂的软件系统需要一种途径,用于管理和组织对现有代码和文档的修改。有很多种方法可以实现这种管理,读者可能已听说过某些版本控制软件, CVSConcurrent 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的主页上,读者也可以获取到有关 MercurialNS-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开始, NS3API提供了 python语言接口,但是所有的模块都是由 C++编写的。这里,我们假定读者掌握 C++知识和了解面向对象的相关概念。我们将在用到一些高级的概念或者读者可能不熟悉的语言特性、习惯用语或设计模式时适当地花些时间复习它们。但是我们也不希望本教程变成 C++教程,所以我们希望读者能够掌握基本的 C++命令。在网站上和书籍中,你可以找到无数的关于 C++知识的信息。
如果读者是个 C++新手,那么您在继续阅读本指南之前可能需要找一些 C++教程或者网站,至少必须熟悉一下 C++的基本语言特征。例如, Cplusplus教程
NS-3系统开发过程中使用了许多的 GNU 工具链( toolchain)组件。所谓软件的工具链是指在给定环境中可用编程工具的集合。如果读者想要快速地了解一下 GNU 工具链所包含的内容,请浏览 http://en.wikipedia.org/wiki/GNU_toolchain .  NS-3使用 gccGNU binutils,以及 gdb. 但是,我们并不使用 GNU编译系统工具( build system tools),既不用 make,也不用 autotools,而是使用 Waf来作为编译管理工具。
通常, NS-3使用者的工作环境为 Linux或者类 Linux系统。对于 Windows环境,有几种可以不同程度模拟 Linux环境的软件,比如 CygwinNS-3支持在 Cygwin环境下的开发。 Windows用户可以浏览 http://www.cygwin.com/获取该软件 (虽然有许多工程维护者使用 MinGW,但是 MinGW现在还没有得到官方支持 )Cygwin可以提供许多流行的 Linux系统命令。但是,某些情况下它也会出现问题,因为它毕竟只是 Linux系统的模拟。 CygwinWindows中其他程序的交互也有可能会导致程序出现问题。
如果读者正在使用 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)。如果您想学习本书中有关多播的例子,该书里面有些资料您可能需要了解。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值