NETWORK SIMULATOR(NS)概述
网络论坛
www.netforum.com.cn
Copyright ©2003 www.netforum.com.cn All Rights Reserved
NS软件概述
NS是一个由UC Berkeley开发的用于仿真各种IP网络的为主的优秀
的仿真软件。
该软件的开发最初是针对基于UNIX系统下的网络设计和仿真而进
行的。
Copyright ©2003 www.netforum.com.cn All Rights Reserved
NS的结构
Copyright ©2003 www.netforum.com.cn All Rights Reserved
Tcl与Tk编程环境
Tcl与Tk是安装在Unix/Linux环境下的两个包,它们一起构成
了一套开发系统应用程序和图形用户界面接口(GUI)应用程
序的环境。
Tcl的全称是Tool Command Language。
Tk是Tcl在X Window环境下的扩展,它包含了Tcl的全部的C
库函数,以及支持X Window的窗口、控件等C库函数,为用
户开发图形用户界面提供了方便。
Tcl是解释执行的脚本语言。它的实现依赖于Tcl内部的C函数
库。添加新的C函数就可以扩充Tcl的命令和功能,是扩展性非
常强的脚本程序设计语言。
Tcl解释器把用户输入的命令和程序语句进行初步分析,然后
调用C函数库里的相应函数来执行,输出结果。
Tcl是无强制类型的脚本语言,一切变量,不论整型,浮点型
等,都以字符串的形式存储。
Copyright ©2003 www.netforum.com.cn All Rights Reserved
Tcl的面向对象扩展——OTcl
Otcl是Tcl的面向对象(Object Oriented)的扩展,在Otcl中
加入了类的概念。
对象是类的实例,它有自己的属性(成员变量,InstVar)和
自己的内部操作(成员函数,InstProc)。
对象具有继承、封装、多态性和动态绑定等性质。
面向对象
的加入使得原始的Tcl变得更加强大,更加方便
使用。
虽然和C++中对象和类以及其他面向对象程序设计语言中的概
念相同,但是具体实现和语法却存在很大的差别。
Copyright ©2003 www.netforum.com.cn All Rights Reserved
C++和Otcl两种编程语言来实现NS
模拟器有两方面的事情需要做
一方面,具体协议的模拟和实现:需要一种程序设计语言,它
需要很有效率的处理字节(Byte),报头(Packet Header)
等信息,需要应用合适的算法在大量的数据集合上进行操作。
为了实现这个任务,程序内部模块的运行速度(run-time
speed)是非常重要的,而运行模拟环境的时间、寻找和修复
bug的时间,重新编译和运行的时间(run-around time)就
显得不是很重要了。
另一方面,许多网络中的研究工作都围绕着网络组件和环境的
具体参数的设置和改变而进行的,需要在短时间内快速的开发
和模拟出所需要的网络环境(scenarios),并且方便修改和
发现、修复程序中的Bug。在这种任务中,run-around time
就显得很重要了,因为模拟环境的建立和参数信息的配置只需
要运行一次。
Copyright ©2003 www.netforum.com.cn All Rights Reserved
C++和Otcl两种编程语言来实现NS
为了满足以上两种不同任务的需要,NS的设计实现使用了两
种程序设计语言,C++和Otcl。
这两种程序设计语言都是面向对象(object oriented)的程序
设计语言 。
C++程序模块的运行速度非常快,是强制类型的程序设计语言
(变量严格定义整型,浮点型和字符、字符串类型),容易实
现精确的、复杂的算法,但是修改和发现、修正bug所花费的
时间要长一些,因为它比较复杂。该特性正好用于解决第一个
方面的问
。
Otcl是脚本程序编写语言,是无强制类型的,比较简单,容易
实现和修改,容易发现和修正bug,虽然它的运行速度和C++
的模块相比要慢很多。该特性正好用于解决第二方面的问题。
Copyright ©2003 www.netforum.com.cn All Rights Reserved
C++和Otcl两种编程语言来实现NS
最基本的,用OTcl来实现:
对模拟环境的配置、建立和在模拟中只运行一次的地方。
如果可能,用Otcl脚本来随意操作已经存在的C++对象。
最基本的,用C++来实现:
如果你需要在模拟中对每一或大量数据包进行处理。
如果你想修改已存在的C++对象的属性和功能。
Copyright ©2003 www.netforum.com.cn All Rights Reserved
C++和Otcl的连接 -- 类成员变量的绑定
变量绑定的目的,是用户通过修改和设置脚本中的Otcl对象中
的成员变量时,该对象对应的“影子”C++对象中的成员变量也
相应的变化,保持一直。变量绑定是TclObjet类中的成员函
数。变量绑定在构造函数中完成。
ASRMAgent::ASRMAgent()
{
bind(“pdistance_”,&pdistance_);
bind(“requestor_”,&requestor_);
bind_time(“lastSent_”,&lastSessSent_”);
bind_bw(“ctrlLimit_”,&ctrlBWLimit_);
bind_bool(“running_”,&running_);
}
Copyright ©2003 www.netforum.com.cn All Rights Reserved
C++和Otcl的连接 --两种对象成员函数的对应
类似于变量绑定,Otcl对象中也要创建相应的成员函数,来达
到调用对应的C++对象中的成员函数的目的。
这种让成员函数之间一一对应的机制,是通过在该对象中的
command()函数来实现的。由于command()是TclObjet的成
员函数,所以它的派生类每个对象都可以重写该函数。
Int ASRMAgent::command(int argc,const char* const*
argv) {
Tcl& tcl=Tcl::instance();
if(argc==3) {
if(strcmp(argv[1],”distance?”)==0) {…………}
}
return (SRMAgent::command(argc,argv); }
Copyright ©2003 www.netforum.com.cn All Rights Reserved
NS仿真原理--网络组件
网络组件分为简单网络组件和复合网络组件。
NsObject是所有基本网络组件的父类,而它本身的父类是
TclObject类。这个类的对象有一个基本的功能,就是处理数
据包(Packet)。
所有的基本网络组件可以划分为2类,分类器(Classifier)和
连接器(Connector)。它们都是NsObject的直接子类,也
是所有基本网络组建的父类。
分类器(Classifier)的派生类组件对象包括地址分类器
(AddrClassifier)和多播分类器(McastClassifier)等。
连接器(Connector)的派生类组件对象包括队列
(Queue),延迟(Delay),各种代理(Agent),和追踪
对象类(Trace)。
Copyright ©2003 www.netforum.com.cn All Rights Reserved
NS仿真原理-- 网络组件
Copyright ©2003 www.netforum.com.cn All Rights Reserved
NS仿真原理--网络组件 分类器 (classifier)
分类器——classifier是Ns-2基本网络组件的一个大类。它的基
本派生类有地址分类器(AddrClassifier)和多播分类器
(McastClassifier)等。
分类器的特点,是基于分类器的基本网络组件具有1个或多个可
能的数据输出路径,属于交换(Switch)设备(对应来说,连
接器Connector只有一个数据的输出路径)。
复合组建(比如Node和Link),它们不是TclObject类的派生
类,而是在ns-2中独立的类。它们属于复合组件
拓扑结点(Node)是由一个结点入口对象和若干个分类器
(Classifier)组成的一个符合对象。
Copyright ©2003 www.netforum.com.cn All Rights Reserved
NS仿真原理--网络组件 分类器 (classifier)
Copyright ©2003 www.netforum.com.cn All Rights Reserved
NS仿真原理--网络组件 连接器 (connector)
连接器——Connector是Ns-2基本网络组件中的另一个大类。
它的基本派生类对象包括缓冲队列(Queue)、延迟
(Delay)、各种产生和处理数据包的代理(Agent)和对象
的跟踪器(Trace)。
连接器的特点,是基于连接器的基本网络组件只有一个可能数
据输出的路径,即(单进单出的管道,所以叫Connector),
和分类器有1个或多个可能的数据输出路径(Switch)是不同
的。
拓扑结点连接类(Link)是Ns-2中另一个主要的复合组件对
象。一个结点和另一个结点之间的简单连接(simplex-link)
是单向的。一个最基本的简单连接由一个连接入口、包缓冲队
列、延迟处理对象、废弃处理对象和时间处理对象(TTL)组
成。
一个结点的输出队列,是通过和这个结点相连的Link中的缓冲
队列来实现的。
Copyright ©2003 www.netforum.com.cn All Rights Reserved
NS仿真原理--网络组件 连接器 (connector)
Copyright ©2003 www.netforum.com.cn All Rights Reserved
NS仿真原理--网络组件 包 (packet)
在Ns-2中,一个“包”是由一个报头(Header)堆栈(Stack)
和一个可选择的数据空间构成。
报头的格式,在模拟器对象(Simulator)创建的过程中创建
好,同时,所有注册过的报头,比如一般的属性说明、IP报
头,Tcp报头,RTP报头,都在包的报头堆栈中存储。
通过不同报头在包的报头堆栈中的偏移量(Offset),网络组
件可以根据需要,来访问包中的不同报头。这就符合上面的机
制,在报头格式创建的时候,无论这个注册过的报头是否需
要,都被加到报头堆栈中。
通常,一个包只含有报头堆栈部分,而没有数据空间。这是因
为,在模拟的环境中,传输实际的数据是没有意义的。
Copyright ©2003 www.netforum.com.cn All Rights Reserved
NS仿真原理--网络组件 包 (packet)
Copyright ©2003 www.netforum.com.cn All Rights Reserved
NS仿真原理--网络组件 代理 (Agent)
代理网络组件代
了在网络层中数据包的产生地和运输源头,
同时也是各层网络中各种协议的实现。
Agent/TCP
Agent/TCP/Newreno
Agent/TCP/Vegas
Agent/TCP/Reno
Agent/TCP/Sack1
Agent /TCP/Fack
Copyright ©2003 www.netforum.com.cn All Rights Reserved
NS仿真原理--网络组件 应用层(Application)
应用程序层是建立在传输代理上的应用程序的模拟。
Ns-2中有两种类型的“应用程序”,数据源发生器(Traffic
Generator)和模拟的应用程序(Simulated
applications)。
Copyright ©2003 www.netforum.com.cn All Rights Reserved
NS仿真原理--事件调度器
NS是离散事件驱动的网络仿真器。它使用Event Scheduler对所有组件希
望完成的工作和计划该工作发生的时间进行列表和维护。如下图所
示:Event Scheduler主要是一个具有优先级的队列,它按照事件发生的
时间对其中的工作排序,并遵循这样的顺序执行工作。而各个组件之间
的通信是依靠传递数据包的方式来实现的
Copyright ©2003 www.netforum.com.cn All Rights Reserved
NS运行环境和使用方式
平台:Windows、Linux、Unix、machitosh,还要求系统装
有C++编译器
两种语言:C++、OTcl
使用方式--命令行方式:敲入一个命令,返回一个结果
输入命令: %/ns-version
返回版本号: ns /2.0a12
使用方式--脚本方式:指定一个脚本文件(*.tcl文件),让NS
执行
输入命令: %/ns
Copyright ©2003 www.netforum.com.cn All Rights Reserved
NS的脚本写法
Copyright ©2003 www.netforum.com.cn All Rights Reserved
NS的工作
NS代码使用OTCL语言编写,通过OTCL语言解释器解释,使用
NS仿真库(包含Event Scheduler,网络组件对象和模块)进行
编译和仿真,输出仿真的结果。
根据仿真的结果,可进行进一步的相关内容的分析,生成网络
拓扑图,或者得到数据的可视化的图表。
Copyright ©2003 www.netforum.com.cn All Rights Reserved
NS的工作界面
使用辅助的Network Animator (NAM) 工具,在NS中可以很清晰
的显示网络的拓扑结构,这对整个网络的仿真的研究都有一定的
帮助。(如下图)
Copyright ©2003 www.netforum.com.cn All Rights Reserved
NS的工作界面
使用X Gragh工具,可以将NS的仿真结果用图表形式生动形象
的表示出来。
Copyright ©2003 www.netforum.com.cn All Rights Reserved
NS的应用范围
NS设计的出发点是基于网络仿真,它集成了多种网络协议
(如TCP&UDP),业务类型(如FTP,Telnet,Web,
CBR&VBR等),路由排队管理机制(如Drop Tail,
RED&CBQ等),路由算法(如Dijkstra算法等)。
此外,NS还集成了组播业务和应用于局域网仿真有关的部
分MAC层协议。其仿真主要针对路由层,传输层,数据链
路层展开。
因此NS可以进行对固定,无线,卫星以及混和等多种网络
的仿真。
Copyright ©2003 www.netforum.com.cn All Rights Reserved
NS的特点
较之众多的网络仿真软件,NS具有以下的突出特点:
¾ 源代码公开;
¾ 可扩展形强;
¾ 速度和效率优势明显;
但同时也存在界面不够友好,可视化效果不甚理想,建模层次不够清晰的一
些问题。