NS2使用手册:NS by Example 中文翻译
章节:Overview
NS是一个事件驱动网络模拟器,由UC伯克利开发用来仿真多种IP网络。它应用了网络协议比如TCP和UPD,流量源操作比如FTP,Telnet,Web,CBR和VBR,路由器队列管理结构比如Drop Tail,RED和CBQ,路由算法比如Dijkstra算法等等。NS也使用了多点传送以及一些MAC层协议用来做LAN仿真。NS工程现在是VINT工程的一部分,开发工具进行仿真结果展示,分析和以NS格式转换生成网络拓扑。目前,NS2(version 2)用C++和OTCL编写(MIT开发的面向对象的Tcl过程语言)。这篇文档简要的讨论了NS的基本结构,解释了NS的细节(大部分以例子为主)。大部分图片用来描述NS基本结构和网络组件基本来自 5th VINT/NS Simulator Tutorial/Workshop和NS Manual (正式称作“NS文档”),根据需要修改了一些。想知道NS的更多信息和相关工具,请访问VINT project home page。
图一可以看到,在简化的用户眼中,NS是面向对象(OTcl)脚本解释器,拥有仿真事件调度和网络组件对象库,和网络设置(管道)模块库(实际上,管道模块用来当做基本仿真对象的一个功能)从另个角度讲,为了使用NS,你需要使用OTcl脚本编程。为了设置和运行一个仿真网络,一个用户应当写一个OTcl脚本初始化一个事件调度器,使用网络对象和库中的管道功能设置网络拓扑,并且通过事件调度器告诉流量源何时开始和结束发送包。“管道”名词用来指网络设置,因为设置一个网络就是探索可能的数据路径在网络对象之中,通过设置一个对象的“邻接”指针指向一个恰当对象的地址。当用户想创建一个新网络对象,他可以轻松地通过写一个新对象或者从对象库中创建一个复合物,并且探索对象的数据路径。这可能听起来是很复杂的工作,但是OTcl管道模块实际上让工作变得非常简单,NS的强大之处就来自这个管道。
除了网络对象,另一个NS的主要组件就是事件调度器。NS里的一个事件就是一个唯一的ID包,包括调度时间和掌控事件的对象指针。在NS中,一个事件调度器跟踪仿真时间和管理当前时间在事件调度队列中的事件,通过引用适当的网络组件,经常是发布这些事件的组件,并且让他们做一些适当的活动和事件指向的包进行沟通。网络组件和另一个流过的包通信,其实这并不消耗实际仿真时间。所有的网络组件需要花费一些仿真时间处理一个包(即需要一个延迟)使用事件调度器为这个包发布一个事件并且在做任何处理此包的活动前等待此事件解除。举个例子,一个网络选择组件(switch)仿真一个选择过程,通过20ms的选择延迟发布一个包事件给调度器被选中,就像一个事件20ms以后到达一样。调度器20ms后解除事件并把它给选择组件,选择组件会把包发送给一个合适的输出链路组件。调度器另一个用处就是定时器。几个例子,TCP需要一个定时器来跟踪包发送的重传时间是否到达。(相同的TCP包发送但不同的NS ID包)。定时器使用事件调度器像延迟一样类似的用法。他们的唯一区别就是定时器测量一个时间值通过一个包沟通,并且一段时间后做一个有关那个包的适当动作,并不会仿真一个延迟。
NS并不仅仅用OTcl编写也用C++。由于效率原因,NS分离了控制和数据的路径使用。为了减少包和事件处理时间(不是仿真时间),数据路径的事件调度器和基本网络组件对象使用C++编写及编译的。这些编译对象通过OTcl链路对OTcl解释器是可用的,OTcl链路为每个C++对象创建了OTcl的匹配对象并且使由C++特定的控制功能和配置变量就像对应的OTcl对象的成员函数和成员变量。通过这种方法,C++对象的控制和OTcl一致。这也可能增加一个成员函数和变量给一个C++链接OTcl对象。C++对象不需要在仿真中控制或者内部被另一个对象使用时不必转换成OTcl,同样的,一个对象(不是数据路径)能够完全用OTcl使用。图2展示了C++和OTcl的对象等级,一个图中需要注意的地方是C++对象有一个OTcl链接程序形成了等级制度,会有一个OTcl对象和C++相似匹配。
图三展示了NS的基本结构。这张图片中一个通用用户(不是NS开发者)可以被认为站在左侧底部的角落,在OTcl库中使用仿真对象,用Tcl设计和运行仿真,事件调度器和大部分网络组件均使用C++,并且通过OTcl链接器对于OTcl可用。所有东西在一块创造了NS,一个使用网络模拟器库的面向对象的Tcl解释器。
这个章节简要的阐述了NS的通用结构和架构。这一点上,你可能奇怪如何获得NS仿真结果,就像图1所见,当一个仿真结束后,NS生成了一个或多个基于文本的输出文件,包含了详细的仿真数据。如果在一个输入Tcl脚本或者OTcl专门做。数据可以用来做仿真分析,(两个仿真结果分析例子将在下个章节展示),或者作为一个图仿真展示工具叫做(Network Animator,NAM)的输入,也是VINT的一部分。NAM有一个良好的图用户接口,相当于一个CD播放器(播放,快进,倒退,暂停等等),并且有个播放速度控制器。甚至,它可以以图的形式展示一些信息比如吞吐量和每条链路的丢包数,虽然图信息不能用来做精准的仿真分析。