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. 封装通用的xhr对象(兼容各个版本)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Longest palindrome subsequence

    A palindrome is a nonempty string over some alphabet that reads the same forwardand backward. Exampl ...

  3. spring data jpa 动态查询(工具类封装)

    利用JPA的Specification<T>接口和元模型就实现动态查询了.但是这样每一个需要动态查询的地方都需要写一个这样类似的findByConditions方法,小型项目还好,大型项目 ...

  4. ArrayList、Vector和LinkedList等的差别与用法(基础回顾)

    ArrayList 和Vector是采取数组体式格式存储数据,此数组元素数大于实际存储的数据以便增长和插入元素,都容许直接序号索引元素,然则插入数据要设计到数组元素移动等内存操纵,所以索引数据快插入数 ...

  5. unity 工具开发基础

    using System.Collections; using System.Collections.Generic; using System.IO; using System.Text; usin ...

  6. 一站式机器学习平台TI-ONE是什么?——云+未来峰会开发者专场回顾

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 背景:5月23-24日,以“焕启”为主题的腾讯“云+未来”峰会在广州召开,广东省各级政府机构领导.海内外业内学术专家.行业大咖及技术大牛等在 ...

  7. HDU 5698——瞬间移动——————【逆元求组合数】

    瞬间移动 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submis ...

  8. 深入理解JavaScript系列(39):设计模式之适配器模式

    介绍 适配器模式(Adapter)是将一个类(对象)的接口(方法或属性)转化成客户希望的另外一个接口(方法或属性),适配器模式使得原本由于接口不兼容而不能一起工作的那些类(对象)可以一些工作.速成包装 ...

  9. 理解Xaml标记语言

    理解XAML XAML基于XAML,因而具有与XAML相似的特性.在XAMl中,同样必须区分大小写,但是Xaml以.xaml作为扩展名,表示这是一个应用程序的标记扩展文件.WPF中的XAML主要用于创 ...

  10. LDAP概念了解

    LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP.LDAP支持TCP/IP,这对访问Internet是必须的. L ...