好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

网络模拟器ns-及其应用分析.docx

9页
  • 卖家[上传人]:ss****gk
  • 文档编号:236592643
  • 上传时间:2022-01-08
  • 文档格式:DOCX
  • 文档大小:193.07KB
  • / 9 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 网络模拟器NS・2及其应用分析引言随着Internet的迅猛发展,网络规模和复杂性的迅速增加,网络研究人员一方面要不断 思考新的网络协议和算法,为网络发展做前瞻性的基础研究;另一方面也要研究如何利用和 整合现有的网络资源,使网络达到最高效能无论是哪一方面部需要对新的网络方案进行验 证和分析分析方法的有效性和精确性受假设的限制很大实验方法的局限在于成木很高, 实验床的规模很难做到很大,不能实现网络中的多种通信流量和拓扑的融合而模拟方法在 很大程度上可以弥补前两种方法的不足NS・2是美国DARPA支持的项目VINT(the Virtual InterNet Tested)中的基础和核心部分由 USI/ISI, Xerox PARC, LBNL 和 UC Berkeley 这些美 国大学和实验室合作研究开发,其目的在于建立一个网络仿真平台,为网络研究人员提供一 系列的仿真工具,来实现新的网络协议的设计和实现1 NS-2体系结构及功能模块1.1 NS-2 简介NS・2是面向对象的,基于离散事件驱动的网络环境模拟器它实现了多种网络协议的 模拟,如网络协议TCP、UDP,流量源行为,如FTP、Telnet. Web、CBR、VBR;实现了 DropTaiK RED、CBQ等儿种路由器队列管理机制以及Dijkstra,动态路由、静态路由、组播 路由等路由算法。

      此外,NS・2还支持组播协议SRM及部分MAC层协议NS・2用C++和Otcl语言编写而成它是免费的,开放源代码的,可以很方便地扩展NS・2 的功能,将H己开发的新协议模块集成到NS・2环境中1.2 NS・2体系结构NS・2的结构如图1所示NS・2采用了两级体系结构,为了提高代码的执行效率,NS・2将数据操作与控制部分的 实现相分离,事件调度器和基木的网络组件使用C++编写和编译,英主要功能是实现对数据 包的处理;NS・2的前端是一个Otcl解释器,主要的功能是对模拟环境的配置、建立从图1 的左下角看,用户利用6cl库中的模拟对象设计和运行TCL仿真,事件调度器和网络组件 通过OTcl链接(tclcl类)和Otcl相关联,这样用户可以在Otcl空间能够方便地对C++对象 的函数和变量进行修改与配置Event Schedulerns-2tclclNetworic Component<>tcltcl8.0图1 NS-2体系结构1.3 NS・2的功能模块在NS・2中,整个模拟过程由一个名为Simulator的Tel类来定义和控制的,Simulator 类提供了一系列对模拟进行配置的接口,这其中包括选择“事件调度器(event scheduler)" 的接口。

      进行模拟通常要首先创建一个Simulator类的实例对象,并调用该对象的一系列方 法来创建节点(Node)、拓扑(Topology)等模拟所必需的对象模拟器封装了许多功能模块:节点、链路、分组、代理、流量发生器、应用模拟器等1) 事件调度器:NS・2是一个事件驱动的模拟器,调度器也就成为NS・2的调度中心,主 要功能是处理分组(packet)的延迟和充当定时器从所有事件中选择发生时刻最早的事件 执行,调用它的handle函数,把该事件执行完毕,然后从剩余的所有事件中选择发生时刻 最早的事件执行,如此反复执行NS・2只支持单线稈,如果有多于一个事件安扌非在同一时 刻,那么会按照事件代码插入的先后次序执行2) 节点(Node):表示端节点和路由器,主要由地址分类器、端口分类器、多播分类 器和复制器等模拟组件构成分类器从逻辑上匹配一个分组,并基于匹配的结果把该分组传 递给相应的对象复制器是生成一个分组的多份拷贝,并把这些拷贝转发到各个订阅了某一 多播组G的输出链路3) 链路(Link):用来连接网络节点,所有的链路都是以队列的形式来管理分组的到达、 离开和丢弃主要由 DelayLink、Queues 和 TTLChcker 等连接器(Connector)构成。

      DelayLink 构造链路带宽和延迟特征;Queues构造和模拟与该链路相连的路由器的输出缓冲; TTLChcker对该链路的数据包的TTL字段减1操作,并丢弃TTL值为0的数据包图2)0 (5 >•/ Simplex Link图2链路4) 分组(Packet):是对彖间交互的基木单元由一系列分组头和一个可选的数据空间 纽成分组头的结构在Simulator对象创建时就被初始化了,同时每个分组头相对于分纽.的 起始地址的偏移量也被记录下来,提供用户来存取备个头部所包含的信息5) 代理(Agent):代表了网络层分纽的起点和终点,并被用于实现如TCP和UDP等网 络协议Agent类支持分组的产生和接收,C++的Agent包含一系列的内部状态变量来表不 分组的各个域Agent可以实现多个层次的协议,对于一些运输层的协议,分组的大小和发 送时间通常由Agen提供的应用程序接口 (API)来控制,对于在低层使用的Agent (路由 Agent),分组的大小和发送时间通常由Agent自己控制6) 流量发生器(traffic gencnuor)、应用模拟器(simulated application):是构建在运输层代 理Z上,流量发生器是模拟应用程序产生网络通信最,有四类:(l)EXPOO_Traffic、(2) POO.Traffic. (3)CBR_Traffic、(4)TafficTrace,它们一般用在 UDP 代理之上,应用模拟器有 FTP, Telnet, 一般用在TCP代理Z上。

      2用NS・2进行网络模拟进行模拟Z前,首先要分析模拟涉及哪个层次NS模拟分两个层次:一个是基于Otcl 编稈的层次,利用NS已有的网络元素实现模拟,无需对NS木身进行任何修改,只要编写 Otcl脚木,另一个层次是基于C++和Otcl编程的层次,如果NS中没有所需的网络对象,就 需要对NS扩展,利用Otcl和NS的接I」类实现NS的更新,然后再编写Otcl脚札 整个模 拟的过稈如图3所示:图3利用NS・2进行网络模拟的过稈2.1 Otcl实现模拟的一般过程(1) 建立network model:描述模拟网络拓扑结构,确定链路的基木特性,如 延迟、带宽和丢失策略等2) 建立traffic model:包括端设备的协议绑定和通信业务量模型的建立,配 置业务量模型的参数,从而确定网络上的业务量分布3) 设置Trace对彖Trace对象能够把模拟过程中发生的特定类型的事件 记录在Trace文件中NS通过T「“ce文件来保存報个模拟过程模拟完成后,用户可以对 Trace文件进行分析研究 (4)(5)编写其他的辅助过程,设定模拟开始/结束时间,运行Otcl脚木仿真 追踪分析结果:对Trace文件进行分析,利用gawk、xgraph> gnuplot得岀有川的数据曲线,或者川Nam观看网络模拟运行过程。

      2.2 C + +建立新协议或修改已有网络对象进行扩展要考虑的问题如果模拟只要求对现有的协议进行简单修改即可完成,无需建立新的协议代理,则找 到相应的待修改协议代码进行预期的修改,然后胃接编译生成新的NS然而,当建立新协 议时一般需要考虑以下问题:(1) 的类定义首先定义头文件,包括数据结构和决定新代理的继承结构,并建立恰当(2)(3)(4)定义C++代码和Otcl代码之间的接口连接,即定义OTcl连接函数 至少定义接收函数recv()和命令函数command()新协议代码完成后,要对相关文件进行改动例如,如果定义了一个新分组头,要改动NS目录下packet.h文件的enum packet_t{ }和class p_info{ }相应部分;改 动tcl/lib/ns-default.tcl文件,定义Tel对象的缺省值;改动tcl/lib/ns-packet.tcl文件,在该文 件中为新的分组增加一个入口;改动Makefile文件,将*.o文件加入到该文件NS对象文件 列表中5)的NS在NS 1=1录下运行Make Depend和Make,重新编译NS,至此生成了新3应用实例木例将介绍如何使用一些工具来分析和呈现模拟结果,主要是测量端到端的延迟,而采 用的方法一是去分析Trace文件,方法二是去修改NS核心,把所需要测量的数据有•接记录 下来,限于篇幅我们不在此进一步介绍方法二。

      模拟场景如图4所示,包含四个节点(n0,nl,n2,n3),假设nO, n2和nl,n2之间链路带宽2Mbps,延迟为10ms;n2和n3之间链路带 宽1.7Mbps,延迟为2()m$;毎个链路用DropTail策略;n2和口3乙间链路最大队列长度为10; n0,n3Z间有一条建立在TCP上的FTP连接,nl,n3Z间有一条建立在UDP上CBR连接; CBR是在 ().1秒开始发送,在4.5秒结束,FTP是在1.()秒开始发送,在4.0秒结束建立Otcl模拟代码文件#创建一个模拟对象set ns [new Simulator]#为数据流定义不同的颜色,供NAM用$ns color 1 Blue$ns color 2 Red#打开一个 NAM trace fileset nf [open out.nam w]$ns namtrace-all $nf#打开一个trace file记录数据包的传送过程 set nd [open out.tr w]$ns trace-all $nd#定义一个结束程序proc finish {} {global ns nf nd$ns flush-trace#关闭 NAM trace fileclose $nfclose $nd#以后台方式执行NAMexec nam out.nam &exit 0#创建四个节点 set nO [$ns node]set n 1 [$ns no de]set n2 f$ns nodelset n3 [$ns no de]#把节点连接起来$ns duplex-link $n0 $n2 2Mb 10ms DropTail $ns duplex-link $nl $n2 2Mb 10ms DropTail $ns duplex-link $n2 $n3 1.7Mb 20ms DropTail #设定n2和n3Z间最大队列长度为10$ns queue-limit $n2 $n3 10#设定节点的位置,供NAM用$ns duplex-link-op $n0 $n2 orient right-down $ns duplex-link-op $nl $n2 orient right-up $ns duplex・link・op $n2 $n3 orient right #设定n2-n3间的队列位置,供NAM用 $ns duplex・link・op $n2 $n3 queuePos 0.5 #建立一条TCP连接 set tcp [new Agent/TCPJStep set class_ 2$ns attach-agent $n0 Stepset sink [new Agent/TCPSink]$ns attach-agent $n3 $sink$ns connect Step $sink#在NAM中,TCP的连接以蓝色表示Step set fid_ 1#在T。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.