第五组 - 基于NS-2的差异式服务网络仿真 - 图文

更新时间:2023-09-21 19:34:01 阅读量: 工程科技 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《网络性能分析与测试》

课程设计报告

(2012— 2013学年 第 1 学期)

题 目 基于NS-2的差异式服务网络仿真 学生姓名 李燕清 林小琼 王文婷

阮玲玲 蔡伟胜 兰海月

专 业_ 09网络工程 学 号_0907022101( 18 31 49 51 55) 班 级_ 1班 指导教师 陈仁 成 绩_

计算机科学与技术系

2012年 11月

1

目录

1.前言 ................................................................................................................................................. 1

1.1差异式服务网络的简介 ....................................................................................................... 1 1.2项目分工 .............................................................................................................................. 1 2.常用算法简介 ................................................................................................................................. 3

2.1以量测数据流平均速率的算法——TSWTCM .................................................................. 3 2.2以令牌桶桶(Token Bucket)为测量方法的算法............................................................. 3 2.2.1SRTCM(单速率三色标记器) ....................................................................................... 3 2.2.2TRTCM(双速率三色标记器) ....................................................................................... 4 3.NS2的简介和安装 ......................................................................................................................... 6

3.1NS2的简介 ........................................................................................................................... 6 3.2 在ubuntu10.04 下安装 ns2 2.34以及GNUPLOT .......................................................... 8

3.2.1在ubuntu10.04 下安装 ns2 2.34 ............................................................................. 8 3.2.2在ubuntu10.04 下安装 GNUPLOT ........................................................................ 9

4. 基于NS-2差异式服务网络仿真的算法实现 ........................................................................... 10

4.1TCL程序代码——TSWTCM算法的实现 ....................................................................... 10 4.2TCL程序代码——SRTCM算法的实现 ........................................................................... 15 4.3TCL程序代码——TRTCM算法的实现 ........................................................................... 19 5. 算法的比较 ................................................................................................................................. 25 6. 心得体会 ..................................................................................................................................... 26 参考文献 .......................................................................................................................................... 27

1

基于NS-2的差异式服务网络仿真

1.前言

随着多媒体应用程序如随选视频(Video On Ddmand VOD)、网络电话(Voice Over IP,VOIP)、网络会议(ConferencingOver IP)等的发展,这使的目前Internet所采用的尽力服务(Best-dffort Service)不能再满足这些多媒体应用程序的需求,所以IETF(Internet Engineering Task Force)就针对网络服务质量(Quality of Service)提出了两种服务的模型——整合式服务(Integrated Service,IntServ)网络模型和差异式服务(Differentiated Service,DiffServ)网络模型。但是,整合式服务网络模型有复杂度(Complexity)高和扩充性(Scalability)分问题因此差异性服务式网络模型获得研究学者们较多的注意。E而NS(Network Simulator) 是一种针对网络技术的源代码公开的、免费的软件模拟平台,研究人员使用它可以很容易的进行网络技术的开发,而且发展到今天,它所包含的模块几乎涉及到了网络技术的所有方面。所以,NS成了目前学术界广泛使用的一种网络模拟软件,对差异式服务网络的研究起到了积极的作用。

1.1差异式服务网络的简介

差异式服务网络结构的精神在于它设法简化核心核心路由器(Core Router)的复杂度,尽量将复杂的允入控制(Admission Control)交友频宽管理者(Bandwidth Broker,BB)负责,封包辨识工作(Packet Clssification)交有边境路由器(Edge Router,ER)负责,并且采用比较粗略的以类别区分网络质量保证(Per-class OoS);所以差异式服务网络结构就比整合式服务网络结构能够提供较高的可扩充性。

目前差异式服务网络结构定义了两种服务的形态——EF(Expedited Forwarding)服务和AF(Aaasured Forwarding)服务。EF主要是听歌低延迟(Low Delay)、低延迟抖动(Low Jitter)和低封包遗失率(Low Loss Rate)的服务;而AF则提供更有弹性的服务,因此AF只有对吞吐量(Throughput)有所要求,对于延迟(Delay)或延迟抖动(Jitter)没有严格的要求。AF就是希望通过有效地控制具有较低封包丢弃概率值的封包流进核心路由器中,以达到最低吞吐量(Minimum Throughput)的保证。

