[e2e] RED vs DropTail using NS2

anjali chawla anjaliachawla013 at gmail.com
Thu Feb 5 23:49:18 PST 2015


Hi all
i am sharing my ".tcl" files which shows how RED solves global
synchronization problem of DropTail (i.e. mutiple connections reducing
their window at the same time).
please test with same and tell me whether results are ok or not ???
or any other improvement which needs to be  done further.
Thanks


####################DropTail.tcl#######################################################################

  set ns [new Simulator]


# Open NAM trace file

set NumbSrc 1000
  set SimDuration 50

  set nf [open droptail.nam w]
  $ns namtrace-all $nf


  set tf [open droptail.tr w]
  $ns trace-all $tf

# Open TCP cndw trace file

for {set j 1} {$j<=$NumbSrc} { incr j } {
     #$ns at 0.1 "plotWindow $tcp_src($j) $windowVsTime $j"
       set windowVsTime($j) [open wind($j) w]
  }

  #set windowVsTime [open wind w]

# Open parameter recording file
  set param [open parametersd w]


# Define a 'finish' procedure
  proc finish {} {
     global ns nf tf

     $ns flush-trace
     close $nf
     close $tf
     #exec nam droptail.nam &
     exit 0
  }

# Create bottleneck and dest nodes
  set n2 [$ns node]
  set n3 [$ns node]

Queue/RED set bytes_ false
# default changed on 10/11/2004.
Queue/RED set queue_in_bytes_ false
# default changed on 10/11/2004.
Queue/RED set q_weight_ 0.002
Queue/RED set thresh_ 40
Queue/RED set maxthresh_ 80




# Create links between bottleneck nodes
  $ns duplex-link $n2 $n3 0.5Mb 1ms DropTail
  $ns queue-limit $n2 $n3 100
# #################################################################

# Create $NumbSrc source nodes
  for {set j 1} {$j<=$NumbSrc} { incr j } {
     set S($j) [$ns node]
  }


# Create a random generator for starting the ftp and
# for bottleneck link delays
  set rng [new RNG]
  $rng seed 2

# parameters for random variables for begenning of ftp connections
  set RVstart [new RandomVariable/Uniform]
  $RVstart set min_ 0
  $RVstart set max_ 7
  $RVstart use-rng $rng

# Define random starting times for each connection
  for {set i 1} {$i<=$NumbSrc} { incr i } {
     set startT($i)  [expr [$RVstart value]]
     set dly($i) 1
     puts "startT($i)  $startT($i) sec"
     puts $param "startT($i)  $startT($i) sec"
  }

# Create links between source and bottleneck
  for {set j 1} {$j<=$NumbSrc} { incr j } {
     $ns duplex-link $S($j) $n2 100Mb $dly($j)ms DropTail
     #$ns queue-limit $S($j) $n2 20
  }


# Orient the links
  $ns duplex-link-op $n2 $n3 orient right
  $ns duplex-link-op $S(1) $n2 orient right-down
  $ns duplex-link-op $S(2) $n2 orient right
  $ns duplex-link-op $S(3) $n2 orient right-up

# Set Queue Size of (bottleneck) link (n2-n3) to 100
 # $ns queue-limit $n2 $n3 100

# Create TCP Sources
  for {set j 1} {$j<=$NumbSrc} { incr j } {
     set tcp_src($j) [new Agent/TCP]
     $tcp_src($j) set window_ 8000
  }

# Color the packets
  $tcp_src(1) set fid_ 1
  $ns color 1 red
  $tcp_src(2) set fid_ 2
  $ns color 2 yellow
  $tcp_src(3) set fid_ 3
  $ns color 3 blue

# Create TCP Destinations
  for {set j 1} {$j<=$NumbSrc} { incr j } {
     set tcp_snk($j) [new Agent/TCPSink]
  }


# Define connections between TCP src's and sinks
  for {set j 1} {$j<=$NumbSrc} { incr j } {
     $ns attach-agent $S($j) $tcp_src($j)
     $ns attach-agent $n3 $tcp_snk($j)
     $ns connect $tcp_src($j) $tcp_snk($j)
  }

# Further parametrisation of TCP sources
  for {set j 1} {$j<=$NumbSrc} { incr j } {
     $tcp_src($j) set packetSize_ 552
  }


# Create FTP sources
  for {set j 1} {$j<=$NumbSrc} { incr j } {
     set ftp($j) [$tcp_src($j) attach-source FTP]
  }


