网络仿真器 ns2 剖析 network simulator v2

37
网网网网网 NS2 网网 Network Simulator V2 —— 网网 网网网网网网 网网网网 网网 网网网 网网网

Upload: felix-wagner

Post on 15-Mar-2016

155 views

Category:

Documents


5 download

DESCRIPTION

网络仿真器 NS2 剖析 Network Simulator V2. —— 功能、使用及源代码. 指导老师:华蓓 答辩人:黄瑾瑜. 一、背景 二、 NS 各模块及功能 三、运行环境 四、 NS 使用 五、 NS 主代码简析 —— 基类 六、 NS 主代码简析 —— 功能模块 七、扩展方法. 一、背景. 局域网仿真是局域网设计的重要环节,也是网络性能分析的关键 需要一个与操作系统无关的平台,它可以屏蔽掉对操作系统的实际的访问,且能近乎真实地模拟网络环境,让我们可以在各个层次上模拟网络的运行 UC Berkeley 改进过的 NS2. 二、运行环境. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 网络仿真器 NS2 剖析 Network Simulator V2

网络仿真器 NS2 剖析Network Simulator V2

——功能、使用及源代码

指导老师:华蓓答辩人:黄瑾瑜

Page 2: 网络仿真器 NS2 剖析 Network Simulator V2

• 一、背景• 二、 NS 各模块及功能• 三、运行环境• 四、 NS 使用• 五、 NS 主代码简析——基类• 六、 NS 主代码简析——功能模块• 七、扩展方法

Page 3: 网络仿真器 NS2 剖析 Network Simulator V2

一、背景 • 局域网仿真是局域网设计的重要环节,也是网络性能分析的关键 • 需要一个与操作系统无关的平台,它可以屏蔽掉对操作系统的实际的访问,且能近乎真实地模拟网络环境,让我们可以在各个层次上模拟网络的运行 • UC Berkeley 改进过的 NS2

Page 4: 网络仿真器 NS2 剖析 Network Simulator V2

二、运行环境 • 平台: Windows 、 Linux 、 Unix 、 mac

hitosh ,还要求系统装有 C++ 编译器 • 两种语言: C++ 、 OTcl ,

Page 5: 网络仿真器 NS2 剖析 Network Simulator V2

三、 NS2 主要模块及功能

Page 6: 网络仿真器 NS2 剖析 Network Simulator V2

NS2 包含的几个小工具• Nam• Xgraph• 拓扑图生成器: Gt-itm• 节点移动生成器: Setdest• 传输事件生成器: cbrgen.tcl tcpgen.tcl

Page 7: 网络仿真器 NS2 剖析 Network Simulator V2

Nam 与 Xgraph

• 图形显示工具• Nam <filename.out> :动态显示网络仿真过程。如:包的传输等等• Xgraph <filename.tr> :显示仿真过程的数值特征。如:流量 / 时间图等

Page 8: 网络仿真器 NS2 剖析 Network Simulator V2

四、 NS2 的使用• 命令行方式:敲入一个命令,返回一个结果

输入命令: % /ns-version 返回版本号: ns /2.0a12 • 脚本方式:指定一个脚本文件( *.tcl 文件),让 NS 执行

输入命令: % /ns <example.tcl>

Page 9: 网络仿真器 NS2 剖析 Network Simulator V2

脚本的写法

Page 10: 网络仿真器 NS2 剖析 Network Simulator V2
Page 11: 网络仿真器 NS2 剖析 Network Simulator V2

五、主代码简析——基类• Tcl 类: C++ 代码与 Tcl 代码之间的接口• TclObject 类:所有仿真对象的基类• TclClass 类:定义了解释类的类层次,并允许用户实例化 TclObject ,与 TclObject 一一对应• TclCommand 类:封装了 C++ 代码和 Tcl 代码相互调用命令的方法• EmbeddedTcl 类:封装了装载更高级别的内置命令的方法• InstVar 类:访问 C++ 成员变量,如 Otcl 变量方法

Page 12: 网络仿真器 NS2 剖析 Network Simulator V2

