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所 ...
随机推荐
- linux下 git使用小记下
之前都是自己windows做脚本,完成文件的备份和管理,第一次使用git 转发一个博主很有用的笔记 ,并在此做了一点补充学习了 引用:https://www.cnblogs.com/chenfuli ...
- [前后端分离项目]thinkphp返回给前端数据为字符串
写在前面:现在项目大多是采用前后端分离的模式进行开发,这种模式下的开发大大的提高了工作效率,而进行前后端数据交互传输的格式基本以json为主,毕业设计中兼顾前端开发和后端开发(后端小白一个),前端业务 ...
- centos7 配置php-fpm
1.复制相应的文件cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.confcp /usr/local/p ...
- 网站Http升级至Https(基于Tomcat)
由于之前一直忙于服创比赛,然后就导致好久没写博客了. 现在服创结束也有十来天了,感觉不写点什么就对不起自己了. 于是乎,就写写将网站从http升级到https的过程吧. 首先域名和服务器自然是必须的, ...
- Hibernate实体类编写规则和主键策略
一.实体类的编写规则 1.属性要是私有的. 2.要有公开的setter和getter方法供外界访问和修改. 3.每一个实体类要有一个属性作为唯一值(一般都是使用对于数据表的主键). 4.建议数据类型不 ...
- UOJ #218. 【UNR #1】火车管理
Description Solution 实际上添加问题就是一个线段树区间覆盖问题,打标记就好 对于弹栈操作比较难搞,实际上也就是一个历史查询,我们不需要保存栈中的每一个元素,我们通过查找历史状态就可 ...
- yum -y update 报错:GPG key retrieval failed: [Errno 14] Could not open/read file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
用的是centos6.5的镜像,yum源太老了,修改了之后想更新一下: yum -y update 执行报错: warning: rpmts_HdrFromFdno: Header V3 RSA/SH ...
- JS实现队列
JS实现队列: 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插入操作的端称为队尾 ...
- Vue(五)--组件
1.组件也需要进行注册才可以使用:分为局部注册和全局注册 <body> <div id="app" > <my-component></m ...
- Azure 项目构建 – 部署高可用的 Python Web 应用
Python 以其优美,清晰,简单的特性在全世界广泛流行,成为最主流的编程语言之一.Azure 平台针对 Python 提供了非常完备的支持.本项目中,您将了解如何构造和部署基于 Azure Web ...