在孤独中享受寂寞,从寂寞中厮杀黎明!分享 http://blog.sciencenet.cn/u/duankesong 假如我不能,我一定要; 假如我一定要,我就一定能!

博文

网络仿真利器NS-2无师自通七天速成系列Ⅳ:NS-2网络控件及其使用方法

已有 9717 次阅读 2010-4-7 21:17 |个人分类:网络仿真|系统分类:科研笔记| 网络仿真, 网络模拟, NS-2, NS2

 
1,Simulator
在NS-2中,每个模拟过程需要一个类对整个过程进行控制和管理。这个类就是simulator类。这个类封装了节点(note),链路(link),代理(agent),数据分组格式等。整个模拟过程通过创建一个模拟类对象开始,通过调用这个对象的各个过程实现创建节点,构建拓扑结构图,对模拟的各个方面进行配置,定义事件,根据定义的事件模拟整个网络的运行等。
创建一个模拟器类对象的格式为:

Set ns [new simulator]

2,NS-2是一个事件驱动的模拟器,通常包括两部分:事件的触发时间和用来处理时间的功能函数的句柄。NS-2中模拟内部at过程的主要功能是在特定的时间调度事件处理函数处理事件。
Set ns [new simulator]
$ns at 5.0 “handle_fun”
$ns run
Proc handle_dun{}{puts”this is the event handle function”}
目前事件调度程序有四种事件调度器,分别为:链式,堆式,时间队列式,和实时,其中时间队列式为默认的。
本节相关概念为:
Set ns [new simulator]
Set now[$ns now]
$ns halt
$ns run
$ns at <time> <event>

3,节点note

在网络中将分布在不同地理位置的主机,交换机,路由器等网络设备在NS-2中统统抽象为一个节点,本节将介绍NS-2中节点的创建和配置方法。
根据网络节点之间通信方式的不同,分组的传输方式有两类,单播和多播。
单播节点的配置:
Set ns [ new simulator]
Set n0 [$ns node]
一个单播节点是由地址分类器和端口分类器两个tcl对象组成的。
地址分类器主要判断分组的地址和转发分组到下一个接收器。节点的地址模拟网络中的ip地址,有两种类型,默认为flat类型的,分类器中有一张shot表模拟网络中的路由表,一个shot码和一个节点地址相对应。
端口分类器的主要功能是按照分组的目的端口进行匹配,将分组传递给相应的agent对象。
多播节点的配置:
多播节点的配置,首先要把 Multicast属性值设置为: on,然后调用node过程创建多播节点。
创建一个多播节点的方法:
Set ns [new Simulator -Multicast on]
Set n1 [$ns node]
注意多播结构是一对多的通信,一个多播分组在转发时,分组需要被转发给多个目标对象,这就要求多播节点能够生成该分组的多个拷贝,多播节点包含复制器(Replicator)对象,并使用其生成分组的拷贝。
多播节点主要是由多播分类器和复制器组成。多播分类器根据源地址,和目的地址,将分组分类,富欧泊分类器内部保存了一张链式hash表,表的每一项包含源地址,多播目的地址,和slot码。

3.1节点的配置。
无线网了中的节点是移动节点,拥有不同于有限节点的各种特性。所谓节点的配置就是在节点创建之前设定节点的各项属性,可是使用模拟器对象ns的内部过程node-config{}来配置节点的属性。包括,所有节点的属性,无线节点的属性和卫星节点的配置。
与节点有关的命令
$ns node[<hier_addr>] 配置节点的类型 ,默认为没有分层的flat类型。
$node id 此命令是返回节点的id号。
$node node -addr 此命令是返回节点的地址。
$node reset 此命令重新设置绑定于节点的代理。
$node detach <agent> <null_agent> 将代理从这个节点上删除,然后在这个端口上绑定一个空代理。
$node attach <agent><optional:port_num> 节点自动为其分配一个端口号,并将该代理绑定到节点上。

