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

网络仿真器 NS2 剖析 Network Simulator V2

Embed Size (px)

DESCRIPTION

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

Citation preview

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