队列管理机制

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

队列管理机制

一、实验目的:

学习DropTail和RED队列管理机制,以了解被动式和主动式队列管理机制的优缺点。

二、背景知识:

DropTail和被动式队列管理机制――TCL全局同步

RED和主动式队列管理机制:

计算公式:

avg=(1-w q)⨯avg+ w q⨯q w q为队列长度q的加权系统,0

1.0

max

th

P a= P b/(1-count⨯ P b) 对P b丢包概率的修正公式。其中,count记录了从上一个封包被丢弃后有多少封包进入队列。采用P a用意是希望能让封包丢弃概率的分布更均匀。

若想要有效地作用RED,适当选择w q≥1, max th>2⨯min th、max th>所有数据流中最大的封包大小。设置参数很有必要,更详细的设置方法可以参考文献[3]。

三、实验步骤

1.仿真的网络结构

在这个模拟的结构中,r1和r2是路由器,其中的链路是将采用DropTail和RED队列管理机制以作为效率分析的比较,频宽为56kbps,传递延迟的时间为10ms。其中的数据流数目可由用户在模拟时决定,下面的例子为10条TCP数据流。我们要比较的效率是这10条数据流的平均吞吐量、第一条数据流的端点到端点平均延迟时间和队列长度变化。

2.TCL程序代码

if{$argc!=2}{

puts “Usage: ns queue.tcl queuetype_noflows_”

puts “Example: ns queue.tcl myfifo 10”

puts “queuetype_: myfifo or RED”

exit

}

set par1 [lindex $argv 0]

set par2 [lindex $argv 1]

#产生一个仿真的对象

set ns [new Simulator]

#打开一个trace文件,用来记录封包传送的过程

set nd [open out-$par1-$par2.tr w]

$ns trace-all $nd

#定义一个结束的程序

proc finish{}{

global ns nd par2 tcp start

$ns flush-trace

close $nd

set time [$ns now]

set sum_thgpt 0

#throughput=收到Ack数*Packet Size(Bit)/传送时间

#收到Ack数=传送出Packet数

for {set i 0}{$i<$par2}{incr i}{

set ackno_($i) [$tcp($i) set ack_]

set thgpt($i) [expr Rackno_($i)*1000.0*8.0/($time-$start($i))]

#puts $thgpt($i)

set sum_thgpt [expr $sum_thgpt+$thgpt($i)]

}

set avgthgpt [expt $sum_thgpt/$par2]

puts “average throughput:$avgthgpt (bps)”

exit 0

}

for { set i 0}{$i<$par2}{incr i}{

set src($i) [$ns node]

set dst($i) [$ns node]

}

#产生两个路由器

set r1 [$ns node]

set r2 [$ns node]

#把结点和路由器连接起来

for { set i 0}{$i<$par2}{incr i}{

$ns duplex-link $src($i) $r1 100Mb [expr ($i*10)]ms DropTail

$ns duplex-link $r2 $dst($i) 100Mb [expr ($i*10)]ms DropTail

}

$ns duplex-link $r1 $r2 56k 10ms $par1

#设置r1到r2之间的Queue Size为50个封包大小

$ns queue-limit $r1 $r2 50

#把队列长度记录下来

set q_ [[$ns link $r1 $r2] queue]

set queuechan [open q-$par1-$par2.tr w]

$q_ trace curq_

if {$par1== “RED”}{

#使用packet mode

$q_ set bytes_ false

$q_ set queue_in_bytes_ false

}

$q_ attach $queuechan

for {set i 0}{$i<$par2}{incr i}{

set tcp ($i) [$ns create-connection TCP/Reno $src($i) TCPSink $dst($i) 0] $tcp($i) set fid_ $i

}

#随机在0~1s之间决定数据流开始传送的时间

set rng [new RNG]

$rng seed 1

set RVstart [new RandomVariable/Uniform]

$RVstart set min_ 0

$RVstart set max_ 1

$RVstart use-rng $rng

#决定开始传送的时间

for {set i 0}{$i<$par2}{incr i}{

set startT ($i) [expr [$RVstart value]]

#puts “start T ($i) $startT ($i) sec”

}

相关文档
最新文档