在AF服务中常用一些算法来测量用户数据是否符合规范,这些算法可以分为两种类型,一种是以量测数据流平均速率的算法,常见的是TSWTCM(Time Sliding Window Three Color Marker);另一种是以令牌桶桶(Token Bucket)为测量方法的算法,常见的是SRTCM(Sing Rate Three Color Marker)和TRTCM(Two Rate Three Color Marker)。

我们将通过分工的形式,利用NS-2模拟环境,使用TSWTCM、SRTCM、TRTCM这三种算法来仿真模拟端点到端点的服务质量,再利用GAWK处理文档,跟踪TRACE文件,利用GNUPLOT对数据进行绘图分析,分析其平均吞吐量来量测用户数据是否达到要求,并用TCP和UDP的封包进行比较,分析这三种算法的优缺点。

1.2项目分工

为了确保项目能高效地完成,通过毛遂自荐的方式选举组长,而后由组长分解任务,组员按照自己的意愿及能力自主选择任务,后经讨论、自选等方式,我们做了如下的项目分工:

表1.2.1 项目分工

任务分工 领取、分配任务 小组成员 林小琼(组长) 工期(天) 起始时间 0.5天 结束时间 2012-11-29 2012-11-29 1

前期借书学习相关知识,了解三个算法如何仿真,比较三种算法的优缺点 环境搭配 算法仿真,学习TSWTCM算法,学习利用GAWK处理文档 算法仿真,学习SRTCM算法,记录实验操作 算法仿真,学习TRTCM算法,记录实验操作 利用GNUPLOT对数据进行绘图分析,学习如何跟踪TRACE文件,文档记录与编写,课程设计日志编写,PPT制作 检查答辩 全组成员 王文婷 李燕清 阮玲玲 兰海月 0.5天 2天 2天 2天 2天 2012-11-29 2012-11-29 2012-11-30 2012-12-04 2012-11-30 2012-12-04 2012-11-30 2012-12-04 2012-11-30 2012-12-04 林小琼、蔡伟胜 2天 全组成员 1天 2012-11-30 2012-12-04 2012-12-05 2012-12-05 任务分配完工后,小组各成员各司其职,认真完成自己所分配的任务。

2

2.常用算法简介

2.1以量测数据流平均速率的算法——TSWTCM

在TSWTCM(Time Sliding Window Three Color Marker)中包含了两个部分,一个是速率估计器(Rate Estimator),另一个是封包丢弃概率值标注器(Packet Marker),如图2.1.1为TSWTCM结构图:

图2.1.1TSWTCM结构图

2.2以令牌桶桶(Token Bucket)为测量方法的算法

IETF建议采用SRTCM(Single Rate Three Color Marker,RFC2697)算法或TRTCM( Two Rate Three Color Marker,RFC2698)算法对流量进行评测,根据评估结果为报文打颜色标记,即绿色、黄色和红色。被标示为红色的封包有很高的机率会被丢弃,被标示为黄色的封包会尽可能的被传送出去,被标示为绿色的封包只有很低的可能会被丢弃。

SRTCM和TRTCM算法均采用两个令牌桶对到达的报 文进行评估,允许流量在某种级别上突发。SRTCM与TRTCM算法有两种工作模式:色盲模式(Color-Blind)与感色模式(Color-Aware)。

2.2.1SRTCM(单速率三色标记器)

SRTCM测量信息流,并根据三种流量参数(提交信息速率,Committed Information Rate, CIR;提交组量大小Committed Burst Size,CBS;超量组量大小Excess Burst Size,EBS)对包进行标记,这三个参数我们分别称为绿,黄和红标记。一般采用双桶结构:C桶和E桶。Tc表示C桶中的令牌数,Te表示E桶中令牌数,两桶的总容量分别为CBS和EBS。初始状态时两桶是满的,即Tc和Te初始值分别等于CBS和EBS。如果包没有超过CBS就是绿的,如果超过CBS但未超过EBS就是黄的,如果超过EBS就是红的。令牌的产生速率是CIR,通常是先往C桶中添加令牌,等C桶满了,再往E桶中添加令牌,当两桶都被填满时,新产生的令牌将会被丢弃。如图2.2.1.1是SRTCM双桶结构:

图2.2.1.1SRTCM双桶结构

SRTCM有两种工作模式:色盲模式(Color-Blind)与感色模式(Color-Aware):

3

1)色盲模式(Color-Blind)

图2.2.1.2SRTCM色盲模式

