B6-slow-start-loss.tcl
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:5k
源码类别:

通讯编程

开发平台:

Visual C++

  1. # slow start protocol in congestion
  2. # features : labeling, annotation, nam-graph, and window size monitoring
  3.         
  4. set ns [new Simulator]
  5. $ns color 1 Red
  6. $ns trace-all [open B6-slow-start-loss.tr w]
  7. $ns namtrace-all [open B6-slow-start-loss.nam w]
  8. ### build topology with 6 nodes
  9. proc build_topology1 { ns } {
  10. global node_
  11.         set node_(ss1) [$ns node]
  12.         set node_(ss2) [$ns node]
  13.         set node_(rr1) [$ns node]
  14.         set node_(rr2) [$ns node]
  15.         set node_(ss3) [$ns node]
  16.         set node_(ss4) [$ns node]
  17.         $node_(ss2) color "red"
  18.         $node_(ss4) color "red"
  19.         $node_(rr1) color "blue"
  20.         $node_(rr2) color "blue"
  21.         $node_(rr1) shape "rectangular"
  22.         $node_(rr2) shape "rectangular"
  23.         $ns at 0.0 "$node_(ss1) label TCP-Sender"
  24.         $ns at 0.0 "$node_(ss2) label CBR-Sender"
  25.         $ns at 0.0 "$node_(ss3) label TCP-Receiver"
  26.         $ns at 0.0 "$node_(ss4) label CBR-Receiver"
  27.         $ns duplex-link $node_(ss1) $node_(rr1) 0.5Mb 50ms DropTail
  28.         $ns duplex-link $node_(ss2) $node_(rr1) 0.5Mb 50ms DropTail
  29.         $ns duplex-link $node_(rr1) $node_(rr2) 0.5Mb 50ms DropTail
  30.         $ns duplex-link $node_(rr2) $node_(ss3) 0.5Mb 50ms DropTail 
  31.         $ns duplex-link $node_(rr2) $node_(ss4) 0.5Mb 50ms DropTail 
  32.         $ns queue-limit $node_(rr1) $node_(rr2) 10
  33.         $ns queue-limit $node_(rr2) $node_(rr1) 10
  34.         $ns duplex-link-op $node_(ss1) $node_(rr1) orient right-down
  35.         $ns duplex-link-op $node_(ss2) $node_(rr1) orient right-up  
  36.         $ns duplex-link-op $node_(rr1) $node_(rr2) orient right     
  37.         $ns duplex-link-op $node_(rr2) $node_(ss3) orient right-up  
  38.         $ns duplex-link-op $node_(rr2) $node_(ss4) orient right-down
  39.         $ns duplex-link-op $node_(rr1) $node_(rr2) queuePos 0.5
  40.         $ns duplex-link-op $node_(rr2) $node_(rr1) queuePos 0.5
  41. }
  42. build_topology1 $ns
  43. Agent/TCP set nam_tracevar_ true
  44. ### TCP between ss1 and ss3 (Black)
  45. set tcp2 [$ns create-connection TCP/Sack1 $node_(ss1) TCPSink/Sack1 $node_(ss3) 2]
  46. $tcp2 set fid_ 0
  47. set ftp2 [$tcp2 attach-app FTP]
  48. $ns add-agent-trace $tcp2 tcp
  49. $ns monitor-agent-trace $tcp2
  50. $tcp2 tracevar cwnd_
  51.         
  52. ### CBR traffic between ss2 and ss4 (Red)
  53. set cbr2 [$ns create-connection CBR $node_(ss2) Null $node_(ss4) 3]
  54. $cbr2 set fid_ 1 
  55. proc finish {} {
  56.         global ns
  57.         $ns flush-trace
  58.         puts "filtering..."
  59.         exec tclsh ../bin/namfilter.tcl B6-slow-start-loss.nam
  60.         puts "running nam..."
  61.         exec nam B6-slow-start-loss.nam &
  62.         exit 0
  63. }
  64. ### set operations
  65. $ns at 0.1 "$ftp2 start"
  66. $ns at 2.35 "$ftp2 stop"
  67. $ns at 0.1 "$cbr2 start"
  68. $ns at 2.35 "$cbr2 stop"
  69. $ns at 3.0 "finish"
  70. ### add annotations
  71. $ns at 0.0 "$ns trace-annotate "Slow Start with Selective Repeat""
  72. $ns at 0.1 "$ns trace-annotate "FTP starts at 0.1""
  73. $ns at 0.1 "$ns trace-annotate "CBR starts at 0.1""
  74. $ns at 0.11 "$ns trace-annotate "Send Packet_0  : Initial window size is 1""
  75. $ns at 0.21 "$ns trace-annotate "Ack_0 : 1 ack is coming""
  76. $ns at 0.27 "$ns trace-annotate "Send Packet_1,2  : Increase window size to 2""
  77. $ns at 0.38 "$ns trace-annotate "Ack_1,2 : 2 acks are coming""
  78. $ns at 0.45 "$ns trace-annotate "Send Packet_3,4,5,6 : Increase window size to 4""
  79. $ns at 0.52 "$ns trace-annotate "Packet_5,6 are lost""
  80. $ns at 0.58 "$ns trace-annotate "Ack_3,4 : 2 acks are coming""
  81. $ns at 0.63 "$ns trace-annotate "Send Packet_7,8,9,10 : Keep window size to 4""
  82. $ns at 0.70 "$ns trace-annotate "Packet_9 is lost""
  83. $ns at 0.76 "$ns trace-annotate "3 Ack_4s : 3 acks are coming""
  84. $ns at 0.87 "$ns trace-annotate "TIMEOUT for Packet_5""
  85. $ns at 0.89 "$ns trace-annotate "Send Packet_5""
  86. $ns at 1.02 "$ns trace-annotate "Ack_5                : 1 ack is coming""
  87. $ns at 1.08 "$ns trace-annotate "Send Packet_6,9""
  88. $ns at 1.20 "$ns trace-annotate "Ack_8,10              : 2 acks are coming""
  89. $ns at 1.26 "$ns trace-annotate "Send Packet_11,12,13 : Decrease window size to 3""
  90. $ns at 1.33 "$ns trace-annotate "Packet_13 is lost""
  91. $ns at 1.39 "$ns trace-annotate "Ack_11,12             : 2 acks are coming""
  92. $ns at 1.46 "$ns trace-annotate "Send Packet_14,15 : 1 packet per ack""
  93. $ns at 1.58 "$ns trace-annotate "2 Ack_12s             : 2 acks are coming""
  94. $ns at 1.63 "$ns trace-annotate "Waiting for Ack_13""
  95. $ns at 1.96 "$ns trace-annotate "TIMEOUT,Send Packet_13 : Initialize window size to 1""
  96. $ns at 2.09 "$ns trace-annotate "Ack_15                 : 1 ack is coming""
  97. $ns at 2.15 "$ns trace-annotate "Send Packet_16,17  : Increase window size to 2""
  98. $ns at 2.27 "$ns trace-annotate "Ack_16,17              : 2 acks are coming""
  99. $ns at 2.33 "$ns trace-annotate "Send Packet_18""
  100. $ns at 2.45 "$ns trace-annotate "Ack_18""
  101. $ns at 2.50 "$ns trace-annotate "FTP stops"" 
  102.         
  103. $ns run