Sliding Window Protocol
Sliding Window Protocol
Simulator] $ns color 1 red $ns trace-all [open B3-sliding-window.tr w] $ns namtrace-all [open B3-sliding-window.nam w] ### build topology with 6 nodes proc build_topology { ns } { global node_ set node_(s1) [$ns node] set node_(s2) [$ns node] set node_(r1) [$ns node] set node_(r2) [$ns node] set node_(s3) [$ns node] set node_(s4) [$ns node] $node_(s2) color "red" $node_(s4) color "red" $node_(r1) color "blue" $node_(r2) color "blue" $node_(r1) shape "rectangular" $node_(r2) shape "rectangular" $ns at 0.0 "$node_(s1) label Sliding-W-sender" $ns at 0.0 "$node_(s2) label CBR-sender" $ns at 0.0 "$node_(s3) label Sliding-W-receiver" $ns at 0.0 "$node_(s4) label CBR-receiver" $ns duplex-link $node_(s1) $node_(r1) 0.5Mb 50ms DropTail $ns duplex-link $node_(s2) $node_(r1) 0.5Mb 50ms DropTail $ns duplex-link $node_(r1) $node_(r2) 0.5Mb 50ms DropTail $ns duplex-link $node_(r2) $node_(s3) 0.5Mb 50ms DropTail $ns duplex-link $node_(r2) $node_(s4) 0.5Mb 50ms DropTail
$ns queue-limit $node_(r1) $node_(r2) 100 $ns queue-limit $node_(r2) $node_(r1) 100 $ns duplex-link-op $node_(s1) $node_(r1) orient right-down $ns duplex-link-op $node_(s2) $node_(r1) orient right-up $ns duplex-link-op $node_(r1) $node_(r2) orient right $ns duplex-link-op $node_(r2) $node_(s3) orient right-up $ns duplex-link-op $node_(r2) $node_(s4) orient right-down $ns duplex-link-op $node_(r1) $node_(r2) queuePos 0.5 $ns duplex-link-op $node_(r2) $node_(r1) queuePos 0.5 } build_topology $ns Agent/TCP set nam_tracevar_ true ### sliding-window protocol between s1 and s3 (Black) set tcp [$ns create-connection TCP $node_(s1) TCPSink $node_(s3) 0] $tcp set windowInit_ 4 $tcp set maxcwnd_ 4 $tcp set class_ 0 set ftp [$tcp attach-app FTP] $ns add-agent-trace $tcp tcp $ns monitor-agent-trace $tcp $tcp tracevar cwnd_ ### CBR traffic between s2 and s4 (Red) set cbr [$ns create-connection CBR $node_(s2) Null $node_(s4) 1] $cbr set packetSize_ 500 $cbr set interval_ 0.05 $cbr set class_ 1 proc finish {} { global ns $ns flush-trace
puts "filtering..." exec tclsh ../ns-allinone-2.1b5/nam-1.0a7/bin/namfilter.tcl B3-sliding-window.nam puts "running nam..." exec nam B3-sliding-window.nam & exit 0 } ### set operations $ns at 0.1 "$ftp start" $ns at 1.7 "$ftp stop" $ns at 0.1 "$cbr start" $ns at 1.7 "$cbr stop" $ns at 2.0 "finish" ### add annotations $ns at 0.0 "$ns trace-annotate \"Normal operation of <Sliding Window> with window size, 4\"" $ns at 0.1 "$ns trace-annotate \"FTP starts at 0.1\"" $ns at 0.1 "$ns trace-annotate \"CBR starts at 0.1\"" $ns at 0.11 "$ns trace-annotate \"Send Packet_0,1,2,3 : window size, 4\"" $ns at 0.32 "$ns trace-annotate \"Ack_0,1,2,3\"" $ns at 0.46 "$ns trace-annotate \"Send Packet_4,5,6,7 : window size, 4\"" $ns at 0.66 "$ns trace-annotate \"Ack_4,5,6,7\"" $ns at 0.81 "$ns trace-annotate \"Send Packet_8,9,10,11 : window size, 4\"" $ns at 1.00 "$ns trace-annotate \"Ack_8,9,10,11\"" $ns at 1.16 "$ns trace-annotate \"Send Packet_12,13,14,15 : window size, 4\"" $ns at 1.35 "$ns trace-annotate \"Ack_12,13,14,15\"" $ns at 1.50 "$ns trace-annotate \"Send Packet_16,17,18,19 : window size, 4\"" $ns at 1.71 "$ns trace-annotate \"Ack_16,17,18,19\"" $ns at 1.8 "$ns trace-annotate \"FTP stops at 1.7\"" $ns at 1.8 "$ns trace-annotate \"CBR stops at 1.7\"" $ns run