2)感色模式(Color-Aware)

图2.2.1.3SRTCM感色模式

2.2.2TRTCM(双速率三色标记器)

IETF的RFC文件[3]定义了双速率三色算法,主要是根据4种流量参数来评估:CIR、CBS、峰值信息速率(PIR),峰值突发尺寸(PBS)。前两种参数与单速率三色算法中的含义相同,PIR这个参数只在交换机上才有,路由器没有这个参数。该值必须不小于CIR的设置值,如果大于CIR,则速率限制在CIR于PRI之间的一个值。

与单速率三色标记算法不同,双速率三色标记算法的两个令牌桶C桶和P桶填充令牌的速率不同,C桶填充速率为CIR,P桶为PIR;两桶的容量分别为CBS和PBS。用Tc和Tp表示两桶中的令牌数目,初始状态时两桶是满的,即Tc和Tp初始值分别等于CBS和PBS。如图2.2.2.1是TRTCM双桶结构:

4

图2.2.2.1是TRTCM双桶结构:

TRTCM有两种工作模式:色盲模式(Color-Blind)与感色模式(Color-Aware): 1)色盲模式(Color-Blind)

图2.2.2.2TRTCM色盲模式

3)感色模式(Color-Aware)

图2.2.2.3TRTCM感色模式

5

3.NS2的简介和安装

对于如何验证网络协议的正确性和进行相关性能测试,人们提出了很多方法,目前最广泛使用的方法就是通过虚拟环境进行模拟仿真。NS2是最流行的进行网络模拟的软件之一,已广泛被科研院所和各大高校用于进行网路分析、研究和教学。它支持众多的协议,并提供了丰富的测试脚本。

3.1NS2的简介

NS2,即Network Simulator Version 2,是面向对象的、离散事件驱动的网络环境模拟器,主要用于解决网络研究方面的问题。NS2提供了在无线或者有线网络上的TCP、路由、多播等多种协议的模拟。

NS2使用一整套完整C++类库实现了绝大多数常见的网络协议以及链路层的模型,利用这些类的实例就可以搭建起整个网络的模型,而且包括详尽的细节实现。它实现了诸如TCP,UDP等网络协议,数据传输如FTP,Telnet,Web,CBR和VBR的模拟以及路由队列的管理机制诸如DropTail,RED和CBQ,路由算法Dijkstr等。NS2还可用于多播和MAC层协议的仿真。

图3.1.1 从一个用户的角度看NS2

如图3.1.1所示,从一个简单用户的角度来看,NS2是面向对象的 Tcl脚本解释器(即OTcl),这个解释器由模拟事件调度器、网络组件对象库和网络组装(plumbing)模块库(事实上,组装模块就是基本模拟对象的成员函数)等组成。换句话说,使用NS2,就是用OTcl脚本语言编写程序、设置和运行模拟网络;用OTcl脚本语言初始化一个事件调度器,设置网络的拓扑结构;用网络对象和它的成员函数通过使用事件调度器通知网络源什么时候启动、什么时候结束。

如图3.1.2所示,是NS2的基本结构。

图3.1.2NS2的基本结构

6

对一般使用NS2的用户来说,可能会用OTcl脚本语言来撰写网络拓扑部分,而OTcl事实上就是架构在Tcl之上的通过面向对象后所延伸出来的脚本语言。事件调度器(Event Scheduler)和网络组件(NetworkComponent)这两部分,主要是用C++语言来完成的。NS2是以事件驱动(Event Driven)的概念来进行模拟,比如说,在1.2s的时候开始做FTP数据的传输,在2.0s的时候结束传输,这是由事件调度器完成的部分。至于网络组件则是NS2中的诸如Agent(TCP,UDP,…)、TraficGenerator(FTP,CBR,…)部分。图2.1.2中将C++画在最底层是表示NS2的核心是C++,然后通过Tclcl作为桥梁来沟通OTcl及C++,最后搭配一个用户接口(UserInterface),这就构成了NS2本身。一个普通的NS2用户可以被想象站在图2.1.2的左下角。通过使用OTcl库中的模拟对象设计和运行模拟器。事件调度器和大多数的网络组件在C++中实现并且通过OTcl连接(即Tclcl)使其在OTcl中有效。所有这些就构成了NS2,这是一个面向对象的带有网络模拟库的OTcl解释器。