# Schedule events for the FTP agents:
  for {set i 1} {$i<=$NumbSrc} { incr i } {
     $ns at $startT($i) "$ftp($i) start"
     $ns at $SimDuration "$ftp($i) stop"
  }


# plotWindow(tcpSource file k): Write CWND of k tcpSources in file
  proc plotWindow {tcpSource file} {
     global ns

     set time 0.1
     set now [$ns now]
     set cwnd [$tcpSource set cwnd_]
     set wnd [$tcpSource set window_]
     puts $file "$now $cwnd"
     $ns at [expr $now+$time] "plotWindow $tcpSource $file"
  }


# Start plotWindow() for all tcp sources
  for {set j 1} {$j<=$NumbSrc} { incr j } {
     $ns at 0.1 "plotWindow $tcp_src($j) $windowVsTime($j)"
  }


# Monitor avg queue length of link ($n2,$n3)
  set qfile [$ns monitor-queue $n2 $n3  [open queue.tr w] 0.05]
  [$ns link $n2 $n3] queue-sample-timeout;

  $ns at [expr $SimDuration] "finish"

# run
  $ns run
#
#######################################################################################

 #


#


#



#


#


#



##############################################RED.tcl###########################################
  set ns [new Simulator]


# Open NAM trace file

set NumbSrc 1000
  set SimDuration 50

  set nf [open red.nam w]
  $ns namtrace-all $nf


  set tf [open red.tr w]
  $ns trace-all $tf



for {set j 1} {$j<=$NumbSrc} { incr j } {
     #$ns at 0.1 "plotWindow $tcp_src($j) $windowVsTime $j"
       set windowVsTime($j) [open wind($j) w]
  }

  #set windowVsTime [open wind w]


# Open parameter recording file
  set param [open parametersred w]


# Define a 'finish' procedure
  proc finish {} {
     global ns nf tf

     $ns flush-trace
     close $nf
     close $tf
     #exec nam droptail.nam &
     exit 0
  }

# Create bottleneck and dest nodes
  set n2 [$ns node]
  set n3 [$ns node]

Queue/RED set bytes_ false
# default changed on 10/11/2004.
Queue/RED set queue_in_bytes_ false
# default changed on 10/11/2004.
Queue/RED set q_weight_ 0.002
Queue/RED set thresh_ 40
Queue/RED set maxthresh_ 80





# Create links between bottleneck nodes
  $ns duplex-link $n2 $n3 0.5Mb 1ms RED
  $ns queue-limit $n2 $n3 100



# Create $NumbSrc source nodes
  for {set j 1} {$j<=$NumbSrc} { incr j } {
     set S($j) [$ns node]
  }


# Create a random generator for starting the ftp and
# for bottleneck link delays
  set rng [new RNG]
  $rng seed 2


# parameters for random variables for begenning of ftp connections
  set RVstart [new RandomVariable/Uniform]
  $RVstart set min_ 0
  $RVstart set max_ 7
  $RVstart use-rng $rng


# Define random starting times for each connection
  for {set i 1} {$i<=$NumbSrc} { incr i } {
     set startT($i)  [expr [$RVstart value]]
     set dly($i) 1
     puts "startT($i)  $startT($i) sec"
     puts $param "startT($i)  $startT($i) sec"
  }

# ####################################################################
# Create links between source and bottleneck
  for {set j 1} {$j<=$NumbSrc} { incr j } {
     $ns duplex-link $S($j) $n2 100Mb $dly($j)ms DropTail
     #$ns queue-limit $S($j) $n2 20
  }


# ####################################################################
# Orient the links
  $ns duplex-link-op $n2 $n3 orient right
  $ns duplex-link-op $S(1) $n2 orient right-down
  $ns duplex-link-op $S(2) $n2 orient right
  $ns duplex-link-op $S(3) $n2 orient right-up

# ####################################################################
# Set Queue Size of (bottleneck) link (n2-n3) to 100
 # $ns queue-limit $n2 $n3 100

# ####################################################################
# Create TCP Sources
  for {set j 1} {$j<=$NumbSrc} { incr j } {
     set tcp_src($j) [new Agent/TCP]
     $tcp_src($j) set window_ 8000
  }

# ####################################################################
# Color the packets
  $tcp_src(1) set fid_ 1
  $ns color 1 red
  $tcp_src(2) set fid_ 2
  $ns color 2 yellow
  $tcp_src(3) set fid_ 3
  $ns color 3 blue

