2.4 NS2现有的仿真元素
本部分从网络拓扑仿真、协议仿真和通信量仿真等方面介绍NS的相应元素:
⑴网络拓扑主要包括节点、链路
NS的节点由一系列的分类器(Classifier,如地址分类器等)组成,而链路由一系列的连接器(Connector)组成。
⑵ 在节点上,配置不同的代理可以实现相应的协议或其它模型仿真
如NS的TCP代理,发送代理有:TCP,TCP/Reno,TCP/Vegas,TCP /Sack1,TCP/FACK,TCP/FULLTCP等,接收代理有:TCPSINK,TCPSINK/DELACK。TCPSINK /SACK1,TCPSINK/SACK1/DELACK等。
⑷在链路上,可以配置带宽、时延和丢弃模型
NS支持:Drop-tail(FIFO)队列、RED缓冲管、CBO(包括优先权和Round-robin 调度)。各种公平队列包括:FQ,SFQ,DRR等。
⑸ 通信量仿真
NS提供了许多通信应用,如FTP,它产生较大的峰值数据传输;Telnet则根据相应文件随机选取传输数据的大小。此外,NS提供了四种类型的通信量产生器:①EXPOO,根据指数分布(On/Off)产生通信量,在On阶段分组以固定速率发送,Off阶段不发送分组,On/Off的分布符合指数分布,分组尺寸固定;②POO,根据Pareto分布(On/Off)产生通信量,它能用来产生长范围相关的急剧通信量;③CBR,以确定的速率产生通信量,分组尺寸固定,可在分组间隔之间产生随机抖动;④Traffic Trace,根据追踪文件产生通信量[9]。
2.5 NS2的功能模块
NS2仿真器封装了许多功能模块,最基本的是节点、链路、代理、数据包格式等等,下面分别来介绍一下各个模块。
(1)事件调度器:目前NS2提供了四种具有不同数据结构的调度器,分别是链表、堆、日历表和实时调度器。
(2)节点(node):是由TclObject对象组成的复合组件,在NS2中可以表示端节点和路由器。
(3)链路(link):由多个组件复合而成,用来连接网络节点。所有的链路都是以队列的形式来管理分组的到达、离开和丢弃。
(4)代理(agent):负责网络层分组的产生和接收,也可以用在各个层次的协议实现中。每个agent连接到一个网络节点上,由该节点给它分配一个端口号。
(5)包(packet):由头部和数据两部分组成。一般packet只有头部,没有数据部分[10]。
3 Tcl和OTcl
3.1 Tcl语言简介
Tcl(Tool Command Language)是一种很通用的脚本语言,发音为“Tickle”,它几乎在所有的平台上都可以解释运行,且功能强大。它实际包含了两个部分:一个语言和一个库。在NS2中主要是用来描述脚本的,简单地说就是用来描述要仿真的网络环境和参数等[11]。因此本节主要是简要介绍一下Tcl的使用方法。
首先,Tcl是一种简单的脚本语言,主要适用于发布命令给一些交互程序,如文本编辑器、测试器和shell。语法简单,扩充性强,Tcl可以创建新的过程以增强其内建命令的能力。
其次,Tcl也是一个库,可以被嵌入应用程序,Tcl库包含了一个分析器,用于执行内建命令的例程和用户扩充(定义新的过程)的库函数。应用程序可以产生Tcl命令并执行,命令可以由用户产生,亦可以从用户接口的一个输入中读取(按钮或菜单等)。但Tcl库收到命令后将它分解并执行内建的命令,经常会产生递归的调用。
3.2 Tcl语言的特点
Tcl语言主要有以下三个特点:
(1)可扩展性。能够让每个应用程序很方便的把自己的功能加到它的基本功能中,并且让应用程序的特定功能使用起来非常自然,就好像一开始就是为这个语言设计的一样。
(2)简单通用性。能很方便的与许多不同的应用程序配合工作,而不会限制应用程序的功能。 网络拥塞控制经典算法RED仿真(5):http://www.youerw.com/tongxin/lunwen_8262.html