NS3网络模拟器
学习NS3最好的途径肯定是阅读官方给定的文档啦。目前NS3官网上给出了Tutorial、Mannual、Module三个pdf,对于新手的我而言,tutorial显然是比较好的入门教材,于是便开始阅读tutorial,同时进行部分的翻译,并夹杂一些个人想法。
ns-3.2-入门基础篇
- 介绍
NS3是一个离散事件驱动的网络模拟器,旨在为学术研究和教育提供帮助。 ns3是一个开源项目,起源于2006年。
对于ns3的新用户而言,从详细的英文技术细节手册上收集信息并将其转化为仿真环境中有帮助的信息有时候是一件麻烦而且冗长的事情,因此本文翻译ns3-tutorial,指导意义在于为ns3的中文新用户提供一个方便的学习接口。在下面的内容中,我们将会逐步搭建ns3提供的一些examples,并解释其中的相关概念和特点。
在开始之前,我们需要先了解以下几点:
l ns3开源,旨在维护一个开放的网络模拟环境以供研究学者们分享和学习。
l ns3是一个新的模拟器,它并不向后兼容ns2。虽然二者都是c++编写,但是ns3却并不支持ns2中的API。另外ns2中的一些模块已经转移到了ns3中,该项目在搭建ns3的同时也会继续维护ns2,在二者之间研究过渡和集成机制。
1.1 关于ns3
Ns3开发出来是为了提供一个开放的、可扩展的网络模拟平台供研究以及教育所用。简单来说,ns3为用户进行网络实验提供了基础的包发送模型以及一个仿真平台。之所以选择使用ns3,是因为很多时候用户无法在真实的网络系统中验证自己的想法,而ns3刚好提供了这样一个非常近似于真实网络性能的高度控制、可重用的网络模拟平台。某些用户可能注意到了目前ns3中的有效模块主要在于因特网中的协议以及网络工作过程,但是这里必须说明的是ns3并不仅仅局限于模拟因特网环境,一些用户也用它模拟非因特网系统。
如今,开源社区已经有很多的网络模拟工具,ns3和他们的主要区别如下:
l ns3由一系列的功能库文件构成,可以根据需要将其组合使用,同时也可以与外部库文件组合使用。而某些其它网络仿真器则直接提供一个单一、集成的图形化接口给用户使用。所以相对来说ns3更加灵活以及模块化。虽然ns3鼓励用户在命令行中进行工作,这并不意味着ns3没有对应的图形仿真工具。
l ns3主要运行于linux操作系统下(也支持FreeBSD和Cygwin(windows平台下使用)),另外,windows下面的VS支持目前在开发中。
l ns3并非由公司资助,而来自于ns3使用者的尽力支持。
1.2 对于ns2用户
对于熟悉ns2的用户而言,从ns2过渡到ns3最大的转变可能在于对脚本语言的选择。在ns2上运行纯粹的c++语言是不可能的,因为ns2中的组件既有c++编写也有OTcl编写的。而ns3全部由c++编写,因此脚本语言支持c++和python。同时ns3也能产生pcap包追踪文件,该文件用于对包进行分析。
ns2用户一个比较常见的问题是:我应该继续使用ns2还是转移到ns3?本文的回答是,如果你不是对ns2特别情有独钟的话,在ns3下面更具有创造力:
l ns3由一群积极主动的人维护和发展,而ns2的主要代码几乎在10年内没变过。
l ns3提供了ns2中没有的特点,如用户自定义源码执行环境。
l ns3提供了更低的抽象,这样便于理解真实系统中各部分是如何组建在一起的。
Ns2历史较长,因此它拥有的模块数远多于ns3。但ns3在某些模块中的细节比ns2更完善。并且对代码实现的支持是ns2所不能比拟的优势。假设ns2中需要c++实现的模块,那就必须迁移到ns3中进行实现。
1.3 资助
TODO
1.4 组织结构
l 下载并编译ns3;
l 运行一些基本例子;
l 查看输出,对其进行分析、调整。
2. NS3资源
2.1 网络资源
NS3用户必须要知道的网络资源:
主网站:http://www.nsnam.org (可以获取到ns3系统的基本信息)
文档网站:http://www.nsnam.org/documentation (系统架构、类等文档)
Wiki百科:http://www.nsnam.org/wiki
ns3源码:http://code.nsnam.org
2.2 Mercurial
管理和组织系统底层的代码以及文档是非常重要的一件事,类似这样的工具中Concurrent Version System(CVS)应该是比较出名的。ns3提供了类似的源码管理器mercurial,同时mercurial也可以用于下载ns3源码。关于mercurial的信息也可以在ns3的主页上找到。
Mercurial主页:http://www.selenic.com/mercurial
2.3 Waf
一旦源码下载完成,就需要对其进行编译生成可用工程。在linux众多编译工具里面,广为人知的应该是make,但是make适用于小型系统。于是ns3工程选额使用waf编译系统。
Waf相关链接:http://code.google.com/p/waf
2.4 开发环境
Ns3脚本语言为c++和python,因此ns3用户最好在linux环境下进行开发。当然,对于windows下的用户,我们也提供了一个linux-like的环境Cygwin(在一定程度上模拟linux环境)+MinGW(编译器,但目前貌似并不支持)。
Cygwin网址:http://www.cygwin.com
2.5 套接字编程
在本文的一些例子中会用到相关套接字API,如果你对套接字比较陌生,建议先熟悉socket(TCP/IP Sockets in C, Donahoo and Calvert)。