Increasing TCP's Initial Window
Extracted elements (21)
Analysis of network-wide impact shows that increasing the initial window to 4K bytes does not create a danger of congestion collapse: duplicate retransmissions are bounded (at most one duplicate segment in the absence of SACK), and the segment drop rate increase is small for uncorrelated arrivals.
For connections transferring less than 4K bytes (many SMTP and HTTP transfers), the larger initial window reduces the data transfer time to a single RTT, which is the primary practical benefit driving this change.
For high-bandwidth, high-latency connections (e.g., satellite links), the larger initial window eliminates up to three RTTs and a delayed-ACK timeout during the initial slow-start phase.
In high-congestion environments with Drop Tail routers biased against bursts, a four-segment initial window may cause unnecessary retransmit timeouts that would not occur with a one-segment window, representing the primary individual-connection disadvantage.
The formula is set to roughly 4K bytes (three 1500-byte segments in the common case) as a balance: large enough to reduce RTTs for short transfers, small enough to avoid severe congestion harm. The 4380-byte middle range was chosen so that typical Ethernet-sized packets result in exactly three initial segments.
The larger initial window is explicitly not intended as encouragement for web browsers to open multiple simultaneous TCP connections with large windows, which works against TCP congestion control and increases unfairness; HTTP/1.1 persistent connections and pipelining are the recommended alternative.
When the initial window is one segment, a receiver using delayed ACKs must wait for a timeout (up to 200–500 ms) before generating an ACK. An initial window of at least two segments eliminates this wait, motivating the increase.
Larger TCP initial windows do not dramatically increase network burstiness because TCP traffic is already bursty: delayed ACKs during congestion avoidance cause two-segment bursts, and during slow start cause three-segment bursts; four- and five-segment bursts from dropped ACKs are not rare.
On low-bandwidth paths (e.g., 9.6 Kbps), the small SYN/SYN-ACK packets seed the RTO estimator with a low RTT, causing the initial RTO to fire before ACKs for the first large data window return, producing spurious timeouts. A larger initial window exacerbates this existing problem.
When using larger initial windows with Path MTU Discovery, there are two options for the Don't Fragment (DF) bit: set it in all segments or only in one. Setting DF in the last segment of the initial window minimizes needless retransmits and duplicate ACKs triggering Fast Retransmit when the initial segment size is too large.
A TCP MAY set the restart window (used after a long idle period) to the minimum of the initial window value and the current cwnd; using a larger restart window MUST NOT increase the size of cwnd.
If the SYN or SYN/ACK is lost, the initial window used by a sender after a correctly transmitted SYN MUST be one segment consisting of MSS bytes.
It is RECOMMENDED that TCP refrain from sampling the RTT during the three-way handshake, keeping the default RTO in place until an RTT sample involving a data packet is taken, to avoid spurious retransmit timeouts on low-bandwidth paths.
It is RECOMMENDED that TCPs use limited transmit [RFC3042] to aid recovery from loss via fast retransmit rather than the RTO timer during the initial window of data transmission.
TCP's initial congestion window MUST NOT exceed min(4*MSS, max(2*MSS, 4380 bytes)). Equivalently: if MSS<=1095 then cwnd<=4*MSS; if 1095<MSS<2190 then cwnd<=4380; if MSS>=2190 then cwnd<=2*MSS.
The loss window (used after a retransmit timeout) must remain 1 segment of MSS bytes to permit the lowest possible window size in severe congestion. This change does NOT alter the loss window.
When larger initial windows are used with Path MTU Discovery and the MSS is found to be too large, cwnd SHOULD be reduced by the ratio of the old segment size to the new segment size to prevent large bursts of smaller segments.
TCP uses slow start in three distinct contexts: (1) initial window for new connections, (2) restart window after a long idle period, and (3) loss window after a retransmit timeout. This RFC modifies only the initial window.
The increased initial window applies only to the first round-trip time of data transmission following the TCP three-way handshake. Neither the SYN/ACK nor its ACK should increase the initial window size above the formula in equation (1).
With a common 1500-byte packet (MSS=1460 bytes), the formula min(4*MSS, max(2*MSS, 4380 bytes)) yields an initial window of 4380 bytes, permitting three segments initially.
Changing the initial congestion window from one or two segments to the new upper bound does not raise any known new security issues with TCP.