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

通讯编程

开发平台:

Visual C++

  1. #
  2. # Example code for running a congestion control module with TCP-Linux
  3. #
  4. # TCP-Linux module for NS2 
  5. #
  6. # Nov 2007
  7. #
  8. # Author: Xiaoliang (David) Wei  (DavidWei@acm.org)
  9. #
  10. # NetLab, the California Institute of Technology 
  11. # http://netlab.caltech.edu
  12. #
  13. # See a mini-tutorial about TCP-Linux at: http://netlab.caltech.edu/projects/ns2tcplinux/
  14. #
  15. #
  16. # Module: tcl/ex/tcp-linux/simple.tcl
  17. #    This is an example on how to run a congestion control algorithm with TCP-Linux. 
  18. # This code uses Highspeed TCP as an example and demonstrates a minimum setup for running TCP-Linux.
  19. #
  20. # The code simulates the scenario in which a single Highspeed TCP flow running through a bottleneck.
  21. #    The code outputs:
  22. # queue_simple.trace: the queue length over time in the format of <time> <queue len>
  23. # p_simple: the connection variables over time in format specified in sampling.tcl
  24. #
  25. #
  26. # After the simulation, run
  27. #    gnuplot gnuplot_simple.script 
  28. # to generate figures on cwnd trajectory and queue trajectory.
  29. #
  30. #Create a simulator object
  31. set ns [new Simulator]
  32. #Create two nodes and a link
  33. set bs [$ns node]
  34. set br [$ns node]
  35. $ns duplex-link $bs $br 100Mb 10ms DropTail
  36. #setup sender side
  37. set tcp [new Agent/TCP/Linux]
  38. $tcp set timestamps_ true
  39. $tcp set window_ 100000
  40. #$tcp set windowOption_ 8
  41. $ns attach-agent $bs $tcp
  42. #set up receiver side
  43. set sink [new Agent/TCPSink/Sack1]
  44. $sink set ts_echo_rfc1323_ true
  45. $ns attach-agent $br $sink
  46. #logical connection
  47. $ns connect $tcp $sink
  48. #Setup a FTP over TCP connection
  49. set ftp [new Application/FTP]
  50. $ftp attach-agent $tcp
  51. $ftp set type_ FTP
  52. $ns at 0 "$tcp select_ca highspeed"
  53. #Start FTP 
  54. $ns at 0 "$ftp start"
  55. $ns at 10 "$ftp stop"
  56. $ns at 11 "exit 0"
  57. set MonitorInterval 0.1
  58. set qmonfile [open "queue.trace" "w"]
  59. close $qmonfile
  60. set qmon [$ns monitor-queue $bs $br "" $MonitorInterval]
  61. source "sampling.tcl"
  62. proc monitor {interval} {
  63.     global ns tcp qmon
  64.     set nowtime [$ns now]
  65.     monitor_tcp $ns $tcp p_simple.trace
  66.     monitor_queue $ns $qmon queue_simple.trace
  67.     $ns after $interval "monitor $interval"
  68. }
  69. $ns at 0 "monitor $MonitorInterval"
  70. $ns run