Studying TCP's Congestion Window using NS



  • How to obtain TCP's CWND value

    • The most important value that determine the behavior of TCP is the congestion window size or traditionally abreviated as CWND
    • In NS, every TCP-type class (Agent/TCP/Tahoe, (Agent/TCP/Reno, etc) has a variable named
        cwnd_
      

      that contains the congestion window size of the TCP module

    • Recall that we can use the set command to return a value
    • Hence, the following command will retrieve the congestion window size of a TCP module:
        set  tcp1  [new  Agent/TCP/Reno]
      
        set  cwnd1  [ $tcp1  set  cwnd_ ]      // read variable "cwnd_"
      


  • How to obtain TCP's CWND value PERIODICALLY
    • Now that we know how to read the congestion window size of a TCP module once, it is easy to make the NS simulation system repeatedly read the value (say, after every 0.1 sec of simulation time).
    • All we need to do is to schedule a read operation repeatedly
    • We have seen an example of self-scheduling behavior in the "2 person talking example" (click here)
    • We can use a similar self-scheduling procedure to obtain the value of CWND repeated.
    • Example: (requires that the Simulator object variable be named $ns)
        proc plotWindow {tcpSource outfile} {
      global ns set now [$ns now]
      set cwnd [$tcpSource set cwnd_] # Print TIME CWND for gnuplot to plot progressing on CWND
      puts $outfile "$now $cwnd" $ns at [expr $now+0.1] "plotWindow $tcpSource $outfile"
      }
        1. The procedure plotWindow takes a paramter tcpSource which is a TCP agent

          So you can use the procedure to plot the CWND from any number of TCP flows.

        2. The procedure plotWindow takes an output file ID outfile

          You should first open an output file (or use "stdout") in the main program



  • Examining progressing of CWND in TCP (Reno)
    • Here is the previous example (click here) which additional code to obtain the congestion window size of the TCP module $tcp1:

      (New code is colored as magenta )

        #Make a NS simulator
      set ns [new Simulator] # Define a 'finish' procedure
      proc finish {} {
      exit 0
      } # Create the nodes:
      set n0 [$ns node]
      set n1 [$ns node]
      set n2 [$ns node]
      set n3 [$ns node]
      set n4 [$ns node]
      set n5 [$ns node] # Create the links:
      $ns duplex-link $n0 $n2 2Mb 10ms DropTail
      $ns duplex-link $n1 $n2 2Mb 10ms DropTail
      $ns duplex-link $n2 $n3 0.3Mb 200ms DropTail
      $ns duplex-link $n3 $n4 0.5Mb 40ms DropTail
      $ns duplex-link $n3 $n5 0.5Mb 30ms DropTail # Add a TCP sending module to node n0
      set tcp1 [new Agent/TCP/Reno]
      $ns attach-agent $n0 $tcp1 # Add a TCP receiving module to node n4
      set sink1 [new Agent/TCPSink]
      $ns attach-agent $n4 $sink1 # Direct traffic from "tcp1" to "sink1"
      $ns connect $tcp1 $sink1 # Setup a FTP traffic generator on "tcp1"
      set ftp1 [new Application/FTP]
      $ftp1 attach-agent $tcp1
      $ftp1 set type_ FTP (no necessary) # Schedule start/stop times
      $ns at 0.1 "$ftp1 start"
      $ns at 100.0 "$ftp1 stop" # Set simulation end time
      $ns at 125.0 "finish" (Will invoke "exit 0") ##################################################
      ## Obtain CWND from TCP agent
      ################################################## proc plotWindow {tcpSource outfile} {
      global ns set now [$ns now]
      set cwnd [$tcpSource set cwnd_] ###Print TIME CWND for gnuplot to plot progressing on CWND
      puts $outfile "$now $cwnd" $ns at [expr $now+0.1] "plotWindow $tcpSource $outfile"
      } $ns at 0.0 "plotWindow $tcp1 stdout" // Start the probe !! # Run simulation !!!!
      $ns run

    • Example Program: (Demo above code)                                                
      • This NS Prog prints the (time, cwnd) to the terminal: click here
      • This NS Prog prints the (time, cwnd) to the output file "WinFile": click here

      To run the program, use the command:

      ns Reno2.tcl

      To plot the window progressing from "winfile", do:

    • UNIX>> gnuplot
      • gnuplot>> plot "WinFile" using 1:2 title "Flow 1" with lines 1


    • NOTE:
          In case you wonder why the CWND plot look so different, it's because the setting of some parameters.

      Add the following statements to the simulation to get the one I used in class:

        # ########################################################
      # Set Queue Size of link (n2-n3) to 10 (default is 50 ?)
      # ########################################################
      $ns queue-limit $n2 $n3 10 # ########################################################
      # TCP parameters:
      # ########################################################
      $tcp1 set window_ 8000
      $tcp1 set packetSize_ 552


  • Postscript: Analyzing multiple TCP flows
    • The easiest way to analyze the behavior of multiple TCP is to open one file to store the progression of one TCP agent's variable values.
    • Example: 2 TCP Agents
        set tcp1 [new Agent/TCP/Reno]
      ...
      set tcp2 [new Agent/TCP/Reno]
      ... set outfile1 [open "WinFile1" w]
      set outfile2 [open "WinFile2" w] $ns at 0.0 "plotWindow $tcp1 $outfile1" $ns at 0.0 "plotWindow $tcp2 $outfile2"

      Plot data of TCP 1 will be store in file "WinFile1"

      Plot data of TCP 2 will be store in file "WinFile2"

