[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[ns] TCP Congestion Window diverged. TCP or Queue's BUG?



Hello, everyone.
My name is Toshikazu Ichikawa in Japan.

I'm trying the simulation with TCP.
And then, I traced the value of TCP Congestion Window,
shown as "Agent/TCP cwnd_" in Script.
Generally, TCP Congestion Window will oscillate on Bottle Neck,
to keep the rate constant.
However It diverged when Queue was more than 20 packets length.
Is this TCP specification or Implementation bug?

I show the sample script to re-create this phenomenon.
It will be performed well when queue length is less than 19.
I examined this script with the version ns-allinone-2.1b8a
on Solaris 2.7. Run, and exec "% xgraph cwnd.tr" to plot.

Let me know your opinion.
Thank you.


Script Below:

set ns [new Simulator]
set fp [open cwnd.tr w]

# expected behaviour
#set queue_length 19
# unexpected behaviour
set queue_length 20

set s1 [$ns node]
set r1 [$ns node]
set s2 [$ns node]
set r2 [$ns node]
set n1 [$ns node]
set n2 [$ns node]

$ns duplex-link $s1 $n1 10Mb 5ms DropTail
$ns duplex-link $s2 $n1 10Mb 5ms DropTail
$ns duplex-link $n1 $n2 128kb 5ms DropTail
$ns duplex-link $n2 $r1 10Mb 5ms DropTail
$ns duplex-link $n2 $r2 10Mb 5ms DropTail
$ns queue-limit $n1 $n2 $queue_length

#set tcpsrc [new Agent/TCP]
set tcpsrc [new Agent/TCP/Reno]
#set tcpsrc [new Agent/TCP/NewReno]
#set tcpsrc [new Agent/TCP/Vegas]
$s1 attach $tcpsrc
set tcpsink [new Agent/TCPSink]
$r1 attach $tcpsink
$ns connect $tcpsrc $tcpsink

set ftp [new Application/FTP]
$ftp attach-agent $tcpsrc

proc finish {} {
        global ns fp
        $ns flush-trace
        close $fp
        exit 0
}

proc record {} {
        global fp ns tcpsrc
        set now [$ns now]
        puts $fp "$now [$tcpsrc set cwnd_]"
        $ns at [expr $now + 0.5] "record"
}

$ns at 0.0 "record"
$ns at 1.0 "$ftp start"
$ns at 101.0 "$ftp stop"
$ns at 110.0 "finish"
$ns run

-- 
Toshikazu Ichikawa <[email protected]>