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. WinForm之GDI画图步骤

    Graphics g = this.CreateGraphics(); //这句是创建画布g,根据窗体得到窗体的画布 Pen p = new Pen(Color.Red, 2); //这句是创建一个红 ...

  2. Bellman-Ford(BF)和Floyd算法

    以下只是本人的笔记,想法我自己都怀疑,内容不作为参考, Floyd算法就比较暴力了,算法思想是三重循环,直接枚举所有的顶点,再两次for循环枚举所有点,验证以第一个点为中转点的两个点是否路径更短,具体 ...

  3. ORA-24247:网络访问被访问控制列表(ACL)拒绝

    今天将一个发送数据库监控邮件的procedure 从10g 迁移到11g,不工作了.处理记录如下: 在Oracle11g中,Oracle在安全方面有了很多的改进,而在网络权限控制方面,也有一个新的概念 ...

  4. 《大数据日知录》读书笔记-ch11大规模批处理系统

    MapReduce: 计算模型: 实例1:单词统计 实例2:链接反转 实例3:页面点击统计 系统架构: 在Map阶段还可以执行可选的Combiner操作,类似于Reduce,但是在Mapper sid ...

  5. Json 装 list<object>objectList

    List<MallGoodComment> mallGoodCommentList = JSONObject.parseArray(mallGoodComments, MallGoodCo ...

  6. 我的Python升级打怪之路【三】:Python函数

    函数 在函数之前,我们一直遵循者:面向过程编程,即:根据业务逻辑从上到下实现功能,开发过程中最常见的就是粘贴复制.代码就没有重复利用率. 例如:有好多的重复的代码 if 条件: 发送指令 接收结果 e ...

  7. 如何自定义修改ztree树节点的图标

    1.此种情况是针对后对数据没有不好判断谁是父节点和子节点的问题 ztree默认的树节点,父子节点的图标不大好看,修改图片只需要在数据的地方添加icon的键,值就是图片的相对位置,但是问题就是需要区分是 ...

  8. STM32F407 使用HAL库延时微妙实现方法(附CubeMX配置过程)

    STM32F407 使用HAL库延时微妙实现方法(STM32CubeMX配置) 作者 : 李剀出处 : https://www.cnblogs.com/kevin-nancy/p/10696681.h ...

  9. 在ubuntu下使用Eclipse搭建Hadoop开发环境

    一.安装准备1.JDK版本:jdk1.7.0(jdk-7-linux-i586.tar.gz)2.hadoop版本:hadoop-1.1.1(hadoop-1.1.1.tar.gz)3.eclipse ...

  10. Mybatis缓存(二)

    Mybatis的二级缓存 1.二级缓存的范围  1. 二级缓存是Mapper级别的缓存.  2. 二级缓存的结构也是一个HashMap.  3. 不同的SqlSession对象去操作同一个mapper ...