NS-3教程(2):NS-3简单介绍

本文主要介绍一些NS-3入门性质的知识。

简介


什么是NS-3?

ns-3是一个离散事件驱动网络模拟器,主要作为研究和教学使用。ns-3是基于GNU GPLv2下的免费的开源软件。ns-3意图最终能够完全取代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模块等等。

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进行数据分析

资源


编译系统Waf

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

开发环境

通常,NS-3使用者的工作环境为Linux或者类Linux系统,NS-3的脚本由C++或者Python编写。从NS-3.2开始,NS3的API提供了python语言接口,但是所有的模块都是由C++编写的。

套接字编程

我们假定读者对本教程所举例子中的Berkeley套接字API基本熟悉。如果您不了解套接字,我们建议您学习一下这些API和一些常见的使用例程。

概念概述


节点 (Node)

在因特网术语中,任何一台连接到网络的计算设备被称为主机,亦称为终端。 ns -3是一个网络模拟器,而非一个专门的因特网模拟器,为此我们避开术语“主机”,因为这个词太容易让人联想到因特网和及其相关协议。因此,我们选用了一个来源于图论,在其他网络模拟器中亦广泛使用的术语:节点。
ns-3中基本计算设备被抽象为节点。节点由C++中的Node类来描述。Node类提供了用于管理仿真器中网络组件表示的各种方法。
你应该将节点设想为一台可以添加各种功能的计算机。为了使一台计算机有效地工作,我们可以给它添加应用程序,协议栈,外设卡及驱动程序等。NS3采用了与此相同的模型。

应用程序 (Application)

计算机软件通常可分为两大类: 系统软件和应用软件。系统软件根据计算模型配置和管理计算机中的各种资源,例如内存,处理器周期,硬盘,网络等。系统软件通常并不直接使用这些资源来完成用户任务。用户往往需要运行应用程序来完成一些特定的任务,而应用程序需要使用由系统软件控制的资源。
通常,系统软件和应用软件的界线表现为特权级的变化,而这种变化是通过操作系统的自陷功能(operating system traps)来实现的。在ns-3中并没有真正的操作系统的概念,更没有特权级别或者系统调用的概念。然而,我们有应用程序的概念。正如“现实世界”中在计算机上运行应用程序以执行各种任务一样,ns-3仿真环境中的应用程序在节点上运行来驱动模拟过程。
在ns-3中,需要被仿真的用户程序被抽象为应用。应用在C++中用Application类来描述。这个类提供了管理仿真时用户层应用的各种方法。开发者应当用面向对象的方法自定义和创建新的应用。在第一个示例脚本,我们会使用Application类的实例:UdpEchoClientApplication 和UdpEchoServerApplication。也许你已经猜到了,这些应用程序包含了一个client/server应用来发送和回应仿真网络中的数据包。

信道

在现实世界中,人们可以把计算机连接到网络上。通常我们把网络中数据流流过的媒介称为信道。当你把以太网线插入到墙壁上的插孔时,你正通过信道将计算机与以太网连接。在ns-3的模拟环境中,你可以把节点连接到代表数据交换信道的对象上。在这里,基本的通信子网这一抽象概念被称为信道,在C++中用Channel类来描述。
Channel类提供了管理通信子网对象和把节点连接至它们的各种方法。信道类同样可以由开发者以面向对象的方法自定义。一个信道实例可以模拟一条简单的线缆(wire),也可以模拟一个复杂的巨型以太网交换机,甚至无线网络中充满障碍物的三维空间。
我们在本教程中将使用几个信道模型的实例,包括:CsmaChannel, PointToPointChannel和WifiChannel。举例来说,CsmaChannel信道模拟了用于一个可以实现载波侦听多路访问通信子网中的媒介。这个信道具有和以太网相似的功能。

网络设备

以前,如果想把一台计算机连接到网络上,你就必须买一根特定的网络线缆,并在你的计算机上安装称为外设卡的硬件设备。能够实现网络功能的外接卡被称为网络接口卡(网卡)。现在大多数计算机出厂时已经配置了网卡,所以用户看不到这些的模块。
一张网卡如果缺少控制硬件的软件驱动是不能工作的。在Unix(或者Linux)系统中,外围硬件被划为 “设备”。设备通过驱动程序来控制,而网卡通过网卡驱动程序来控制。在Unix和Linux系统中,网卡被称为像eth0这样的名字。
在ns-3中,网络设备这一抽象概念相当于硬件设备和软件驱动的总和。NS3仿真环境中,网络设备相当于安装在节点上,使得节点通过信道和其他节点通信。像真实的计算机一样,一个节点可以通过多个网络设备同时连接到多条信道上。
网络设备由C++中的NetDevice类来描述。NetDevice类提供了管理连接其他节点和信道对象的各种方法,并且允许开发者以面向对象的方法来自定义。我们在本教程中将使用几个特定的网络设备的实例,它们分别是CsmaNetDevice, PointToPointNetDevice, 和 WifiNetDevice。正如以太网卡被设计成在以太网中工作一样,CsmaNetDevice被设计成在csma信道中工作,而PointToPointNetDevice 在PointToPoint信道中工作,WifiNetNevice在wifi信道中工作。

拓扑生成器

在现实的网络中,你会发现主机已装有(或者内置)的网卡。在ns-3中你会发现节点附加了网络设备。在大型仿真网络中,你需要在节点、网络设备和信道之间部署许多连接。
既然把网络设备连接到节点、信道,配置IP地址等等事情在ns-3是很普遍是任务,那么我们干脆提供了“拓扑生成器”来使这个工作变得尽可能的容易。举例来说:创建一个网络设备,配置一个MAC地址,把此网络设备装载到节点上,设置节点的协议栈,以及连接网络设备到一个信道,这些事情都需要许多分立的ns-3核心操作。而当需要把许多设备连接到多点信道,在网际间将单个网络进行连接,则需要对ns-3核心进行更多更多的分立操作。我们提供了拓扑生成器来整合这些大量分立的步骤,使其成为一个简单易用的操作。很明显,这样做可以极大地方便用户。

参考文章

http://www.cnblogs.com/lovemo1314/category/282691.html

官方文档 https://www.nsnam.org/documentation/。

个人主页: www.nicetony.space

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