Studying TCP's Congestion Window using NS
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"
}- 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.
- The procedure plotWindow takes an output file ID outfile
You should first open an output file (or use "stdout") in the main program
- The procedure plotWindow takes a paramter tcpSource which is a TCP agent
- 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- This NS Prog will draw the CWND: click here
- Here is the previous example (click here) which additional code to obtain the congestion window size of the TCP module $tcp1:
- 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的更多相关文章
- TCP系列43—拥塞控制—6、Congestion Window Validation(CWV)
一.概述 在RFC2861中,区分了TCP连接数据传输的三种状态 After sending a data segment: If tcpnow - T_last >= RTO ...
- 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 ...
- Congestion Avoidance in TCP
Congestion Avoidance in TCP Consequence of lack of congestion control When a popular resource is sha ...
- 【NS2】各种TCP版本 之 TCP Tahoe 和 TCP Reno(转载)
实验目的 学习TCP的拥塞控制机制,并了解TCP Tahoe 和 TCP Reno的运行方式. 基础知识回顾 TCP/IP (Transmission Control Protocol/Interne ...
- QUIC和TCP
作者:henrystark henrystark@126.com Blog: http://henrystark.blog.chinaunix.net/ 日期:20140626 本文遵循CC协议:署名 ...
- [转帖]直击案发现场!TCP 10倍延迟的真相是?
直击案发现场!TCP 10倍延迟的真相是? http://zhuanlan.51cto.com/art/201911/605268.htm 内核参数调优 非常重要啊. 什么是经验?就是遇到问题,解决问 ...
- TCP 协议快被淘汰了,UDP 协议才是新世代的未来?
TCP 协议可以说是今天互联网的基石,作为可靠的传输协议,在今天几乎所有的数据都会通过 TCP 协议传输,然而 TCP 在设计之初没有考虑到现今复杂的网络环境,当你在地铁上或者火车上被断断续续的网络折 ...
- Linux上TCP的几个内核参数调优
Linux作为一个强大的操作系统,提供了一系列内核参数供我们进行调优.光TCP的调优参数就有50多个.在和线上问题斗智斗勇的过程中,笔者积累了一些在内网环境应该进行调优的参数.在此分享出来,希望对大家 ...
- google 论文
从google历年所有论文的汇总来看,TOP5的分别是人工智能和机器学习.算法理论.人机交互与视觉.自然语言处理.机器感知,大家从一个侧面看出goolge research的重点了吧. Google所 ...
随机推荐
- 【wordpress】wordpress环境的搭建
WordPress WordPress 是一种使用 PHP语言和 MySQL数据库开发的开源.免费的Blog(博客,网志)引擎,用户可以在支持 PHP 和 MySQL 数据库的服务器上建立自己的 Bl ...
- 关于window.console&&console.log(123)的思考
一.JS的且运算记得最开始看到window.console&&console.log(123),当时知道能起什么作用但是没有深入研究,最近在研究后总算弄明白了.要理解这个,首先得明白三 ...
- HDU 5691 ——Sitting in Line——————【状压动规】
Sitting in Line Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Other ...
- ASP.Net Core MVC 网站在Windows服务器跑不起来
1.vs远程发布到服务器,浏览器访问,报错502 2.打开错误提示提供的网址参考 3.安装runtime,sdk,Hosting Bundle Installer,其他操作 .....发现并没有什么用 ...
- Eclipse提示workspaces is use
问题描述: 有时候因为强行关闭Eclipse导致再次打开出现workspace提示正在使用 解决办法: 删除workspace目录下隐藏文件夹 .metadata 中的 .lock 文件 worksp ...
- java时间工具类
在项目中,很多地方需要根据时间获取相应的数据,将时间格式化,或者时间比较等相关操作.一个良好的工具类不仅可以减少代码冗余,还能促进业务处理,加快进度. /** * @author: lxw * @Da ...
- Javaweb之EL表达式
1.EL表达式简介 EL全名为Expression Language.EL的主要作用为: 获取数据:EL表达式主要用于替换jsp页面中的脚本表达式,以从各种类型的web域中检索java对象,获取数据. ...
- Java温故而知新(7)Object类及其方法讲解
一.java.lang.Object java.lang包在使用的时候无需显示导入,编译时由编译器自动导入. Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类. Object类 ...
- 二、IOC容器基本原理
IOC容器就是具有依赖注入功能的容器,IOC容器负责实例化.定位.配置应用程序中的对象及建立这些对象间的依赖.应用程序无需在代码中new相关的对象,应用程序由IOC容器进行组装. spring IOC ...
- C Primer Plus note6
error: invalid preprocessing directive #difine| 无效的宏定义处理 宏定义define 写成了 difine.