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

通讯编程

开发平台:

Visual C++

  1. # slow start protocol in normal situation
  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 B5-slow-start.tr w]
  6. $ns namtrace-all [open B5-slow-start.nam w]
  7. ### build topology with 6 nodes
  8. proc build_topology { ns } {
  9. global node_
  10.         set node_(ss1) [$ns node]
  11.         set node_(ss2) [$ns node]
  12.         set node_(rr1) [$ns node]
  13.         set node_(rr2) [$ns node]
  14.         set node_(ss3) [$ns node]
  15.         set node_(ss4) [$ns node]
  16.         $node_(ss2) color "red"
  17.         $node_(ss4) color "red"
  18.         $node_(rr1) color "blue"
  19.         $node_(rr2) color "blue"
  20.         $node_(rr1) shape "rectangular"
  21.         $node_(rr2) shape "rectangular"
  22.         $ns at 0.0 "$node_(ss1) label TCP2-Sender"
  23.         $ns at 0.0 "$node_(ss2) label CBR2-Sender"
  24.         $ns at 0.0 "$node_(ss3) label TCP2-Receiver"
  25.         $ns at 0.0 "$node_(ss4) label CBR2-Receiver"
  26.         $ns duplex-link $node_(ss1) $node_(rr1) 0.5Mb 20ms DropTail
  27.         $ns duplex-link $node_(ss2) $node_(rr1) 0.5Mb 20ms DropTail
  28.         $ns duplex-link $node_(rr1) $node_(rr2) 0.5Mb 20ms DropTail
  29.         $ns duplex-link $node_(rr2) $node_(ss3) 0.5Mb 20ms DropTail 
  30.         $ns duplex-link $node_(rr2) $node_(ss4) 0.5Mb 20ms DropTail 
  31.         $ns queue-limit $node_(rr1) $node_(rr2) 100
  32.         $ns queue-limit $node_(rr2) $node_(rr1) 100
  33.         $ns duplex-link-op $node_(ss1) $node_(rr1) orient right-down
  34.         $ns duplex-link-op $node_(ss2) $node_(rr1) orient right-up  
  35.         $ns duplex-link-op $node_(rr1) $node_(rr2) orient right     
  36.         $ns duplex-link-op $node_(rr2) $node_(ss3) orient right-up  
  37.         $ns duplex-link-op $node_(rr2) $node_(ss4) orient right-down
  38.         $ns duplex-link-op $node_(rr1) $node_(rr2) queuePos 0.5
  39.         $ns duplex-link-op $node_(rr2) $node_(rr1) queuePos 0.5
  40. }
  41. build_topology $ns
  42. Agent/TCP set nam_tracevar_ true        
  43. ### TCP between ss1 and ss3 (Black)
  44. set tcp2 [$ns create-connection TCP $node_(ss1) TCPSink $node_(ss3) 2]
  45. $tcp2 set maxcwnd_ 8
  46. $tcp2 set fid_ 2
  47. set ftp2 [$tcp2 attach-app FTP]
  48.         
  49. $ns add-agent-trace $tcp2 tcp
  50. $ns monitor-agent-trace $tcp2
  51. $tcp2 tracevar cwnd_
  52. ### CBR traffic between ss2 and ss4 (Red)
  53. set cbr2 [$ns create-connection CBR $node_(ss2) Null $node_(ss4) 3]
  54. $cbr2 set packetSize_ 500
  55. $cbr2 set interval_ 0.05
  56. $cbr2 set fid_ 3 
  57. proc finish {} {
  58.         global ns
  59.         $ns flush-trace
  60.         puts "filtering..."
  61.         exec tclsh ../bin/namfilter.tcl B5-slow-start.nam
  62.         puts "running nam..."
  63.         exec nam B5-slow-start.nam &
  64.         exit 0
  65. }
  66. ### set operations
  67. $ns at 0.1 "$ftp2 start"
  68. $ns at 1.1 "$ftp2 stop"
  69. $ns at 0.1 "$cbr2 start"
  70. $ns at 1.1 "$cbr2 stop"
  71. $ns at 2.0 "finish"
  72. ### add annotations
  73. $ns at 0.0 "$ns trace-annotate "Normal operation of <Slow Start> with max window size, 8"" 
  74. $ns at 0.1 "$ns trace-annotate "FTP starts at 0.1""
  75. $ns at 0.1 "$ns trace-annotate "CBR starts at 0.1""
  76. $ns at 0.11 "$ns trace-annotate "Initial window size is 1""
  77. $ns at 0.22 "$ns trace-annotate "1 ack is coming""
  78. $ns at 0.26 "$ns trace-annotate "Increase window size to 2""
  79. $ns at 0.38 "$ns trace-annotate "2 acks are coming""
  80. $ns at 0.42 "$ns trace-annotate "Increase window size to 4""
  81. $ns at 0.55 "$ns trace-annotate "4 acks are coming""
  82. $ns at 0.59 "$ns trace-annotate "Increase window size to 8""
  83. $ns at 0.75 "$ns trace-annotate "8 acks are coming""
  84. $ns at 0.77 "$ns trace-annotate "Keep maximum cwnd size, 8""
  85. $ns at 1.1 "$ns trace-annotate "FTP stops at 1.1""
  86. $ns at 1.1 "$ns trace-annotate "CBR stops at 1.1""
  87.         
  88. $ns run