使用NS2的流程如图2.1.3所示,首先应先提出问题,其次按照问题的要求编写Tcl脚本,完成环境的模拟,接下来,执行Tcl脚本,可以得到一个或多个文本文件,这些文件是NS2的执行过程中产生的跟踪文件,通过对这些文件的分析统计,可以从中得到模拟结果。

图3.1.3使用NS2流程图

NS2和TCP/IP,OSI七层网络结构的大致对应关系如图3.1.4所示。

7

图3.1.4NS2和TCP/IP,OSI七层网络结构的对应关系

3.2 在ubuntu10.04 下安装 ns2 2.34以及GNUPLOT

3.2.1在ubuntu10.04 下安装 ns2 2.34

1)先下载ns2的最新版本ns-allinone-2.34, 并解压到对应目录下(也可以用命令解压:tar zxf ns-allinone-2.34.tar.gz 如果想看解压的输出过程:把\改为\; 2)执行如下命令,安装ns2需要的库:  sudo apt-get install build-essential  sudo apt-get install tcl8.4 tcl8.4-dev  sudo apt-get install tk8.4-dev   sudo apt-get install libxmu-dev 3) 进入ns2的解压缩后的文件夹中cd ns-allinone-2.34(可省略) 4)如果gcc的版本大于4.0则在./install之前要做一些修改(\4.0版本以前是用ld -share来生成共享库的,但是到了4.0以上的版本,这个命令改为了gcc -share即可\ cd ns-allinone-2.34/otcl-1.13  sudo gedit configure.in 把77行处的SHLIB_LD=\-shared\改为SHLIB_LD=\-shared\保存退出,然后:  sudo gedit configure 把6304行(Ctrl+F)的SHLIB_LD=\-shared\改为SHLIB_LD=\-shared\保存退出,然后:  cd ns-allinone-2.34 #到安装目录 sudo ./install #开始安装 5)配置环境变量  cd #进入目录/home/*user*(**是用 户名),然后  sudo gedit .bashrc  在文件末尾加入:

PATH=\x\ LD_LIBRARY_PATH=\ TCL_LIBRARY=\

8

 保存退出,使环境变量生效source .bashrc(可省略) 6)验证(测试)  (1)打开一个新的终端  (2)输入ns并回车  $ns (如果正常,回出现\操作提示符)  (3)输入一段测试用的Tcl脚本代码进行测试  %puts \World\(输出Hello World字符串)  Hello World (如果正确,会显示Hello World)  % (然后跳到下一个\提示符等待下一条指令输入) 7)安 cd    sudo make install ns2 2.34安装完毕。

3.2.2在ubuntu10.04 下安装 GNUPLOT

在装有NS2程序的乌邦图虚拟机中打开终端,运行下列程序: sudo apt-get install gnuplot GNUPLOT安装完毕。

9

装nam ns-allinone-2.34/nam-1.14 ./configure make

4. 基于NS-2差异式服务网络仿真的算法实现

如图4.1仿真网络结构图所示,e1和e2是边界路由器,在此我们设置TSWTCM、SRTCM和TRTCM来测量用户数据是否符合规范,core是核心路由器。另外,这三个路由器所采用的队列管理机制是WRED(Weighted Random Early Detection),包含了三个虚拟队列(Virtual Queue),用来记录三种不同封包丢弃概率值的封包队列长度,但实际上只有一个队列(Physical Queue),这个实际的队列是真正用来暂时存放封包用的,而这三个虚拟队列设置不同的临界值(Threshold)和封包丢弃率,使具有红色标注的封包能在发生队列长度在超过临界值时优先丢弃,接着黄色标注的封包,最后才是绿色标注的封包。

图4.1仿真网络结构图

4.1TCL程序代码——TSWTCM算法的实现

(1)在装有NS2程序的乌邦图虚拟机中打开终端,运行下列程序:

set ns [new Simulator]

#开启一个trace file,用来记录封包传送的过程 set nd [open tsw3cm.tr w] $ns trace-all $nd

#设定TSWTCM的参数,在NS2中TSWTCM名称是TSW3CM #设定第一个分组的CIR为1500000 bps, PIR 为3000000 bps #设定第二个分组的CIR为1000000 bps, PIR 为2000000 bps

#设定第一个分组的CBR的传送速率为4000000 bps, 第二组的为4000000 bps set cir0 1500000 set pir0 3000000 set rate0 4000000 set cir1 1000000 set pir1 2000000 set rate1 4000000

