ns-2与TCP拥塞模拟 之四 ns-2仿真脚本中的元素
一般的网络仿真脚本,需要有模拟器类(Simulator类)、事件、节点、链路、代理、应用等元素。
1)模拟器类(Simulator类)
在ns-2中,每个仿真过程都需要一个类对整个过程进行控制和管理,这个类就是模拟器类(Simulator类)。整个模拟过程从创建一个模拟器类对象开始,通过调用这个对象的各种过程实现:创建节点、构建拓扑结构图、对模拟的各方面进行配置、定义事件、根据定义的事件模拟整个网络的运行等。
对应的脚本语句如下(通常都在脚本的开头部分):
set ns [new Simulator] ;#新建一个Simulator对象(如要使用这个ns对象,写作$ns)
模拟器类对象创建的同时,还会完成以下相关的初始化操作:
(1)初始化分组格式(调用create_packetformat);
(2)创建一个事件调度器(scheduler,默认为calendar scheduler);
(3)创建一个空代理(null agent)。
2)事件和事件调度器
目前ns-2支持4种事件调度器:
(1)链表式(linked-list)调度器;
(2)堆式(heap)调度器,适用于大量事件的情况;
(3)时间队列式(calendar)调度器,这个是默认的事件调度器;
(4)实时(real-time)调度器。
常用的语句有如下4种:
$ns halt ;#停止或暂停调度器
$ns run ;#启动调度器
$ns at <time> <event> ;#在一个特定时间<time>调度一个事件<event>
$ns cancel <event> ;#取消<event>事件,将事件从准备好的调度器中删除
这样,就很容易理解示例1中“$ns at 5.0 "finish"”、“$ns run”这样的语句了。
3)节点
根据网络节点之间通信方式的不同,分组的传输方式有两类:单播(unicast)和多播(multicast),在ns-2中对应单播节点和多播节点。以下仅介绍最相关的单播节点。
一个单播节点本质上是一个组合对象,主要包括两个Tcl对象:地址分类器(address classifier)和端口分类器(port classifier)。节点主要完成以下操作。