📄 test.tcl
字号:
#helper routines for collecting statsproc finish {} { global ns tf # close $tf exit 0}proc printtcp {fp tcp} { global ns set now [format "%.1f" [$ns now]] set now [$ns now] puts $fp "[format %.2f [$ns now]] [$tcp set cwnd_] [$tcp set dl_Bi_] [$tcp set srtt_] [$tcp set dl_minrtt_] [$tcp set dl_maxrtt_]"}proc print-tcpstats {flow starttime finishtime label} { global ns set fp [open "tcp-$label.out" w] for {set i 0} {[expr $starttime + ($i*0.1)] < $finishtime} {incr i} { set printtime [expr $i*0.1] $ns at [expr $starttime + $printtime] "printtcp $fp $flow" } $ns at $finishtime "printtcp $fp $flow"}# duration of simulationset endtime 200remove-all-packet-headers ; # removes all except commonadd-packet-header Flags IP TCP ; # hdrs reqd for TCPset ns [new Simulator]ns-random 0Agent/TCP set ecn_ 0Agent/TCP set window_ 100000 ; # receiver's max window sizeAgent/TCP set packetSize_ 1460 ; # in bytes (does this include header ?)#setting max_ssthresh_=1 switches off slow start so that we can see convergence of #congestion avoidance more clearly - in practice this is akin to generating#a cross traffic disturbance on an established flow.Agent/TCP set max_ssthresh_ 1; # slow start threshold upper limit# -10 activates htcp with adaptive backoff; +10 is htcp without adaptive backoffAgent/TCP set windowOption_ -10# simple dumbell topology with three input/output linksset n1 [$ns node]set n2 [$ns node]set n3 [$ns node]set n4 [$ns node]set n5 [$ns node]set n6 [$ns node]set bandwidth 20set qmax 50$ns duplex-link $n1 $n3 [expr 2*$bandwidth]Mb [expr 0]ms DropTail$ns queue-limit $n1 $n3 [expr $qmax]$ns queue-limit $n3 $n1 [expr $qmax]$ns duplex-link $n2 $n3 [expr 2*$bandwidth]Mb [expr 0]ms DropTail$ns queue-limit $n2 $n3 [expr $qmax]$ns queue-limit $n3 $n2 [expr $qmax]$ns duplex-link $n3 $n4 [expr $bandwidth]Mb [expr 50]ms DropTail$ns queue-limit $n3 $n4 [expr $qmax]$ns queue-limit $n4 $n3 [expr $qmax]$ns duplex-link $n4 $n5 [expr 2*$bandwidth]Mb [expr 1]ms DropTail$ns queue-limit $n4 $n5 [expr $qmax]$ns queue-limit $n5 $n4 [expr $qmax]$ns duplex-link $n4 $n6 [expr 2*$bandwidth]Mb [expr 1]ms DropTail$ns queue-limit $n6 $n4 [expr $qmax]$ns queue-limit $n4 $n6 [expr $qmax]#now define three flows set regtcp0 [$ns create-connection TCP/Sack1 $n1 TCPSink/Sack1 $n5 [expr 0]] set regftp0 [[set regtcp0] attach-app FTP] set starttime 0.0 $ns at $starttime "[set regftp0] start" $ns at $endtime "[set regftp0] stop" print-tcpstats [set regtcp0] $starttime $endtime regtcp0 ; #dump cwnd to file puts "regtcp0, starttime: $starttime" set regtcp1 [$ns create-connection TCP/Sack1 $n2 TCPSink/Sack1 $n6 [expr 1]] set regftp1 [[set regtcp1] attach-app FTP] set starttime 50 $ns at $starttime "[set regftp1] start" $ns at $endtime "[set regftp1] stop" print-tcpstats [set regtcp1] 0 $endtime regtcp1 ; #dump cwnd to file puts "regtcp1, starttime: $starttime" set regtcp2 [$ns create-connection TCP/Sack1 $n1 TCPSink/Sack1 $n5 [expr 2]] set regftp2 [[set regtcp2] attach-app FTP] set starttime 100 $ns at $starttime "[set regftp2] start" $ns at $endtime "[set regftp2] stop" print-tcpstats [set regtcp2] 0 $endtime regtcp2 ; #dump cwnd to file puts "regtcp2, starttime: $starttime"#keep track of progress ...for {set i 0} {[expr 0 + ($i*1)] < $endtime} {incr i} { set printtime [expr $i*1] $ns at [expr 0 + $printtime] "puts $printtime" }$ns at [expr $endtime + 2.0] "finish"puts "Starting Simulation..."$ns run
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -