码迷,mamicode.com
首页 > 其他好文 > 详细

NS3之路---Tutorial解读---Beginning&&Concept

时间:2015-11-02 23:06:36      阅读:369      评论:0      收藏:0      [点我收藏+]

标签:

鉴于前面已经有写过了ns3安装的部分,因此也就不重新介绍beginning部分了。

第四章介绍了几个网络中非常重要的概念。对于网络比较熟悉的基本上一看就能懂,理解这几个概念对于理解ns3十分重要。下面就是tutorial第四章的相关翻译工作。

相关概念介绍

首先,在进行ns3程序开发之前,我们有必要对相关概念进行介绍。它们是网络中最基本的对象,因此必须理解。

节点-Node

在因特网术语中,连接到网络的计算设备被称为主机或者终端。但是由于ns3是网络模拟器,而非因特网模拟器,因此我们更习惯使用图论中的概念节点来描述。

节点对象的基类是使用C++编写的Node类,它提供各类方法模拟网络中的计算设备。同时,也允许用户向其内部添加功能(应用程序、协议栈、外部设备驱动…)以模拟更复杂的网络设备。

应用程序-Application

计算机软件分为两类:系统软件和应用软件。系统软件负责组织各类资源(内存、处理器、磁盘、网络…),应用软件则用于完成用户需求(期间可能需要与系统软件通信以使用其资源)。然而在ns3中,并没有操作系统的概念,因此系统软件也就不存在了,只剩下应用程序。

在ns3中,应用程序的基类为Application。但是在学习初期,我们直接使用两个具体的应用程序类,它们继承Application,分别为:UdpEchoClientApplication(客户端)和UdpEchoServerApplication(服务器)。它们可以用来产生和回应数据包。

信道-Channel

现实中,网络通信数据流经过的媒介乐意被称为“信道”。同样,在ns3中我们也需要有信道的概念。其基类使用Channel表示。信道用于管理通信子网之间、节点与通信子网之间的通信。

在ns3中,提供了具体的信道类,它们继承于Channel。分别为:CsmaChannel(载波侦听多路访问信道)、PointToPointChannel(点对点信道)、WifiChannel(wifi信道)。不同信道支持的协议不一样,如CsmaChannel在其通信媒介上提供载波侦听和冲突检测,可以模拟以太网的特点。

网络设备-Net Device

总所周知,当你需要使用电脑上网时,必须使用网络接口卡(NIC)。但是硬件网卡必须使用软件驱动,二者结合才能正常工作。在Linux操作系统中,它们的出现形式类似于eth0这样的。

在ns3中,网络设备的模拟包括硬件和软驱动两部分。而且必须将其“安装”在Node中,才能使Node通过Channel与外部通信。另外,一个Node允许有多个Net Device,通过多条Channel与外部进行通信。

网络设备在ns3中的抽象为NetDevice,它提供连接Channel和Node的方法。在ns3中的具体派生类有:CsmaNetDevice(CSMA网络设备)、PointToPointNetDevice(点对点网络设备)、WifiNetDevice(wifi网络设备)。不同的网络设备应该被用在Node与对应的的Channel之间。例如:CsmaNetDevice对应CsmaChannel。

拓扑帮助器-Topology Helpers

现实中的网络十分复杂,想要在ns3中模拟,那么就必须在Node、NetDevice、Channel之间搭建各种连接,还包括分配IP,等等工作。为了简化开发工作,ns3提供了Topology Helpers来帮助搭建网络拓扑,它为开发人员提供了一种更见方便的模式。

第一个ns-3脚本

以本人安装的ns-3.15为例,在…ns-3.15/examples/tutorial/first.cc,这是我们需要学习的第一个例子。关于该例子的解释,详细的请参考tutorial第25-33页。本文选出在上面没有介绍的部分进行说明。

  1.  NodeContainer

