本文主要介绍一些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教程(2):NS-3简单介绍相关推荐

  1. 求介绍matlab函数用法的书,MATLAB初学者教程--函数用法的简单介绍

    1.4 函数用法的简单介绍 1.4.1什么是函数 似乎很多人一听到函数这个词就会想到数学中的某个概念,然后对于恐惧数学的同学就开始打退堂鼓.在matlab当中到处可以用到函数,它的出现可以让我们用很简 ...

  2. python使用教程pandas-python之pandas简单介绍及使用(一)

    In [24]: s4[s4 > 9000] Out[24]: 数学 9001.0 dtype: float64 Series就先简要写到这,下面看pandas的另一种数据结构DataFrame ...

  3. linux加protobuf变量环境,protobuf简单介绍和ubuntu 16.04环境下安装教程

    protobuf简单介绍 protobuf是谷歌的开源序列化协议框架,结构类似于XML,JSON这种,显著的特点是二进制的,效率高,主要用于通信协议和数据存储等方面,算是一种结构化数据的表示方法. p ...

  4. WPF真入门教程23--MVVM简单介绍

    在WPF开发中,经典的编程模式是MVVM,是为WPF量身定做的模式,该模式充分利用了WPF的数据绑定机制,最大限度地降低了Xmal文件和CS文件的耦合度,也就是UI显示和逻辑代码的耦合度,如需要更换界 ...

  5. WML教程2:简单介绍关于WML文件的概念WML Decks

    WML教程2:简单介绍关于WML文件的概念WML Decks 这里简单介绍一个关于WML文件的概念,其他的细节问题会在后面的章节还详细介绍. 声明 由于WML语言继承于XML,所以一个有效的WML文档 ...

  6. Duilib教程-简单介绍

    在读这篇博客的时候,可能您已经对duilib有一定的了解.所以,我并不打算对duilib进行过多的介绍.它的内核首先由外国人编写,后来由国人一个小组接过来继续编写,于是就有了现在的Duilib. 1. ...

  7. Oracle10g SQL tune adviser简单介绍【转自ITPUB zhouwf0726】

    Oracle10g SQL tune adviser Oracle10g SQL tune adviser简单介绍 本文简单介绍下SQL Tuning Adviser的配置使用方法和一些相关知识点,如 ...

  8. xilinx oddr idelay用法简单介绍

    我们知道xilinx FPGA的selectio中有ilogic和ologic资源,可以实现iddr/oddr,idelay和odelay等功能.刚入门时可能对xilinx的原语不太熟练,在vivad ...

  9. (一)Ns3网络仿真软件简单介绍

    (一)Ns3网络仿真软件简单介绍 1.  什么是NS-3? NS是一个开源离散事件驱动网络模拟器.官方定义:(fromhttp://www.nsnam.org/) ns-3 is a discrete ...

  10. Linux系统Vi/Vim编辑器的简单介绍、安装/卸载、常用命令

    Linux系统Vi/Vim编辑器的简单介绍.安装/卸载.常用命令 1.介绍 vi(Visual Interface)编辑器是Linux和Unix上最基本的文本编辑器,工作在字符模式下.由于不需要图形界 ...

最新文章

  1. 年度书单盘点 | 史上最卷考研潮过后,这十本书让你不再迷茫
  2. Git提交到多个远程仓库(多看两个文档)
  3. mysql的别名可以动态么_mysql别名的使用
  4. Python之路【第一篇】:Python简介和入门
  5. django html直接调用的方法,如何在Django中使用AJAX从html正确调用函数/url?
  6. [IE 技巧] 显示/隐藏IE 的菜单/工具栏
  7. Javascrip—前端本地存储讲解(16)
  8. 矩阵中不重复的元素(51Nod-1024)
  9. 【高校宿舍管理系统】第二章 整合Mybatis和写CRUD的基本流程以及使用代码生成器生成Mapper等相关代码
  10. docker-compose 安装mongodb集群==多台服务器
  11. Hadoop HIVE 创建表
  12. c语言链表复数,[蓝桥杯][算法提高VIP]复数求和-链表初学者看过来(C语言代码)...
  13. python(九):函数、匿名函数 lambda
  14. 统计信号处理基础 习题解答3-9
  15. smp格式音频转换mp3软件方法
  16. 【毕业设计】基于STM32的智能药箱系统设计与实现 - 物联网 单片机
  17. 人民币符号是什么 人民币符号怎么打
  18. 基于stm32f103c8t6的Flash地址空间的数据读取
  19. switch游戏服务器设置
  20. 400 : perceived to be a client error 错误

热门文章

  1. 有农夫、猎人、挑夫、船夫每天都要走过一段索道
  2. 材料分享主题一:如何向上级汇报部门/组织架构
  3. E500 键盘粘键,倒水滑落键盘
  4. Linux面试必备基础知识(十一)——系统管理命令
  5. GEE学习记录~~~
  6. nordic NRFX驱动和NRF驱动
  7. linux 导入fpx证书,金贡荣获神秘奖章,结果写着FPX全队慈父,网友点歌以父之名...
  8. 达梦数据库备份方法总结学习
  9. [转载]菜鸟的草缸 篇一:器材篇(附鱼缸、过滤器、灯、草泥开箱过程)
  10. 作为一名蒻幾对2017noip提高的反思与总结