当前位置:文档之家› 网络仿真器NS2剖析NetworkSimulatorV2

网络仿真器NS2剖析NetworkSimulatorV2

实例化TclObject,与TclObject一一对应 ❖ TclCommand类:封装了C++代码和Tcl代码相互调
用命令的方法 ❖ EmbeddedTcl类:封装了装载更高级别的内置命令
的方法 ❖ InstVar类:访问C++成员变量,如Otcl变量方法
Tcl类
❖ 获得访问Tcl实例的入口 ❖ 通过解释器调用Otcl过程 ❖ 与解释器交换结果 ❖ 报告出错状况,并以统一方式退出 ❖ 存储、查找TclObject类对象 ❖ 取解释器的句柄
❖ 类TclClass是一个纯虚类,从它派生的 子类需实现两个成员函数:其一是构造 函数,构造解释类层次来镜像编译类层 次;其二是生成函数,生成与之相对应 的TclObjects对象 。
❖ 流程图
TclCommand类
❖ 类TclCommond的作用就在为解释器提供全 局命令
❖ 由TclCommand的定义知道,它是一个虚基 类,必须派生子类,才能工作。
tcpgen.tcl
Nam与Xgraph
❖ 图形显示工具 ❖ Nam <filename.out>:动态显示网络仿真过
程。如:包的传输等等 ❖ Xgraph <filename.tr>:显示仿真过程的数值
特征。如:流量/时间图等
四、NS2的使用
❖ 命令行方式:敲入一个命令,返回一个结果 输入命令: %/ns-version 返回版本号: ns /2.0a12
❖ Base classifier是一虚基类 ❖ address classifier:支持独播,通过位移和掩码将
包的目的地址转化成槽的号码。 ❖ multicast classifier:保持一个哈希链表,匹配地址
对,取到槽的号码。如为未知地址对,则加入表中。 ❖ multipath classifier:支持等价多路转发。 ❖ hash classifier:使用哈希表,将包分发给“流”。 ❖ replicator:拷贝数据包,转发给表中的所有对象,
支持广播
Class link
❖ 由Connecter、Quere、Delay ❖ 一个简单的链路对象是由一些连接器
(connector)组成的。 ❖ 由Connecter、Quere、Delay
Class Quere
❖ drop-tail:FIFO队列 ❖ FQ:公平队列 ❖ SFQ:实现随机公平队列 ❖ DRR(deficit round robin):不同流之间调
InstVar类
❖ 类InstVar定义了实现绑定机制的方法: 隐式,当创建新解释对象时,构造函数创建与其对应的编译 对象,编译对象的构造函数将它的成员变量与解释对象的实 例变量绑定; 显式,定义一个实现绑定变量的命令,然后通过方法cmd调 用。
❖ 基类InstVar派生五个子类:InstVarReal,InstVarTime, InstVarBandwidth,InstVarInt, InstVarBool。 分别用来绑定real型,time型,bandwidth型,integer型,和 boolean型变量。
❖ 一、背景 ❖ 二、NS各模块及功能 ❖ 三、运行环境 ❖ 四、NS使用 ❖ 五、NS主代码简析——基类 ❖ 六、NS主代码简析——功能模块 ❖ 七、扩展方法
一、背景
❖ 局域网仿真是局域网设计的重要环节,也是 网络性能分析的关键
❖ 需要一个与操作系统无关的平台,它可以屏 蔽掉对操作系统的实际的访问,且能近乎真 实地模拟网络环境,让我们可以在各个层次 上模拟网络的运行
度 ❖ CBQ:实现了基于类的队列 ❖ CBQ/WRR:是CBQ的子类,实现了同一优
❖ 脚本方式:指定一个脚本文件(*.tcl文件), 让NS执行 输入命令: %/ns <example.tcl>
脚本的写法
五、主代码简析——基类
❖ Tcl类:C++代码与Tcl代码之间的接口 ❖ TclObject类:所有仿真对象的基类 ❖ TclClass类:定义了解释类的类层次,并允许用户
❖ 例子,派生类MyCommand,它的命令名为 say。
EmbededTcl类
❖ 用户对通过对文件~tclcl/tcl-object.tcl进行修改,或 是修改、增加tcl/lib的文件来对ns进行扩展。
❖ 对于新文件的装载是由类EmbeddedTcl的对象来完 成的。
❖ Tcl脚本其实就是由char类型数据组成的文本文件, 所以类Embedded的构造函数可以用char*型指针指 向脚本代码,并将此指针值赋与成员变量 code_。
TclObject类
TclObject类封装了网络实体 ❖ 生成和释放“ 对象对” ❖ 变量的绑定(bindding) ❖ 变量的跟踪(Trace) ❖ 命令方法的定义和调用 ❖ 流程图
TclClass类
❖ 定义了解释类的类层次,并允许用户实 例化TclObject,与TclObject一一对应。
❖ 从ns外部看来,整个仿真过程可以看成对仿真 器类对象的操作。因此,我们的工作从创建一 个仿真器的实例对象开始,之后,通过这个仿 真器调用各种方法生成节点,进而构造拓扑图, 对仿真的各个方面进行配置,定义事件,然后, 根据定义的事件,模拟整个网络活动的过程。
Class node

Class classifier
六、主代码简析——功能模块
❖ NS对网络实体的仿真和各种功能模块都封装 在派生类中。
❖ 重要的派生类有simulator、node、link、 LAN等等。
Class simulator
❖ 仿真器类是一个解释类,没有相应的编译类。 但仿真器类是由许多更小的类构成的,这些类 有相应的编译类。
❖ 它封装了节点、链路、代理、数据包格式等。
❖ UC Berkeley改进过的NS2
二、运行环境
❖ 平台:Windows、Linux、Unix、machitosh, 还要求系统装有C++编译器
❖ 两种语言:C++、OTcl,
三、NS2主要模块及功能
NS2包含的几个小工具
❖ Nam ❖ Xgraph ❖ 拓扑图生成器:Gt-itm ❖ 节点移动生成器:Setdest ❖ 传输事件生成器:cbrgen.tcl
相关主题