#模拟时间为85秒,每个传送的CBR的封包大小为1000 byte set testTime 85.0 set packetSize 1000

# 设定网路模拟架构 set s1 [$ns node] set s2 [$ns node] set e1 [$ns node] set core [$ns node]

10

set e2 [$ns node] set dest [$ns node]

$ns duplex-link $s1 $e1 10Mb 5ms DropTail $ns duplex-link $s2 $e1 10Mb 5ms DropTail

#指定e1为边境路由器,core为核心路由器

$ns simplex-link $e1 $core 10Mb 5ms dsRED/edge $ns simplex-link $core $e1 10Mb 5ms dsRED/core

#指定e2为边境路由器

$ns simplex-link $core $e2 5Mb 5ms dsRED/core $ns simplex-link $e2 $core 5Mb 5ms dsRED/edge

$ns duplex-link $e2 $dest 10Mb 5ms DropTail

#设定在nam中节点的位置关系图

$ns duplex-link-op $s1 $e1 orient down-right $ns duplex-link-op $s2 $e1 orient up-right $ns duplex-link-op $e1 $core orient right $ns duplex-link-op $core $e2 orient right $ns duplex-link-op $e2 $dest orient right

#设定伫列名称

set qE1C [[$ns link $e1 $core] queue] set qE2C [[$ns link $e2 $core] queue] set qCE1 [[$ns link $core $e1] queue] set qCE2 [[$ns link $core $e2] queue]

#设定e1到core的参数

$qE1C meanPktSize $packetSize

#设定一个physical queue $qE1C set numQueues_ 1

#设定三个virtual queue $qE1C setNumPrec 3

#设定从s1到dest为第一个分组,采用TSW3CM #并把符合标准的封包标成绿色(10)

$qE1C addPolicyEntry [$s1 id] [$dest id] TSW3CM 10 $cir0 $pir0

#设定从s2到dest为第二个分组,采用TSW3CM #并把符合标准的封包标成绿色(10)

11

$qE1C addPolicyEntry [$s2 id] [$dest id] TSW3CM 10 $cir1 $pir1

#把不符合标准的封包标注成黄色(11)和红色(12) $qE1C addPolicerEntry TSW3CM 10 11 12

#把绿色(10)的封包放到第一个实际伫列中(0)的第一个虚拟伫列(0) $qE1C addPHBEntry 10 0 0

#把黄色(11)的封包放到第一个实际伫列中(0)的第二个虚拟伫列(1) $qE1C addPHBEntry 11 0 1

#把红色(12)的封包放到第一个实际伫列中(0)的第三个虚拟伫列(2) $qE1C addPHBEntry 12 0 2

#设定第一个实际伫列中(0)的第一个虚拟伫列(0)的RED参数 #{min, max, max drop probability} = {20 packets, 40 packets, 0.02} $qE1C configQ 0 0 20 40 0.02

#设定第一个实际伫列中(0)的第二个虚拟伫列(1)的RED参数为{10, 20, 0.1} $qE1C configQ 0 1 10 20 0.10

#设定第一个实际伫列中(0)的第二个虚拟伫列(2)的RED参数为{5, 10, 0.20} $qE1C configQ 0 2 5 10 0.20

#设定e2到core的参数

$qE2C meanPktSize $packetSize $qE2C set numQueues_ 1 $qE2C setNumPrec 3

$qE2C addPolicyEntry [$dest id] [$s1 id] TSW3CM 10 $cir0 $pir0 $qE2C addPolicyEntry [$dest id] [$s2 id] TSW3CM 10 $cir1 $pir1 $qE2C addPolicerEntry TSW3CM 10 11 12 $qE2C addPHBEntry 10 0 0 $qE2C addPHBEntry 11 0 1 $qE2C addPHBEntry 12 0 2 $qE2C configQ 0 0 20 40 0.02 $qE2C configQ 0 1 10 20 0.10 $qE2C configQ 0 2 5 10 0.20

#设定core到e1的参数

$qCE1 meanPktSize $packetSize $qCE1 set numQueues_ 1 $qCE1 setNumPrec 3

$qCE1 addPHBEntry 10 0 0 $qCE1 addPHBEntry 11 0 1

12

$qCE1 addPHBEntry 12 0 2 $qCE1 configQ 0 0 20 40 0.02 $qCE1 configQ 0 1 10 20 0.10 $qCE1 configQ 0 2 5 10 0.20

