Presentation is loading. Please wait.

Presentation is loading. Please wait.

网络仿真器NS2剖析 Network Simulator V2

Similar presentations


Presentation on theme: "网络仿真器NS2剖析 Network Simulator V2"— Presentation transcript:

1 网络仿真器NS2剖析 Network Simulator V2
——功能、使用及源代码 指导老师:华蓓 答辩人:黄瑾瑜

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

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

4 二、运行环境 平台:Windows、Linux、Unix、machitosh,还要求系统装有C++编译器 两种语言:C++、OTcl,

5 三、NS2主要模块及功能

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

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

8 四、NS2的使用 命令行方式:敲入一个命令,返回一个结果 输入命令: %/ns-version 返回版本号: ns /2.0a12
脚本方式:指定一个脚本文件(*.tcl文件),让NS执行 输入命令: %/ns <example.tcl>

9 脚本的写法

10

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

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

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

14

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

16

17 TclCommand类 类TclCommond的作用就在为解释器提供全局命令
例子,派生类MyCommand,它的命令名为say。

18

19 EmbededTcl类 用户对通过对文件~tclcl/tcl-object.tcl进行修改,或是修改、增加tcl/lib的文件来对ns进行扩展。 对于新文件的装载是由类EmbeddedTcl的对象来完成的。 Tcl脚本其实就是由char类型数据组成的文本文件,所以类Embedded的构造函数可以用char*型指针指向脚本代码,并将此指针值赋与成员变量 code_。

20 InstVar类 类InstVar定义了实现绑定机制的方法:
隐式,当创建新解释对象时,构造函数创建与其对应的编译对象,编译对象的构造函数将它的成员变量与解释对象的实例变量绑定; 显式,定义一个实现绑定变量的命令,然后通过方法cmd调用。 基类InstVar派生五个子类:InstVarReal,InstVarTime,InstVarBandwidth,InstVarInt, InstVarBool。分别用来绑定real型,time型,bandwidth型,integer型,和boolean型变量。

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

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

23 Class node

24

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

26 Class link 由Connecter、Quere、Delay 一个简单的链路对象是由一些连接器(connector)组成的。

27

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

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

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

31 区别服务 区别服务(Differentiated Services),简称DiffServ,通过标注包的类型,并对不同的包采取不同的处理,实现了IP QoS。 Diffserv 模块分三个主要子模块:policy,edge router,core router。

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

33

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

35 七、简单的扩展 扩展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” ”

36 进一步扩展 首先,将脚本转为类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();

37


Download ppt "网络仿真器NS2剖析 Network Simulator V2"

Similar presentations


Ads by Google