draft-ietf-tcpimpl-cong-control-02.txt   draft-ietf-tcpimpl-cong-control-03.txt 
TCP Implementation Working Group M. Allman TCP Implementation Working Group M. Allman
INTERNET DRAFT NASA Lewis/Sterling Software INTERNET DRAFT NASA Lewis/Sterling Software
File: draft-ietf-tcpimpl-cong-control-02.txt V. Paxson File: draft-ietf-tcpimpl-cong-control-03.txt V. Paxson
LBNL LBNL
W. Stevens W. Stevens
Consultant Consultant
December, 1998 December, 1998
TCP Congestion Control TCP Congestion Control
Status of this Memo Status of this Memo
This document is an Internet-Draft. Internet-Drafts are working This document is an Internet-Draft. Internet-Drafts are working
skipping to change at page 2, line 26 skipping to change at page 2, line 26
This section provides the definition of several terms that will be This section provides the definition of several terms that will be
used throughout the remainder of this document. used throughout the remainder of this document.
SEGMENT: SEGMENT:
A segment is ANY TCP/IP data or acknowledgment packet (or both). A segment is ANY TCP/IP data or acknowledgment packet (or both).
SENDER MAXIMUM SEGMENT SIZE (SMSS): SENDER MAXIMUM SEGMENT SIZE (SMSS):
The SMSS is the size of the largest segment that the sender can The SMSS is the size of the largest segment that the sender can
transmit. This value can be based on the maximum transmission transmit. This value can be based on the maximum transmission
unit of the network, the path MTU discovery [MD90] algorithm, or unit of the network, the path MTU discovery [MD90] algorithm,
other factors. The size does not include the TCP/IP headers and RMSS (see next item), or other factors. The size does not
options. include the TCP/IP headers and options.
RECEIVER MAXIMUM SEGMENT SIZE (RMSS): RECEIVER MAXIMUM SEGMENT SIZE (RMSS):
The RMSS is the size of the largest segment the receiver is The RMSS is the size of the largest segment the receiver is
willing to accept. This is the value specified in the MSS willing to accept. This is the value specified in the MSS
option sent by the receiver during connection startup. Or, if option sent by the receiver during connection startup. Or, if
the MSS option is not used, 536 bytes [Bra89]. The size does the MSS option is not used, 536 bytes [Bra89]. The size does
not include the TCP/IP headers and options. not include the TCP/IP headers and options.
FULL-SIZED SEGMENT: FULL-SIZED SEGMENT:
A segment that contains the maximum number of data bytes A segment that contains the maximum number of data bytes
permitted (i.e., a segment containing MSS bytes of data). permitted (i.e., a segment containing SMSS bytes of data).
RECEIVER WINDOW (rwnd) RECEIVER WINDOW (rwnd)
The most recently advertised receiver window. The most recently advertised receiver window.
CONGESTION WINDOW (cwnd): CONGESTION WINDOW (cwnd):
A TCP state variable that limits the amount of data a TCP can A TCP state variable that limits the amount of data a TCP can
send. At any given time, a TCP MUST NOT send data with a send. At any given time, a TCP MUST NOT send data with a
sequence number higher than the sum of the highest acknowledged sequence number higher than the sum of the highest acknowledged
sequence number and the minimum of cwnd and rwnd. sequence number and the minimum of cwnd and rwnd.
skipping to change at page 4, line 16 skipping to change at page 4, line 16
experimenting with the change, rather than conforming to the present experimenting with the change, rather than conforming to the present
standards for TCP congestion control. standards for TCP congestion control.
The initial value of ssthresh MAY be arbitrarily high (for example, The initial value of ssthresh MAY be arbitrarily high (for example,
some implementations use the size of the advertised window), but it some implementations use the size of the advertised window), but it
may be reduced in response to congestion. The slow start algorithm may be reduced in response to congestion. The slow start algorithm
is used when cwnd < ssthresh, while the congestion avoidance is used when cwnd < ssthresh, while the congestion avoidance
algorithm is used when cwnd > ssthresh. When cwnd and ssthresh are algorithm is used when cwnd > ssthresh. When cwnd and ssthresh are
equal the sender may use either slow start or congestion avoidance. equal the sender may use either slow start or congestion avoidance.
During slow start, a TCP increments cwnd by at most MSS bytes for During slow start, a TCP increments cwnd by at most SMSS bytes for
each ACK received that acknowledges new data. Slow start ends when each ACK received that acknowledges new data. Slow start ends when
cwnd exceeds ssthresh (or, optionally, when it reaches it, as noted cwnd exceeds ssthresh (or, optionally, when it reaches it, as noted
above); or when cwnd reaches rwnd; or when congestion is observed. above) or when congestion is observed.
During congestion avoidance, cwnd is incremented by 1 full-sized During congestion avoidance, cwnd is incremented by 1 full-sized
segment per round-trip time (RTT). Congestion avoidance continues segment per round-trip time (RTT). Congestion avoidance continues
until cwnd reaches the receiver's advertised window or congestion is until cwnd congestion is detected. One formula commonly used to
detected. One formula commonly used to update cwnd during update cwnd during congestion avoidance is given in equation 2:
congestion avoidance is given in equation 2:
cwnd += SMSS*SMSS/cwnd (2) cwnd += SMSS*SMSS/cwnd (2)
This adjustment is executed on every incoming non-duplicate ACK. This adjustment is executed on every incoming non-duplicate ACK.
Equation (2) provides an acceptable approximation to the underlying Equation (2) provides an acceptable approximation to the underlying
principle of increasing cwnd by 1 full-sized segment per RTT. (Note principle of increasing cwnd by 1 full-sized segment per RTT. (Note
that for a connection in which the receiver acknowledges every data that for a connection in which the receiver acknowledges every data
segment, (2) proves slightly more aggressive than 1 segment per RTT, segment, (2) proves slightly more aggressive than 1 segment per RTT,
and for a receiver acknowledging every-other packet, (2) is less and for a receiver acknowledging every-other packet, (2) is less
aggressive.) aggressive.)
skipping to change at page 8, line 10 skipping to change at page 8, line 9
In some cases, the sender and receiver may not agree on what In some cases, the sender and receiver may not agree on what
constitutes a full-sized segment. An implementation is deemed to constitutes a full-sized segment. An implementation is deemed to
comply with this requirement if it sends at least one acknowledgment comply with this requirement if it sends at least one acknowledgment
every time it receives 2*RMSS bytes of new data from the sender, every time it receives 2*RMSS bytes of new data from the sender,
where RMSS is the Maximum Segment Size specified by the receiver to where RMSS is the Maximum Segment Size specified by the receiver to
the sender (or the default value of 536 bytes, per [Bra89], if the the sender (or the default value of 536 bytes, per [Bra89], if the
receiver does not specify an MSS option during connection receiver does not specify an MSS option during connection
establishment). The sender may be forced to use a segment size less establishment). The sender may be forced to use a segment size less
than RMSS due to the maximum transmission unit (MTU), the path MTU than RMSS due to the maximum transmission unit (MTU), the path MTU
discovery algorithm or other factors. For instance, consider the discovery algorithm or other factors. For instance, consider the
case when the receiver announces an MSS of X bytes but the sender case when the receiver announces an RMSS of X bytes but the sender
ends up using a segment size of Y bytes (Y < X) due to path MTU ends up using a segment size of Y bytes (Y < X) due to path MTU
discovery (or the sender's MTU size). The receiver will generate discovery (or the sender's MTU size). The receiver will generate
stretch ACKs if it waits for 2*X bytes to arrive before an ACK is stretch ACKs if it waits for 2*X bytes to arrive before an ACK is
sent. Clearly this will take more than 2 segments of size Y bytes. sent. Clearly this will take more than 2 segments of size Y bytes.
Therefore, while a specific algorithm is not defined, it is Therefore, while a specific algorithm is not defined, it is
desirable for receivers to attempt to prevent this situation, for desirable for receivers to attempt to prevent this situation, for
example by acknowledging at least every second segment, regardless example by acknowledging at least every second segment, regardless
of size. Finally, we repeat that an ACK MUST NOT be delayed for of size. Finally, we repeat that an ACK MUST NOT be delayed for
more than 500 ms waiting on a second full-sized segment to arrive. more than 500 ms waiting on a second full-sized segment to arrive.
 End of changes. 7 change blocks. 
11 lines changed or deleted 10 lines changed or added

This html diff was produced by rfcdiff 1.33. The latest version is available from http://tools.ietf.org/tools/rfcdiff/