3.2链路 (link)
链路层负责对物理层上传输的数据进行检错和纠错。NS-2中的数据链路层同时实现了物理层,数据链路层和部分网络层的功能。
本节主要讲述如何将不同的节点连接起来。完成整个网络拓扑的结构的构建。因此,一个完整的网络拓扑包括节点的创建和节点的连接(用链路)两个部分,即节点和链路是组成网络哟拓扑的两个要素。
网络设备见的通信方式可以分为单工,半双工和拳双工三种方式。单工是数据只能沿一个方向传输。任何时候都不能改变数据传输的方向,在NS-2中我们采用创建简单的单向链路simplex-link来进行模拟这种通信方式。
半双工通信方式中,数据可以单向传输,但必须交替进行。不常用。
全双工通信放式中,数据可以同时双向传输。在NS-2中我们通过创建双向链路duplex-link来进行模拟。
创建单向链路
Set ns [new simulstor]
$ns simples-link <node1> <node2><bandwidth><delay><queue_type>
上述代码创建了一条node1到node2的单向链路,并且定义了链路的一下各项特性。
<bandwidth> 创建链路的带宽。<delay> 延时<queue_type>队列类型
创建双向链路
Set ns [new simulstor]
$ns duplex-link <node1> <node2><bandwidth><delay><queue_type>
等价于
Set ns [new simulstor]
$ns simples-link <node1> <node2><bandwidth><delay><queue_type>
$ns simples-link <node2> <node1><bandwidth><delay><queue_type>
本节相关命令:
$ns simples-link <node1> <node2><bandwidth><delay><queue_type>
$ns duplex-link <node1> <node2><bandwidth><delay><queue_type>
$ns simples-link <node1> <node2><option><args>
$ns duplex-link <node1> <node2><option><args>
以上两个命令主要设置链路的属性,主要包括:方向,颜色,标签和队列的位置。设置这些主要用于nam的动画显示。

 
4.代理 agent
NS-2中通过创建节点和链路来构建网络拓扑结构,然后就可以在各个节点间和链路上产生业务流。而NS-2中采用定义路由,代理和网络应用层来模拟实际的业务流。
代理可以构建和销毁网络层的分组,是网络层的起点和终点,同时,代理还可以实现各种不同层的网络协议。NS-2中采用“/”作为类名的分割符的。
Agent类是有c++和otcl共同实现的。
Udp和tcp是tcl/tp协议族在传输层主要的两个协议。Udp协议 无连接,但传输速度快。Tcp基于三次握手协议但传输速度没有udp速度快。                                                                               
Udp代理 agent/udp类agent类的一个子类,模拟了udp协议的主要功能。NS-2中创建和设置udp代理可以分为以下几个步骤。
步骤一:创建一个agent/udp对象并将其绑定到相应的节点上作为分组的发送器。
步骤二:设置agent/udp的部分内部变量。
步骤三:创建一个agent/null对象并将其绑定到相应的节点上作为分组的接受器。
步骤四:在两个发送和接受代理之间创建connection连接。
以下tcl代码具体显示了如何创建。Udp代理,激射节点n0和n1,以及模拟器对象已建立。
Set udp0[new Agent/UDP]
$ns attach-agent $n0 $udp0
$udp0 set packetsize_536
Set null0[new Agent/NULL]
$attch – agent $n1 $ null0
$ns connect $udp0 $null0
TCP代理 TCP代理分为单向代理和双向代理,这里主要是单向代理。 agent/TCPSink类为例。NS-2中创建和设置TCP代理可以分为以下几个步骤。
步骤一:创建一个agent/TCP对象,作为分组的发送器。
步骤二:设置Agent/TCP对象的部分内部变量。
步骤三:创建一个agent/TCPSink对象,作为分组的接受器。
步骤四:在两个发送和接受代理之间创建connection连接。
以下tcl代码具体显示了如何创建TCP代理,激射节点n0和n1,以及模拟器对象已建立。
Set tcp[new Agent/TCP]
$ns attach-agent $n0 $tcp
$tcp set fid_1
$tcp set window_20
Set sink[new Agent/TCPSink]
$attch – agent $n1 $ sink
$ns connect $tcp $sink
与Agent相关的一些命令
Set agent [new Agent/agent type]
$ns attach-agent<node><agent>
$agent port
$agent dst –port
$agent attach –app <s_type>
$ns connection<src><dst>
$ns create-connect<srctype><src><dsttype><dst><pktclass>
$agent attach-trace<file>

5应用层
在NS-2中,应用层建立在传输层之上。分为两大类。流量产生器(traffic generator)和应用模拟器(simolated application)
流量产生器一般用在udp代理之上。应用模拟器代理一般在tcp代理之上。
流量产生器:
一般有四种udp代理:指数分布流量代理器,pareto分布流量产生器。固定比率流量产生器。Trace文件流量产生器。
下面是一个例子说明流量产生器的使用,本节配置的是固定比率cbr流量发生器
步骤一:创建代理层对象并将传输层代理绑定到相应的节点上。创建 绑定 连接
Set src[new Agent/UDP]
Set sinl[new Agent/NULL]
$ns attach-agent $n0 $src
$ns attach-agent $n0 $link
$ns connect $src $sink
步骤二:创建流量产生器对象,设置对象属性,并将其与传输层的源代理绑定
可以通过调用application类的方法,也可以使用agent类中的方法
Set e[new Application/traffic/cbr]
$e set packetsize_300
$e set rate_32kb
$e set random_On
$e attach-agent $src
或:
Set e[new Application/traffic/cbr]
$e set packetsize_300
$e set rate_32kb
$e set random_true
$e attach-app $e
步骤三:启动和停止流量产生器
$ns at “$e start”
$ns at 5.0 “$e stop”
应用模拟器:
主要介绍ftp应用模拟器和telnet应用模拟器。
ftp模拟器:对应的Otcl类为:Application/FTP,主要用来模拟大量数据的传送。
telnet应用模拟器:telnet对象有两种分组的方法,如果interval_为零,那么分组发送的时间间隔均值为interval_ 的指数分布,如果为零,那么分组的发送时间间隔的选择按住奥tcplib经验分布,下面以tcp为例
set src[new Agent/TCP]   ;#创建一个TCP源代理,作为tcp分组的发送者。
set sink[new Agent/TCPSink] ;#创建一个tcpsink对象,作为tcp分组的接受者
$ns attach-agent $no $src ;#绑定节点
$ns attach-agent $n1 $sink ;#绑定节点
$ns connection $src $sink ;#连接
Set ftp1[new Application/FTP] ;#;创建
$ftp attach-agent $src   ;#绑定代理
$ns at 0.5 “ftp start”    ;#启动


https://blog.sciencenet.cn/blog-428172-309839.html

上一篇:网络仿真利器NS-2无师自通七天速成系列Ⅱ: NS-2实例编写
下一篇:附录4:诺基亚研究中心招聘实习生
收藏 IP: .*| 热度|

0

发表评论 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-7-28 04:29

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部