#设定core到e2的参数

$qCE2 meanPktSize $packetSize $qCE2 set numQueues_ 1 $qCE2 setNumPrec 3

$qCE2 addPHBEntry 10 0 0 $qCE2 addPHBEntry 11 0 1 $qCE2 addPHBEntry 12 0 2 $qCE2 configQ 0 0 20 40 0.02 $qCE2 configQ 0 1 10 20 0.10 $qCE2 configQ 0 2 5 10 0.20

#设定s1到dest的CBR参数 set udp0 [new Agent/UDP] $ns attach-agent $s1 $udp0

set cbr0 [new Application/Traffic/CBR] $cbr0 attach-agent $udp0 $udp0 set class_ 1

$cbr0 set packet_size_ $packetSize $udp0 set packetSize_ $packetSize $cbr0 set rate_ $rate0

set null0 [new Agent/Null] $ns attach-agent $dest $null0 $ns connect $udp0 $null0

#设定s2到dest的CBR参数 set udp1 [new Agent/UDP] $ns attach-agent $s2 $udp1

set cbr1 [new Application/Traffic/CBR] $cbr1 attach-agent $udp1 $udp1 set class_ 2

$cbr1 set packet_size_ $packetSize $udp1 set packetSize_ $packetSize $cbr1 set rate_ $rate1

set null1 [new Agent/Null] $ns attach-agent $dest $null1 $ns connect $udp1 $null1

#定义一个结束的程序 proc finish {} {

13

设计日志 11月30日 上午: 1.王文婷开始搭配环境,首先是要运行在装有乌邦图(Ubontu)操作系统的虚拟机上。在安装虚拟机的时候遇到了一些问题。首先Vmware版本太低需要卸载重新安装版本高的。由于电脑是64位,而所下载的乌邦图(Ubontu)是34位的,刚开始在安装的时候没有发现这个问题,故费了一些精力。 2.李燕清、阮玲玲、兰海月在研究分配给她们的算法。 3.林小琼、蔡伟胜开始整理文档内容。蔡伟胜在网上查找相关的gnuplot分析多组数据绘图知识,并群共享。林小琼负责与其他小组进行交流讨论,及时反馈问题。 下午: 1.王文婷在乌邦图(Ubontu)虚拟机上安装NS-2软件,搭配环境甚是麻烦,安装过程中遇到了很多麻烦。 2.兰海月开始着手敲书本上有关TRTCM算法的代码; 3.李燕清和阮玲玲继续研究分配给她们的算法。 4.林小琼、蔡伟胜继续写文档,并上网下载PPT模板。 5.小组成员与做同一个设计的其他小组成员交流讨论,大家分享设计的心得体会与资料。 晚上: 1.林小琼催促小组各成员把当天完成的任务告之林小琼和蔡伟胜,各成员在讨论组里告之了各自今天所完成的任务; 2.林小琼、蔡伟胜写当天的日志文档。 3.各成员为明天的任务做的准备。 上午: 1.王文婷继续安装环境,终于在上午把环境搭配成功; 2.李燕清、阮玲玲、兰海月已把代码编好,准备着手进行代码运行; 3.林小琼与做同一个课设的其他小组组长讨论遇到的问题以及工作的进度; 4.林小琼、蔡伟胜整理文档,并把前言等内容编制好; 下午: 1.小组进行算法验证的同学遇到了困难,在图形绘制过程中12月04日 不能照抄书本上的,大家进行讨论,并请教了其他同学; 晚上: 1.林小琼催促小组各成员把当天完成的任务告之林小琼和蔡伟胜,各成员在讨论组里告之了各自今天所完成的任务; 2.林小琼、蔡伟胜写当天的日志文档。 3.各成员为明天的任务做的准备。 29

上午: 1.李燕清、阮玲玲、兰海月继续研究昨天遇到的问题,争取解决画图难题; 2.林小琼、蔡伟胜整理文档,并把NS2的安装过程以及一些算法的介绍整理完毕; 下午: 1.李燕清、阮玲玲、兰海月继已成功解决画图难题,并进行了算 法验证和影像记录; 2.林小琼、蔡伟胜整理文档,文档基本完成; 12月05日 晚上: 1.林小琼催促小组各成员把当天完成的任务告之林小琼和蔡伟胜,各成员在讨论组里告之了各自今天所完成的任务; 2.林小琼、蔡伟胜写当天的日志文档。 3.各成员为明天的任务做的准备。 上午: 1.整理文档和制作PPT的组员完善文档和PPT; 2.完善我们所做的实验; 3.小组成员为答辩做准备; 4.小组内部对文档进行审核,准备第一次提交Word文档让老师检查,做好答辩准备。 12月06日 记录人:林小琼、蔡伟胜