# ####################################################################
# Create TCP Destinations
  for {set j 1} {$j<=$NumbSrc} { incr j } {
     set tcp_snk($j) [new Agent/TCPSink]
  }

# ####################################################################
# Define connections between TCP src's and sinks
  for {set j 1} {$j<=$NumbSrc} { incr j } {
     $ns attach-agent $S($j) $tcp_src($j)
     $ns attach-agent $n3 $tcp_snk($j)
     $ns connect $tcp_src($j) $tcp_snk($j)
  }

# ####################################################################
# Further parametrisation of TCP sources
  for {set j 1} {$j<=$NumbSrc} { incr j } {
     $tcp_src($j) set packetSize_ 552
  }


# Create FTP sources
  for {set j 1} {$j<=$NumbSrc} { incr j } {
     set ftp($j) [$tcp_src($j) attach-source FTP]
  }

# Schedule events for the FTP agents:
  for {set i 1} {$i<=$NumbSrc} { incr i } {
     $ns at $startT($i) "$ftp($i) start"
     $ns at $SimDuration "$ftp($i) stop"
  }


# plotWindow(tcpSource file k): Write CWND of k tcpSources in file
  proc plotWindow {tcpSource file} {
     global ns

     set time 0.1
     set now [$ns now]
     set cwnd [$tcpSource set cwnd_]
     set wnd [$tcpSource set window_]
     puts $file "$now $cwnd"
     $ns at [expr $now+$time] "plotWindow $tcpSource $file"
  }


# Start plotWindow() for all tcp sources
  for {set j 1} {$j<=$NumbSrc} { incr j } {
     $ns at 0.1 "plotWindow $tcp_src($j) $windowVsTime($j)"
  }


# Monitor avg queue length of link ($n2,$n3)
  set qfile [$ns monitor-queue $n2 $n3  [open queue.tr w] 0.05]
  [$ns link $n2 $n3] queue-sample-timeout;



# Schedule simulation end
  $ns at [expr $SimDuration] "finish"


# run
  $ns run
# ####################################################################

On Thu, Feb 5, 2015 at 12:28 PM, anjali chawla <anjaliachawla013 at gmail.com>
wrote:

> Hi all
> i am sharing my ".tcl" files which shows how RED solves global
> synchronization problem of DropTail (i.e. mutiple connections reducing
> their window at the same time).
> please test with same and tell me whether results are ok or not ???
> or any other improvement which needs to be  done further.
> Thanks
>
> On Tue, Jan 6, 2015 at 12:51 PM, anjali chawla <anjaliachawla013 at gmail.com
> > wrote:
>
>> Thank you all for your valuable suggestions.
>> @Gyuyeong , link told by you contains some useful points.
>> @Tom Henderson, i found http://www.icir.org/floyd/red.html#ns very
>> useful.
>> For sure i will try with these scripts.May b i can get some useful
>> results .
>> Thanks a lot.
>>
>>
>>
>> On Mon, Jan 5, 2015 at 3:21 AM, Detlef Bosau <detlef.bosau at web.de> wrote:
>>
>>> I'm not quite sure why you see RED and DropTail alternatively and want
>>> to use ONLY RED.
>>>
>>> Detlef
>>>
>>> Am 03.01.2015 um 07:31 schrieb anjali chawla:
>>> > Hi
>>> > i want to prove that RED is better than DropTail using NS2. i have
>>> followed
>>> > "Random Early Detection Gateways for Congestion Avoidance,1993 " paper
>>> > also. For showing RED solves global synchronization problem,bias againt
>>> > bursty traffic,
>>> > i tried a lot using tcl script making different scenarios. But no
>>> useful
>>> > results at all.
>>> > In my case packet loss is more in RED than  DropTail.
>>> >  somenone please help
>>> > _______________________________________________
>>> > end2end-interest mailing list
>>> > end2end-interest at postel.org
>>> > http://mailman.postel.org/mailman/listinfo/end2end-interest
>>> > Contact list-owner at postel.org for assistance.
>>>
>>>
>>> --
>>> ------------------------------------------------------------------
>>> Detlef Bosau
>>> Galileistraße 30
>>> 70565 Stuttgart                            Tel.:   +49 711 5208031
>>>                                            mobile: +49 172 6819937
>>>                                            skype:     detlef.bosau
>>>                                            ICQ:          566129673
>>> detlef.bosau at web.de                     http://www.detlef-bosau.de
>>>
>>>
>>
>


More information about the end2end-interest mailing list