C2-sliding-window.tcl
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:4k
源码类别:

通讯编程

开发平台:

Visual C++

  1. # Sliding window protocol in a heavily loaded network.
  2. # features : labeling, annotation, nam-graph, and window size monitoring
  3. # all packets look black cause of supporting nam-graph
  4. # you could run 'C2-sliding-color.nam' to see the colors of each traffic
  5. #
  6. # n0    n5 
  7. #                / 
  8. # n1 -- n3 ---------- n4 -- n6
  9. #    /  
  10. # n2    n7
  11. set ns [new Simulator]
  12. $ns color 0 black
  13. $ns color 1 red
  14. #$ns trace-all [open C2-sliding-window.tr w]
  15. #$ns namtrace-all [open C2-sliding-window.nam w]
  16. foreach i " 0 1 2 3 4 5 6 7" {
  17. set n$i [$ns node]
  18. }
  19.         $ns at 0.0 "$n0 label TCP"
  20.         $ns at 0.0 "$n5 label TCP"
  21.         $ns at 0.0 "$n1 label CBR-1"
  22.         $ns at 0.0 "$n2 label CBR-2" 
  23.         $ns at 0.0 "$n6 label CBR-1"
  24.         $ns at 0.0 "$n7 label CBR-2"
  25.         $ns duplex-link $n0 $n3 5Mb 20ms DropTail
  26.         $ns duplex-link $n1 $n3 1Mb 20ms DropTail
  27.         $ns duplex-link $n2 $n3 1Mb 20ms DropTail
  28.         $ns duplex-link $n3 $n4 1Mb 50ms DropTail
  29. $ns duplex-link $n4 $n5 5Mb 20ms DropTail
  30.         $ns duplex-link $n4 $n6 1Mb 20ms DropTail
  31.         $ns duplex-link $n4 $n7 1Mb 20ms DropTail
  32.         $ns queue-limit $n3 $n4 10
  33.         $ns duplex-link-op $n0 $n3 orient right-down
  34.         $ns duplex-link-op $n1 $n3 orient right
  35.         $ns duplex-link-op $n2 $n3 orient right-up
  36.         $ns duplex-link-op $n3 $n4 orient right     
  37.         $ns duplex-link-op $n4 $n5 orient right-up
  38.         $ns duplex-link-op $n4 $n6 orient right     
  39.         $ns duplex-link-op $n4 $n7 orient right-down     
  40.         $ns duplex-link-op $n3 $n4 queuePos 0.5
  41. Agent/TCP set nam_tracevar_ true         
  42. Agent/TCP set maxcwnd_ 8
  43. ### TCP between n0 and n5 (Black)
  44. #set sliding [new Agent/TCP/SlidingWindow]
  45. set sliding [new Agent/TCP]
  46. $sliding set fid_ 0
  47. $ns attach-agent $n0 $sliding
  48.         
  49. #set sink [new Agent/TCPSink/SlidingWindowSink]
  50. set sink [new Agent/TCPSink]
  51. $ns attach-agent $n5 $sink
  52. $ns connect $sliding $sink
  53. set ftp [new Application/FTP]
  54. $ftp attach-agent $sliding
  55. $ns add-agent-trace $sliding tcp
  56. $ns monitor-agent-trace $sliding
  57. $sliding tracevar cwnd_
  58. ### CBR traffic between (n1 & n6) and (n2 & n7)
  59. set cbr0 [new Agent/CBR]
  60. $ns attach-agent $n1 $cbr0
  61. $cbr0 set fid_ 1
  62. $cbr0 set packetSize_ 500
  63. $cbr0 set interval_ 0.01
  64. set null0 [new Agent/CBR]
  65. $ns attach-agent $n6 $null0
  66. $ns connect $cbr0 $null0
  67. set cbr1 [new Agent/CBR]
  68. $ns attach-agent $n2 $cbr1
  69. $cbr1 set fid_ 1
  70. $cbr1 set packetSize_ 1000
  71. $cbr1 set interval_ 0.01
  72. set null1 [new Agent/CBR]
  73. $ns attach-agent $n7 $null1
  74. $ns connect $cbr1 $null1 
  75. proc finish {} {
  76.         global ns
  77.         $ns flush-trace
  78. #        puts "filtering..."
  79. #        exec tclsh ../bin/namfilter.tcl C2-sliding-window.nam
  80.         puts "running nam..."
  81.         exec nam C2-sliding-window.nam &
  82.         exit 0
  83. }
  84. ### set operations
  85. $ns at 0.05 "$cbr0 start"
  86. $ns at 2.3 "$cbr0 stop" 
  87. $ns at 0.1 "$cbr1 start"
  88. $ns at 2.5 "$cbr1 stop"
  89. $ns at 0.5 "$ftp start"
  90. $ns at 2.5 "$ftp stop"
  91. $ns at 2.7 "finish"
  92. $ns at 0.50 "$cbr1 set interval_ 0.02"
  93. $ns at 1.50 "$cbr0 set interval_ 0.02"
  94. $ns at 1.70 "$cbr1 set interval_ 0.01"
  95. $ns at 1.70 "$cbr1 set interval_ 0.01"
  96. ### add annotations
  97. $ns at 0.0 "$ns trace-annotate "Sliding Window (window size=8) in a heavely loaded network"" 
  98. $ns at 0.05 "$ns trace-annotate "CBR-1 starts""
  99. $ns at 0.1 "$ns trace-annotate "CBR-2 starts""
  100. $ns at 0.48 "$ns trace-annotate "Sliding-Window Traffic starts""
  101. $ns at 0.51 "$ns trace-annotate "Send Packet_0 to 7 ""
  102. $ns at 0.54 "$ns trace-annotate "Lost Packet (5 of them) ""
  103. $ns at 0.66 "$ns trace-annotate "3 Ack_0s""
  104. $ns at 0.75 "$ns trace-annotate "Send Packet_8""
  105. $ns at 0.85 "$ns trace-annotate "Ack_0""
  106. $ns at 0.95 "$ns trace-annotate "Send Packet_1 to 8""
  107. $ns at 1.04 "$ns trace-annotate "Ack_1 to 8""
  108. $ns at 1.14 "$ns trace-annotate "Send Packet_9 to 16""
  109. $ns at 1.22 "$ns trace-annotate "Lost Packet (2 of them) ""
  110. $ns at 1.27 "$ns trace-annotate "Ack_7 to 14 ""
  111. $ns at 1.35 "$ns trace-annotate "Send Packet_17 to 22""
  112. $ns at 1.49 "$ns trace-annotate "6 Ack_14s  ""
  113. $ns at 1.58 "$ns trace-annotate "Send Packet_15 to 22""
  114. $ns at 1.70 "$ns trace-annotate "Ack_15 to 22 ""
  115. $ns at 1.78 "$ns trace-annotate "Send Packet_23 to 30""
  116. $ns at 1.85 "$ns trace-annotate "Lost Packet (2 of them) ""
  117. $ns at 1.90 "$ns trace-annotate "Ack_23 to 27 ""
  118. $ns at 2.00 "$ns trace-annotate "Send Packet_31 to 35""
  119. $ns at 2.08 "$ns trace-annotate "Lost Packet (all of them) ""
  120. $ns at 2.55 "$ns trace-annotate "FTP stops""
  121. $ns run