30

(注:指导教师评语和成绩所在表格另起一页)

指导教师 评 语 课程设计 成 绩

指导教师签字 年 月 日 31

$ns at $testTime \

$ns at [expr $testTime + 1.0] \

$ns run

(2)执行方法:$ns SRTCM.tcl; (3)执行measure-cbr0.awk来测量s1到dest的cbr吞吐量:$awk -f measure-cbr0.awk srtcm.tr>cbr0 (4)执行measure-cbr1.awk来测量s2到dest的cbr吞吐量:$awk -f measure-cbr1.awk srtcm.tr>cbr1 (5)进行吞吐量绘图:

1)进入绘图模式:$startxwin.bat 2)执行gnuplot,进行绘图: $gnuplot

gnuplot>plot “cbr0”with linespoints,“cbr1”with linespoints

图4.2.1SRTCM吞吐量图形

SRTCM算法CBR0有达到最小吞吐量的要求,大约平均吞吐量约为2600kbps;CBR1有达到最小吞吐量的要求,大约平均吞吐量约为2400kbps。

4.3TCL程序代码——TRTCM算法的实现

(1)在装有NS2程序的乌邦图虚拟机中打开终端,运行下列程序:

set ns [new Simulator]

#开启一个trace file,用来记录封包传送的过程 set nd [open trtcm.tr w] $ns trace-all $nd

#设定第一个分组的CIR为1500000 bps, CBR为2000 bytes, PIR为3000000 bps, PBS为3000bytes

#设定第二个分组的CIR为1000000 bps, CBR为1000 bytes, PIR为2000000 bps, PBS为

19

2000bytes

#设定第一个分组的CBR的传送速率为4000000 bps, 第二组的为4000000 bps set cir0 1500000 set cbs0 2000 set pir0 3000000 set pbs0 3000 set rate0 4000000 set cir1 1000000 set cbs1 1000 set pir1 2000000 set pbs1 2000 set rate1 4000000

#模拟时间为85秒,每个传送的CBR的封包大小为1000 byte set testTime 85.0 set packetSize 1000

# 设定网路模拟架构 set s1 [$ns node] set s2 [$ns node] set e1 [$ns node] set core [$ns node] set e2 [$ns node] set dest [$ns node]

$ns duplex-link $s1 $e1 10Mb 5ms DropTail $ns duplex-link $s2 $e1 10Mb 5ms DropTail

#指定e1为边境路由器,core为核心路由器

$ns simplex-link $e1 $core 10Mb 5ms dsRED/edge $ns simplex-link $core $e1 10Mb 5ms dsRED/core

#指定e2为边境路由器

$ns simplex-link $core $e2 5Mb 5ms dsRED/core $ns simplex-link $e2 $core 5Mb 5ms dsRED/edge

$ns duplex-link $e2 $dest 10Mb 5ms DropTail

#设定在nam中节点的位置关系图

$ns duplex-link-op $s1 $e1 orient down-right $ns duplex-link-op $s2 $e1 orient up-right $ns duplex-link-op $e1 $core orient right $ns duplex-link-op $core $e2 orient right $ns duplex-link-op $e2 $dest orient right

20

#设定伫列名称

set qE1C [[$ns link $e1 $core] queue] set qE2C [[$ns link $e2 $core] queue] set qCE1 [[$ns link $core $e1] queue] set qCE2 [[$ns link $core $e2] queue]

#设定e1到core的参数

$qE1C meanPktSize $packetSize

#设定一个physical queue $qE1C set numQueues_ 1

#设定三个virtual queue $qE1C setNumPrec 3

#设定从s1到dest为第一个分组,采用TRTCM #并把符合标准的封包标成绿色(10)

$qE1C addPolicyEntry [$s1 id] [$dest id] trTCM 10 $cir0 $cbs0 $pir0 $pbs0

#设定从s2到dest为第二个分组,采用TRTCM #并把符合标准的封包标成绿色(10)