Tcl 类• 获得访问 Tcl 实例的入口 • 通过解释器调用 Otcl 过程 • 与解释器交换结果 • 报告出错状况,并以统一方式退出 • 存储、查找 TclObject 类对象 • 取解释器的句柄

Page 13: 网络仿真器 NS2 剖析 Network Simulator V2

TclObject 类 TclObject 类封装了网络实体• 生成和释放“ 对象对”• 变量的绑定( bindding ) • 变量的跟踪( Trace ) • 命令方法的定义和调用 • 流程图

Page 14: 网络仿真器 NS2 剖析 Network Simulator V2
Page 15: 网络仿真器 NS2 剖析 Network Simulator V2

TclClass 类• 定义了解释类的类层次,并允许用户实例化 TclObject ,与 TclObject 一一对应。• 类 TclClass 是一个纯虚类,从它派生的子类需实现两个成员函数:其一是构造函数,构造解释类层次来镜像编译类层次;其二是生成函数,生成与之相对应的 TclObjects 对象 。• 流程图

Page 16: 网络仿真器 NS2 剖析 Network Simulator V2
Page 17: 网络仿真器 NS2 剖析 Network Simulator V2

TclCommand 类• 类 TclCommond 的作用就在为解释器提供全局命令 • 由 TclCommand 的定义知道,它是一个虚基类,必须派生子类,才能工作。• 例子,派生类 MyCommand ,它的命令名为 say 。

Page 18: 网络仿真器 NS2 剖析 Network Simulator V2
Page 19: 网络仿真器 NS2 剖析 Network Simulator V2

EmbededTcl 类• 用户对通过对文件 ~tclcl/tcl-object.tcl 进行修改,或是修改、增加 tcl/lib 的文件来对 ns 进行扩展。• 对于新文件的装载是由类 EmbeddedTcl 的对象来完成的。 • Tcl 脚本其实就是由 char 类型数据组成的文本文件,所以类 Embedded 的构造函数可以用 cha

r* 型指针指向脚本代码,并将此指针值赋与成员变量 code_ 。

Page 20: 网络仿真器 NS2 剖析 Network Simulator V2

InstVar 类• 类 InstVar 定义了实现绑定机制的方法: 隐式,当创建新解释对象时,构造函数创建与其对应的编译对象,编译对象的构造函数将它的成员变量与解释对象的实例变量绑定; 显式,定义一个实现绑定变量的命令,然后通过方法 c

md 调用。• 基类 InstVar 派生五个子类: InstVarReal , InstVarTime , InstVarBandwidth , InstVarInt , InstVarBool 。分别用来绑定 real 型, time 型, bandwidth 型, i

nteger 型,和 boolean 型变量。

Page 21: 网络仿真器 NS2 剖析 Network Simulator V2

六、主代码简析——功能模块• NS 对网络实体的仿真和各种功能模块都封装在派生类中。• 重要的派生类有 simulator 、 node 、 link 、 LAN 等等。

Page 22: 网络仿真器 NS2 剖析 Network Simulator V2

Class simulator• 仿真器类是一个解释类,没有相应的编译类。但仿真器类是由许多更小的类构成的,这些类有相应的编译类。• 它封装了节点、链路、代理、数据包格式等。• 从 ns外部看来,整个仿真过程可以看成对仿真器类对象的操作。因此,我们的工作从创建一个仿真器的实例对象开始,之后,通过这个仿真器调用各种方法生成节点,进而构造拓扑图,对仿真的各个方面进行配置,定义事件,然后,根据定义的事件,模拟整个网络活动的过程。

Page 23: 网络仿真器 NS2 剖析 Network Simulator V2

Class node

Page 24: 网络仿真器 NS2 剖析 Network Simulator V2
Page 25: 网络仿真器 NS2 剖析 Network Simulator V2

Class classifier• Base classifier 是一虚基类• address classifier :支持独播,通过位移和掩码将包的目的地址转化成槽的号码。• multicast classifier :保持一个哈希链表,匹配地址对,取到槽的号码。如为未知地址对,则加入表中。• multipath classifier :支持等价多路转发。• hash classifier :使用哈希表,将包分发给“流”。• replicator :拷贝数据包,转发给表中的所有对象,支持广播

