[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [ns] TCP Congestion Window diverged. TCP or Queue's BUG?
Did you check the rate? I think the rate is still constant.
The reason you see cwnd_ keep growing is that the rate of TCP
is bound by window, window_, instead of congestion window, cwnd_.
The default value of window_ is 20.
On Wed, Jul 25, 2001 at 11:43:24PM +0900, Toshikazu Ichikawa wrote:
> 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]>
>