位于ns3命名空间下。它提供了管理、创建、访问Node对象的方法。程序中涉及的Create()即为创建节点的方法。

  1. PointToPointHelper

它属于我们前面提到的Topology Helper。在该脚本中构造一个点对点的链路,连接PointToPointNetDevice和PointToPointChannel。在实例化对象之后,使用了两个方法:SetDeviceAttribute()设置网络设备的属性,包括MTU、Address、bps、DateRate等;SetChannelAttribute()设置信道属性,具体可查阅www.nsnam.org/docs/release/3.24/doxygen

  1. NetDeviceContainer

网络设备容器,类似于NodeContainer,是网络设备的容器。但是它并非像NetContainer那样创造对象。而是通过将Channel和Node连接起来这样的一个过程构造网络设备卡,并将其附在节点和信道之间。最初在创建Channel时所设置的属性值会过渡到创建的属性中。下面的代码以容器为对象两两匹配。

NetDeviceContainer = PointToPointHelper.Install(NodeContainer);

  1. InternetStackHelper

网络协议部署器,属于前面提到的Topology Helper,在设置完整体拓扑结构之后,需要在节点中部署互联网协议(TCP、UDP、IP等)。下面的安装过程以节点容器为对象。

InternetStackHelper.Install(NodeContainer);

  1. Ipv4AddressHelper

负责ip地址的分配,同样为了方便,可以直接以节点容器为对象进行地址分配。目前该类对外只提供基础IP地址和子网掩码的设置功能,函数为SetBase()。

Ipv4AddressHelper.SetBase(IP, MASK);

具体分配是由Assign()方法完成的,以容器为对象,按顺序分配ip。当然,ip地址绑定在NetDevice上。这样就形成了网络接口,这些接口保存为Ipv4InterfaceContainer,同样也是一个容器类,对外提供统一的访问方式。

Ipv4InternetContainer = Ipv4AddressHelper.Assign(NetDeviceContainer);

如此一来,一个基本的网络架构便搭建完成。下面需要做的就是在网络中产生流量。

应用程序-Application

之前提到过,为了简化入门的过程,我们前面提到了两个具体类:UdpEchoServerApplication和UdpEchoClientApplication分别作为服务器和客户端,在ns3中为了减少开发人员的工作,分别提供了UdpEchoServerHelper和UdpEchoClientHelper,对于服务器Helper而言,需要在初始化的时候设定一个监听端口,然后将该服务安装到某一节点(而非节点容器)中,然后得到的UdpEchoServerApplication同样保存在ApplicationContainer容器中。

UdpServerHelper echoserver(PORT);

ApplicationContainer = UdpEchoServerHelper.Install(Node);

客户端Helper在初始化过程中需要设定访问的远程IP地址、远程端口。其次设定相关的属性(包大小、发包间隔等),最后则是将Client安装到节点上。

UdpEchoClientHelper echoclient (Remote IP, Remote Port);

UdpEchoClientHelper.SetAttribute(ATTRIBUTES);

ApplicationContainer = UdpEchoClientHelper.Install(Node);

需要注意的是Server和Client都保存在ApplicationContainer中,但是程序中是建立了两个ApplicationContainer,分开存放。对于同一容器内的对象均是按先来后到的顺序存放。

仿真-Simulator

基础架构搭建完毕、流量工程设置完毕,接着就可以启动网络,开始仿真。具有流量运动的仿真时间通过Client和Server的开始、关闭时间决定。仿真直接调用Run开始整个工程。

Simulator::Run();

但是在运行结束之后,必须将其关闭,以免造成内存泄露等问题。

Simulator::Destroy();

另外仿真器可以显示停止,在于对Stop()的调用。

Simulator::Stop();

 

程序运行之前一般先编译、再运行。

$ ./waf

$ ./waf –run YOUR-PROGRAMM

NS3之路---Tutorial解读---Beginning&&Concept

标签:

原文地址:http://www.cnblogs.com/yibobo-blog/p/4931408.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!