Page 26: 网络仿真器 NS2 剖析 Network Simulator V2

Class link

• 由 Connecter 、 Quere 、 Delay• 一个简单的链路对象是由一些连接器 (co

nnector) 组成的。• 由 Connecter 、 Quere 、 Delay

Page 27: 网络仿真器 NS2 剖析 Network Simulator V2
Page 28: 网络仿真器 NS2 剖析 Network Simulator V2

Class Quere

• drop-tail : FIFO队列• FQ :公平队列• SFQ :实现随机公平队列• DRR ( deficit round robin ):不同流之间调度• CBQ :实现了基于类的队列• CBQ/WRR :是 CBQ 的子类,实现了同一优先级上不同的类间的带权的循环调度。

Page 29: 网络仿真器 NS2 剖析 Network Simulator V2

Agent

• Agent 可以在不同层上实现各种协议。对某些协议(如 UDP ),包的大小、发送时间取决于应用程序,而对另一些较低层的协议,以上参数取决于 agent 本身。 • Agent 可用 Otcl 语句创建,其内部状态可以用 Tcl 的 set 命令修改。• 注:某些 agent 的状态变量只存在于 Otcl ,用 C++ 代码不可访问。

Page 30: 网络仿真器 NS2 剖析 Network Simulator V2

数据包• 类 Packet 是仿真对象间交换数据的基础单元,它提供了足够的信息,可以将一个包联入一个列表,可以查询数据包头缓冲,可以查询包数据缓冲。不同的协议采用不同的数据包格式,因此报头会不一样。要引入新的数据报头,需要根据数据包的格式定义一个 C++ 结构,定义一个静态类来提供与 Otcl 的连接,然后修改仿真器的初始化代码。

Page 31: 网络仿真器 NS2 剖析 Network Simulator V2

区别服务• 区别服务( Differentiated Services ),简称 DiffServ ,通过标注包的类型,并对不同的包采取不同的处理,实现了 IP Qo

S 。• Diffserv 模块分三个主要子模块: policy ,

edge router , core router 。

Page 32: 网络仿真器 NS2 剖析 Network Simulator V2

局域网• 局域网 (LAN) 与那些由多条点-点链简单构成网络大不一样,有共享、竞争等特性。为了模仿真正的 LAN , ns又定义了新的节点—— LanNode 。

Page 33: 网络仿真器 NS2 剖析 Network Simulator V2
Page 34: 网络仿真器 NS2 剖析 Network Simulator V2

其他• NS 还实现了其他的模型,如、卫星网络模型、无线传播模型 、能量模型

Page 35: 网络仿真器 NS2 剖析 Network Simulator V2

七、简单的扩展• 扩展 ns最简单的方法是在 ~tclcl/tcl-object.tcl中加入 Otcl 代码,或在目录 ~ns/tcl/lib下加入新 Tcl 脚本。• 若是在 ~ns/tcl/lib下加入新脚本,则必须在 ~ns/tcl/lib/ns-lib.tcl中加入对脚本的引用,语句为:source tcl/<filemame> • 在启动 ns 时, ~ns/tcl/lib/ns-lib.tcl自动引用这个新脚本,类似于 C 程序中的“# include “filename” ”

Page 36: 网络仿真器 NS2 剖析 Network Simulator V2

进一步扩展• 首先,将脚本转为类 EmbeddedTcl 对象: tclsh bin/tcl-expand.tcl tcl/lib/ns-lib.tcl | \ ../Tcl/tcl2c++ et_ns_lib > gen/ns_tclsh.cc • ~ns/ns_tclsh.cc中的 Tcl_AppInit 函数通过 Tcl::Init() 调用 ~ns/tcl/lib/ns-lib.tcl ,实现装载的语句是:

et_ns_lib.load();

Page 37: 网络仿真器 NS2 剖析 Network Simulator V2