Network Working Group S. Floyd
Request for Comments: 3742 ICSI
Category: Experimental March 2004
Limited Slow-Start for TCP with Large Congestion Windows
Status of this Memo
This memo defines an Experimental Protocol for the Internet
community. It does not specify an Internet standard of any kind.
Discussion and suggestions for improvement are requested.
Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (2004). All Rights Reserved.
Abstract
This document describes an optional modification for TCP's slow-start
for use with TCP connections with large congestion windows. For TCP
connections that are able to use congestion windows of thousands (or
tens of thousands) of MSS-sized segments (for MSS the sender's
MAXIMUM SEGMENT SIZE), the current slow-start procedure can result in
increasing the congestion window by thousands of segments in a single
round-trip time. Such an increase can easily result in thousands of
packets being dropped in one round-trip time. This is often
counter-productive for the TCP flow itself, and is also hard on the
rest of the traffic sharing the congested link. This note describes
Limited Slow-Start as an optional mechanism for limiting the number
of segments by which the congestion window is increased for one
window of data during slow-start, in order to improve performance for
TCP connections with large congestion windows.
1. Introduction
This note describes an optional modification for TCP's slow-start for
use with TCP connections with large congestion windows. For TCP
connections that are able to use congestion windows of thousands (or
tens of thousands) of MSS-sized segments (for MSS the sender's
MAXIMUM SEGMENT SIZE), the current slow-start procedure can result in
increasing the congestion window by thousands of segments in a single
round-trip time. Such an increase can easily result in thousands of
packets being dropped in one round-trip time. This is often
counter-productive for the TCP flow itself, and is also hard on the
rest of the traffic sharing the congested link. This note describes
Limited Slow-Start, limiting the number of segments by which the
Floyd Experimental [Page 1]
RFC 3742 TCP's Slow-Start with Large Congestion Windows March 2004
congestion window is increased for one window of data during slow-
start, in order to improve performance for TCP connections with large
congestion windows.
When slow-start results in a large increase in the congestion window
in one round-trip time, a large number of packets might be dropped in
the network (even with carefully-tuned active queue management
mechanisms in the routers). This drop of a large number of packets
in the network can result in unnecessary retransmit timeouts for the
TCP connection. The TCP connection could end up in the congestion
avoidance phase with a very small congestion window, and could take a
large number of round-trip times to recover its old congestion
window. This poor performance is illustrated in [F02].
2. The Proposal for Limited Slow-Start
Limited Slow-Start introduces a parameter, "max_ssthresh", and
modifies the slow-start mechanism for values of the congestion window
where "cwnd" is greater than "max_ssthresh". That is, during Slow-
Start, when
cwnd <= max_ssthresh,
cwnd is increased by one MSS (MAXIMUM SEGMENT SIZE) for every
arriving ACK (acknowledgement) during slow-start, as is always the
case. During Limited Slow-Start, when
max_ssthresh < cwnd <= ssthresh,
the invariant is maintained so that the congestion window is
increased during slow-start by at most max_ssthresh/2 MSS per round-
trip time. This is done as follows:
For each arriving ACK in slow-start:
If (cwnd <= max_ssthresh)
cwnd += MSS;
else
K = int(cwnd/(0.5 max_ssthresh));
cwnd += int(MSS/K);
Thus, during Limited Slow-Start the window is increased by 1/K MSS
for each arriving ACK, for K = int(cwnd/(0.5 max_ssthresh)), instead
of by 1 MSS as in standard slow-start [RFC2581].
Floyd Experimental [Page 2]
RFC 3742 TCP's Slow-Start with Large Congestion Windows March 2004
When
ssthresh < cwnd,
slow-start is exited, and the sender is in the Congestion Avoidance
phase.
Our recommendation would be for max_ssthresh to be set to 100 MSS.