http://www.mathcs.emory.edu/~cheung/Courses/558-old/Syllabus/90-NS/3-Perf-Anal/TCP-CWND.html






Studying TCP's Congestion Window using NS的更多相关文章

  1. TCP系列43—拥塞控制—6、Congestion Window Validation(CWV)

    一.概述 在RFC2861中,区分了TCP连接数据传输的三种状态   After sending a data segment:       If tcpnow - T_last >= RTO ...

  2. Studying TCP's Throughput and Goodput using NS

    Studying TCP's Throughput and Goodput using NS What is Throughput Throughput is the amount of data r ...

  3. Congestion Avoidance in TCP

    Congestion Avoidance in TCP Consequence of lack of congestion control When a popular resource is sha ...

  4. 【NS2】各种TCP版本 之 TCP Tahoe 和 TCP Reno(转载)

    实验目的 学习TCP的拥塞控制机制,并了解TCP Tahoe 和 TCP Reno的运行方式. 基础知识回顾 TCP/IP (Transmission Control Protocol/Interne ...

  5. QUIC和TCP

    作者:henrystark henrystark@126.com Blog: http://henrystark.blog.chinaunix.net/ 日期:20140626 本文遵循CC协议:署名 ...

  6. [转帖]直击案发现场!TCP 10倍延迟的真相是?

    直击案发现场!TCP 10倍延迟的真相是? http://zhuanlan.51cto.com/art/201911/605268.htm 内核参数调优 非常重要啊. 什么是经验?就是遇到问题,解决问 ...

  7. TCP 协议快被淘汰了,UDP 协议才是新世代的未来?

    TCP 协议可以说是今天互联网的基石,作为可靠的传输协议,在今天几乎所有的数据都会通过 TCP 协议传输,然而 TCP 在设计之初没有考虑到现今复杂的网络环境,当你在地铁上或者火车上被断断续续的网络折 ...

  8. Linux上TCP的几个内核参数调优

    Linux作为一个强大的操作系统,提供了一系列内核参数供我们进行调优.光TCP的调优参数就有50多个.在和线上问题斗智斗勇的过程中,笔者积累了一些在内网环境应该进行调优的参数.在此分享出来,希望对大家 ...

  9. google 论文

    从google历年所有论文的汇总来看,TOP5的分别是人工智能和机器学习.算法理论.人机交互与视觉.自然语言处理.机器感知,大家从一个侧面看出goolge research的重点了吧. Google所 ...

随机推荐

  1. cordova 更改app的图标

    写在前面:cordova 使一个前端开发者成为一个“假”的android开发人员,不得不说提供给我们巨大的方便~,cordova打包生成的apk的默认样式和启动的名字真的是需要我们字更改的:本文将记录 ...

  2. Python学习 day09

    一.文件的修改 python中修改文件,可以直接通过write实现,但这种方法均比较局限.若有需求:将文件中的某内容替换为新内容,其他内容保持不变.这种需求write理论上是可以实现的,可以将一个文件 ...

  3. SD341X-SD343H蜗轮传动伸缩蝶阀厂家,SD341X-SD343H蜗轮传动伸缩蝶阀价格 - 专题栏目 - 无极资讯网

    无极资讯网 首页 最新资讯 最新图集 最新标签   搜索 SD341X-SD343H蜗轮传动伸缩蝶阀 无极资讯网精心为您挑选了(SD341X-SD343H蜗轮传动伸缩蝶阀)信息,其中包含了(SD341 ...

  4. (转)python标准库中socket模块详解

    python标准库中socket模块详解 socket模块简介 原文:http://www.lybbn.cn/data/datas.php?yw=71 网络上的两个程序通过一个双向的通信连接实现数据的 ...

  5. Python数据类型(列表)

    文章内容参考了教程:http://www.runoob.com/python/python-basic-syntax.html#commentform Python 列表(List) 序列是Pytho ...

  6. CoreJava笔记之JavaBean、静态方法static和final

    记住两句话: 1.属性是静态绑定到变量类型: 2.方法是动态绑定,由最终对象的方法决定 =============================== 关于JavaBean: 1.不是语法规则,是习惯 ...

  7. android webview 中 js 模板引擎的使用

    最近在项目中要求用 webview 展示几个界面, 而后台返回的不是 html 而是 json 数据. 起初用 StringBuilder 一个一个拼 html, 后来感觉太繁琐,拼一个还行,拼多了就 ...

  8. PHP中判断字符串是否包含某个字符时,建议使用正则表达式preg_match()

    判断字符串中是否包含 某个字符时,在java中时直接使用 indexOf()来判断的 在php中好像也要对应的,strpos(),stripos() 不过每次我用的都很不爽,老是出现各种各样的小问题, ...

  9. Oracle 架构

  10. 手动修改user-agent

    1. 在浏览器地址栏输入 about:config.弹出对话框: