B2-stop-n-wait-loss.tcl
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:3k
源码类别:

通讯编程

开发平台:

Visual C++

  1. # stop and wait protocol in congestion 
  2. # features : labeling, annotation, nam-graph, and window size monitoring
  3. set ns [new Simulator]
  4. $ns color 1 red
  5. $ns trace-all [open B2-stop-n-wait-loss.tr w]
  6. $ns namtrace-all [open B2-stop-n-wait-loss.nam w]
  7. ### build topology with 6 nodes
  8. proc build_topology { ns } {
  9.         global node_
  10.         set node_(s1) [$ns node]
  11.         set node_(s2) [$ns node]
  12.         set node_(r1) [$ns node]
  13.         set node_(r2) [$ns node]
  14.         set node_(s3) [$ns node]
  15.         set node_(s4) [$ns node]
  16.         $node_(s2) color "red"
  17.         $node_(s4) color "red"
  18.         $node_(r1) color "blue"
  19.         $node_(r2) color "blue"
  20.         $node_(r1) shape "rectangular"
  21.         $node_(r2) shape "rectangular"
  22.         $ns at 0.0 "$node_(s1) label Stop&Wait"
  23.         $ns at 0.0 "$node_(s2) label CBR"
  24.         $ns at 0.0 "$node_(s3) label Stop&Wait"
  25.         $ns at 0.0 "$node_(s4) label CBR"
  26.         $ns duplex-link $node_(s1) $node_(r1) 0.5Mb 50ms DropTail
  27.         $ns duplex-link $node_(s2) $node_(r1) 0.5Mb 50ms DropTail
  28.         $ns duplex-link $node_(r1) $node_(r2) 0.5Mb 50ms DropTail
  29.         $ns duplex-link $node_(r2) $node_(s3) 0.5Mb 50ms DropTail
  30.         $ns duplex-link $node_(r2) $node_(s4) 0.5Mb 50ms DropTail
  31.         $ns queue-limit $node_(r1) $node_(r2) 2
  32.         $ns queue-limit $node_(r2) $node_(r1) 2
  33.         $ns duplex-link-op $node_(s1) $node_(r1) orient right-down
  34.         $ns duplex-link-op $node_(s2) $node_(r1) orient right-up
  35.         $ns duplex-link-op $node_(r1) $node_(r2) orient right
  36.         $ns duplex-link-op $node_(r2) $node_(s3) orient right-up
  37.         $ns duplex-link-op $node_(r2) $node_(s4) orient right-down
  38.         $ns duplex-link-op $node_(r1) $node_(r2) queuePos 0.5
  39.         $ns duplex-link-op $node_(r2) $node_(r1) queuePos 0.5
  40. }
  41. build_topology $ns
  42. Agent/TCP set nam_tracevar_ true
  43. ### stop-n-wait protocol between s1 and s3 (Black)
  44. set tcp [new Agent/TCP]
  45. $tcp set window_ 1
  46. $tcp set maxcwnd_ 1
  47. $ns attach-agent $node_(s1) $tcp
  48. set sink [new Agent/TCPSink]
  49. $ns attach-agent $node_(s3) $sink
  50. $ns connect $tcp $sink
  51. set ftp [new Application/FTP]
  52. $ftp attach-agent $tcp
  53. $ns add-agent-trace $tcp tcp
  54. $ns monitor-agent-trace $tcp
  55. $tcp tracevar cwnd_
  56. ### CBR traffic between s2 and s4 (Red)
  57. set cbr [$ns create-connection CBR $node_(s2) Null $node_(s4) 1]
  58. $cbr set fid_ 1
  59. ### set operations
  60. $ns at 0.1 "$ftp start"
  61. $ns at 2.35 "$ftp stop"
  62. $ns at 0.1 "$cbr start"
  63. $ns at 2.35 "$cbr stop"
  64. # $ns at 0.48 "$ns queue-limit $node_(r1) $node_(r2) 1"
  65. $ns at 0.52 "$ns queue-limit $node_(r1) $node_(r2) 2"
  66. $ns at 3.0 "finish"
  67. ### add annotation
  68. $ns at 0.0 "$ns trace-annotate "Stop and Wait with packet loss""
  69. $ns at 0.05 "$ns trace-annotate "FTP starts at 0.1""
  70. $ns at 0.11 "$ns trace-annotate "Send Packet_0""
  71. $ns at 0.30 "$ns trace-annotate "Receive Ack_0""
  72. $ns at 0.45 "$ns trace-annotate "Send Packet_1""
  73. $ns at 0.50 "$ns trace-annotate "Packet_1 is lost""
  74. $ns at 0.55 "$ns trace-annotate "Waiting for Ack_1""
  75. $ns at 1.34 "$ns trace-annotate "Timout -> Retransmit Packet_1""
  76. $ns at 1.55 "$ns trace-annotate "Receive Ack_1""
  77. $ns at 1.70 "$ns trace-annotate "Send Packet_2""
  78. $ns at 1.90 "$ns trace-annotate "Receive Ack_2  ""
  79. $ns at 2.0 "$ns trace-annotate "FTP stops""
  80. proc finish {} {
  81. global ns 
  82. $ns flush-trace
  83. puts "filtering..."
  84. exec tclsh ../bin/namfilter.tcl B2-stop-n-wait-loss.nam
  85.         puts "running nam..."
  86.         exec nam B2-stop-n-wait-loss.nam &
  87. exit 0
  88. }
  89. $ns run