$qE1C addPolicyEntry [$s2 id] [$dest id] trTCM 10 $cir1 $cbs1 $pir1 $pbs1

#把不符合标准的封包标注成黄色(11)和红色(12) $qE1C addPolicerEntry trTCM 10 11 12

#把绿色(10)的封包放到第一个实际伫列中(0)的第一个虚拟伫列(0) $qE1C addPHBEntry 10 0 0

#把黄色(11)的封包放到第一个实际伫列中(0)的第二个虚拟伫列(1) $qE1C addPHBEntry 11 0 1

#把红色(12)的封包放到第一个实际伫列中(0)的第三个虚拟伫列(2) $qE1C addPHBEntry 12 0 2

#设定第一个实际伫列中(0)的第一个虚拟伫列(0)的RED参数 #{min, max, max drop probability} = {20 packets, 40 packets, 0.02} $qE1C configQ 0 0 20 40 0.02

#设定第一个实际伫列中(0)的第二个虚拟伫列(1)的RED参数为{10, 20, 0.1} $qE1C configQ 0 1 10 20 0.10

#设定第一个实际伫列中(0)的第二个虚拟伫列(2)的RED参数为{5, 10, 0.20}

21

$qE1C configQ 0 2 5 10 0.20

#设定e2到core的参数

$qE2C meanPktSize $packetSize $qE2C set numQueues_ 1 $qE2C setNumPrec 3

$qE2C addPolicyEntry [$dest id] [$s1 id] trTCM 10 $cir0 $cbs0 $pir0 $pbs0 $qE2C addPolicyEntry [$dest id] [$s2 id] trTCM 10 $cir1 $cbs1 $pir1 $pbs1 $qE2C addPolicerEntry trTCM 10 11 12 $qE2C addPHBEntry 10 0 0 $qE2C addPHBEntry 11 0 1 $qE2C addPHBEntry 12 0 2 $qE2C configQ 0 0 20 40 0.02 $qE2C configQ 0 1 10 20 0.10 $qE2C configQ 0 2 5 10 0.20

#设定core到e1的参数

$qCE1 meanPktSize $packetSize $qCE1 set numQueues_ 1 $qCE1 setNumPrec 3

$qCE1 addPHBEntry 10 0 0 $qCE1 addPHBEntry 11 0 1 $qCE1 addPHBEntry 12 0 2 $qCE1 configQ 0 0 20 40 0.02 $qCE1 configQ 0 1 10 20 0.10 $qCE1 configQ 0 2 5 10 0.20

#设定core到e2的参数

$qCE2 meanPktSize $packetSize $qCE2 set numQueues_ 1 $qCE2 setNumPrec 3

$qCE2 addPHBEntry 10 0 0 $qCE2 addPHBEntry 11 0 1 $qCE2 addPHBEntry 12 0 2 $qCE2 configQ 0 0 20 40 0.02 $qCE2 configQ 0 1 10 20 0.10 $qCE2 configQ 0 2 5 10 0.20

#设定s1到dest的CBR参数 set udp0 [new Agent/UDP] $ns attach-agent $s1 $udp0

set cbr0 [new Application/Traffic/CBR] $cbr0 attach-agent $udp0 $udp0 set class_ 1

22

$cbr0 set packet_size_ $packetSize $udp0 set packetSize_ $packetSize $cbr0 set rate_ $rate0

set null0 [new Agent/Null] $ns attach-agent $dest $null0 $ns connect $udp0 $null0

#设定s2到dest的CBR参数 set udp1 [new Agent/UDP] $ns attach-agent $s2 $udp1

set cbr1 [new Application/Traffic/CBR] $cbr1 attach-agent $udp1 $udp1 set class_ 2

$cbr1 set packet_size_ $packetSize $udp1 set packetSize_ $packetSize $cbr1 set rate_ $rate1

set null1 [new Agent/Null] $ns attach-agent $dest $null1 $ns connect $udp1 $null1

#定义一个结束的程序 proc finish {} {

global ns nd $ns flush-trace close $nd exit 0 }

#显示在e1的SLA $qE1C printPolicyTable $qE1C printPolicerTable

$ns at 0.0 \$ns at 0.0 \

$ns at $testTime \$ns at $testTime \

$ns at [expr $testTime + 1.0] \

$ns run

2)执行方法:$ns TRTCM.tcl;

23

本文来源:https://www.bwwdw.com/article/r63h.html

Top