网络仿真器NS2剖析 Network Simulator V2

Slides:



Advertisements
Similar presentations
7.1 内置对象概述及分类 JSP 视频教学课程. JSP2.2 目录 1. 内置对象简介 1. 内置对象简介 2. 内置对象分类 2. 内置对象分类 3. 内置对象按功能区分 3. 内置对象按功能区分 4. 内置对象作用范围 4. 内置对象作用范围.
Advertisements

高级服务器设计和实现 1 —— 基础与进阶 余锋
第六 章数据库访问页 6.1 数据访问页视图 6.2 创建数据访问页 6.3 编辑数据访问页 6.4 查看数据访问页 退出.
计算机网络课程总结 一、计算机网络基础 计算机网络定义和功能、基本组成 OSI/RM参考模型(各层的功能,相关概念, 模型中数据传输 等)
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
项目四 组建跨地区网络 授课教师:肖颖.
Network Simulator 助教:赵俊民.
第14章 c++中的代码重用.
第10讲 Java面向对象编程基础(4) 教学目标 主要内容.
陈香兰 助教:陈博、李春华 Spring 2009 嵌入式操作系统 陈香兰 助教:陈博、李春华 Spring 2009.
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
Hadoop I/O By ShiChaojie.
第二讲 搭建Java Web开发环境 主讲人:孙娜
存储系统.
大学计算机基础 典型案例之一 构建FPT服务器.
SVN服务器的搭建(Windows) 柳峰
管理信息结构SMI.
走进编程 程序的顺序结构(二).
辅导课程六.
实用组网技术 第一章 网络基础知识.
DM81X 视频采集处理 ——简单采集显示例程讲解 广州创龙电子科技有限公司
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Windows网络操作系统管理 ——Windows Server 2008 R2.
Windows网络操作系统管理 ——Windows Server 2008 R2.
《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:
数据挖掘工具性能比较.
PaPaPa项目架构 By:Listen 我在这.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
程序设计工具实习 Software Program Tool
SOA – Experiment 2: Query Classification Web Service
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
内容摘要 ■ 课程概述 ■ 教学安排 ■ 什么是操作系统? ■ 为什么学习操作系统? ■ 如何学习操作系统? ■ 操作系统实例
C语言程序设计 主讲教师:陆幼利.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
$9 泛型基础.
C++复习3 ----类的继承与派生.
NS2 (Network Simulator - version 2)
VisComposer 2019/4/17.
主要内容: 无线局域网的定义 无线传输介质 无线传输的技术 WLAN的架构 无线网络搭建与配置 无线网络加密配置
VB与Access数据库的连接.
Cassandra应用及高性能客户端 董亚军 来自Newegg-NESC.
分裂对象模型 C++ otcl.
实验七 安全FTP服务器实验 2019/4/28.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
项目二:HTML语言基础.
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
信号量(Semaphore).
第4章 Excel电子表格制作软件 4.4 函数(一).
iSIGHT 基本培训 使用 Excel的栅栏问题
Chapter 18 使用GRASP的对象设计示例.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
Visual Basic程序设计 第13章 访问数据库
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
辅导课程十五.
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
Presentation transcript:

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

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

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

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

三、NS2主要模块及功能

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

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

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

脚本的写法

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

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

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

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

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

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

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

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

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

Class node

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

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

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

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

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

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

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

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

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

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