logo资料库

NS2仿真实验分析报告.doc

第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
资料共11页,剩余部分请下载后查看
NS2 仿真实验分析报告 一 引言 1 NS2简介 NS2是一款开放源代码的网络模拟软件,最初由 UC Berkeley 开发。它是一种向象的网 络模拟器,它本质上是一个离散事件模拟器,其本身有一个模拟时钟,所有的模拟都由离散 事件驱动。其采用了分裂对象模型的开发机制,采用 C++和 OTcl 两种语言进行开发。它们 之间采用 Tclcl 进行自动连接和映射。考虑效率和操作便利等因素,NS2将数据通道和控制 通道的实现相分离。为了减少分组和事件的处理时间,事件调度器和数据通道上的基本网络 组件对象都使用 C++编写,这些对象通过 Tclcl 映射对 OTcl 解释器可见。 目前 NS2可以用于模拟各种不同的通信网络,它功能强大,模块丰富,已经实现的主要 模块有:网络传输协议,如 TCP 和 UDP;业务源流量产生器,如 FTP、Telnet、CBR、We b 和 VBR;路由队列管理机制,如 DropTail、RED 和 CBQ;路由算法;以及无线网络 WLAN、 移动 IP 和卫星通信网络等模块,也为进行局域网的模拟实现了多播协议以及一些 MAC 子 层协议。 2 基本概念 (1)RED:随机早期探测(Random Early Detect,RED)。RED 属于主动队列管(Active Queue Management, AQW),是目前常见的 TCP 上防止拥塞的手段。它通过以一定概率丢失或标记 报文来通知端系统网络的拥塞情况。RED 使用平均队列长度度量网络的拥塞程度,然后以 线性方式将拥塞信息反馈给端系统。RED 使用最小阈值,最大阈值和最大概率等几个参数。 RED 的基本思想是通过监控路由器输出端口队列的平均长度来探测拥塞,一旦发现拥 塞逼近,就随机地选择连接来通知拥塞,使它们在队列溢出导致丢包之前减少拥塞窗口,降 低发送数据速度,缓解网络拥塞。RED 配置在路由器监视网络流量以便避免拥塞,当拥塞 即将发生时,它随机丢弃进来的分组,而不是等到队列缓冲区满是才开始丢弃所有进来的分 组,这样可以最少化全局同步的发生。当拥塞发生时,RED 丢弃每个连接分组的概率与该 连接占用的带宽成比例,它监视每个输出队列的平均队列长度,随机选择分组丢弃。 (2)丢包率:是一个比率,表示在单位时间内未收到的数据分组数与发送的数据分组数 的比率,由于信号衰减、网络质量等诸多因素的影响,可能产生数据分组的丢失。 (3)端到端时延:是由各种因素引起的,包括打包和解包时延,以及网络传送时延,本 文中主要讨论的是网络传输时延。 1
(4)吞吐量:单位时间内,某个节点发送和接受的数据量,单位一般为 b/s。 二 NS2网络仿真机制与过程 使用 NS2进行网络仿真的基本操作流程如图1所示,用户首先要进行问题定义,考虑自 己要仿真什么东西、拓扑结构应该怎样、是否需要对源代码进行修改或添加等。如果需要添 加或修改代码,如图1中右边方框中所示,有一个对 NS2源码进行修改、重新编译和调试的 过程;如果不需要修改代码,即采用 NS2已有构件即可完成仿真工作,那么用户的主要任务 就是编写 Tcl/OTcl 仿真代码,生成一个.tcl 脚本文件,并用 NS2执行该脚本进行仿真,仿真 程序结束后会生成相应的 Trace 文件,即仿真结果文件,用户使用不同的工具对该脚本中的 内容进行分析得到我们想要的结果和图表,如果结果是我们的预期,那么整个仿真过程即可 顺利结束,否则应该分析问题所在,并重新考虑问题定义、源码修改、Tcl 脚本修改的必要 性。整个仿真过程主要有三部分的工作量:修改源代码、编写 Tcl 仿真脚本和分析结果。 (1)源码修改。这一步只有在仿真需要修改源代码时才进行考虑,修改源代码是一项比 较具有挑战性的工作,这需要用户有一定的编程和调试水平。特别需要注意的是,由于 NS2 是采用 C++和 OTcl 两种语言编写的,因此在修改源代码时,需要记着修改相应的 OTcl 代码。 (2)Tcl/OTcl 仿真代码编写。这是 NS2仿真中最重要和必不可少的一环,大部分 NS2的仿 真工作实际就是编写 Tcl 代码来描述网络结果、网络构件属性和控制调度网络模拟事件的启 停的过程。因此,这需要用户对 NS2中的网络构件非常熟悉。 (3)仿真结果分析。结果分析是真正体现仿真工作成效的重要一环,仿真结果分析要求 用户熟悉 NS2的 Trace 文件的结构,并且能够使用一些小工具对该结果文件进行分析以及根 据分析结果数据绘制一些汇总图标等。 2
图1 基本操作流程图 三 实验过程与结果分析 1 仿真实验的模拟情节配置说明 本仿真情节包含4个 node,各节点之间都是以全双工的链路相连。n0和 n2之间链路的带 宽为2Mbps,延迟为10ms,为 DropTail 队列方式;n1和 n2之间链路带宽为2Mbps,延迟为 10ms,也为 DropTail 队列方式;网络拓扑中的带宽瓶颈是在节点 n2到节点 n3之间,带宽为 1.7Mbps,延迟为20ms,同为 DropTail 方式,且最大队列长度为10个数据包长度。在 n0到 n3之间建立了基于 TCP 协议凡人 FTP 应用,TCP 包的长度采用默认的1Kbytes。另外,在 n1到 n3之间建立一条基于 UDP 协议的 CBR 应用。CBR 的传递速度为1Mbps,每个包大小 为1Kbytes。CBR 业务在0.1秒开始传送,在4.5秒结束传送。FTP 业务在1.0秒开始传送,4.0 秒结束传送。 写出仿真脚本并运行,会自动弹出 Nam 窗口。通过 Nam 可以依次看到如图2、图3、图 4所示的动态过程。图中红色代表基于 UDP 的 CBR 业务流,蓝色代表基于 TCP 的 FTP 业 务流。 3
模拟一开始只有 CBR 业务流出现,网络依次传递这些数据包,因为各段链路带宽均大 于 CBR 业务速率(1Mbps),网络没有出现排队与丢包现象,如图2所示。 图2 CBR 业务启动 图3 网络出现排队现象 4
图4 网络出现丢包现象 随后 FTP 业务启动,随着慢启动的开始,FTP 的数据速率越来越高,给网络带来很大 压力,瓶颈链路 n2与 n3之间出现排队现象。并且可看到使用 TCP 传输数据时,接收方会对 收到的数据进行确认,而 UDP 协议传输时,不发回确认。整个过程如图3所示。 最终,随着 FTP 速率的提高,当 n2与 n3之间的队列占满后,会出现丢包现象,这时 TCP 协议将会进入拥塞控制,进入慢启动过程,如图4所示。 2 Trace 文件格式说明 (1)event:“+”:表示分组进入链路队列事件;“—”:表示分组离开链路队列事件;“r”:表 示目的节点接受分组事件;“d”:表示队列丢弃分组事件 (2)time:事件发生的时间 (3)from node:分组发送接点的 id (4)to node:分组传送的目的节点的 id (5)pkt type:分组类型 (6)pkt size:分组大小 (7)flags:标志项 (8)fid:流标识符 (9)src addr:源地址,格式为 node.port,其中 node 代表分组发送节点的 id,port 表示发送分 组的端口号。 5
(10)dst addr:目的地址,格式为 node.port,其中 node 代表分组发送节点的 id,port 表示发 送分组的端口号 (11)seq num:分组的序列号 (12)pkt id:分组的唯一标识符。 3 数据处理 在 NS2中,模拟产生的 Trace 文件往往非常大,一般情况下,需要借助 Gawk 对其进行 处理,提取相应的数据信息。 (1)处理 n1到 n3端点间 CBR 丢包情况,测量程序写在 lostRate.awk 文件中 执行方法:$awk -f lostRate.awk out.tr 执行结果: #number of packet sent:550,lost:8 #lost rate of packets:0.014545 0.100000 0.108000 0.116000 0.000000 0.000000 0.000000 运行结果中显示 CBR 流量总共发包550,丢失8,丢包率为:0.014545。同理,我们可 以编写延时与吞吐量的 awk 文件。我们通过执行如下语句将丢包率、延时、吞吐量保存在 cbr_lostRate、cbr_delay、cbr_throughput 文件中。 执行方法: $ awk -f lostRate.awk out.tr>cbr_lostRate $ awk -f delay.awk out.tr>cbr_delay $ awk -f throughput.awk out.tr>cbr_throughput 在 Xwin 窗口中输入 xgraph cbr_lostRate,就可以把前面所存下来的 cbr_lostRate 文件使 用图形直观的表示出来,如图5所示。 6
图5 丢包率随时间变化的关系图 (2)我们可以得到 CBR 流量的时延随时间的变化如图6所示: 图6 端到端时延随时间变化的关系图 (3)节点 n2的平均吞吐量随时间的变化如图7所示: 7
图7 节点 n2的吞吐量随时间变化的关系图 4 结果分析 从 RED 的图示中,可以看出队列的大小波动变化不是很大,在处理突发的包时有一定 的优势。从丢包率、时延和吞吐量的变化图中,可以看出当丢包率增加时,端到端之间的时 延也在增加,而吞吐量则下降,丢包率、时延和吞吐量在表示网络性能的好坏时有一定的关 系。 四 部分相关代码 1.网络拓扑仿真脚本 ns-simple.tcl #Create a simulator object set ns [new Simulator] #Define different colors for data flows (for NAM) $ns color 1 Blue $ns color 2 Red #Open the NAM trace file set nf [open out.nam w] $ns namtrace-all $nf set tf [open out.tr w] $ns trace-all $tf #Define a 'finish' procedure proc finish {} { global ns nf tf 8
分享到:
收藏