1 / 37

网络仿真器 NS2 剖析 Network Simulator V2

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

Download Presentation

网络仿真器 NS2 剖析 Network Simulator V2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

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

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

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

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

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

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

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

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

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

  19. Class node

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

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

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

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

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

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

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

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

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

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

More Related