< draft-padhye-dcp-ccid3-03.txt   draft-padhye-dcp-ccid3-04.txt >
Internet Engineering Task Force Internet Engineering Task Force
INTERNET-DRAFT Jitendra Padhye INTERNET-DRAFT Jitendra Padhye
draft-padhye-dcp-ccid3-03.txt Microsoft Research draft-padhye-dcp-ccid3-04.txt Microsoft Research
Sally Floyd Sally Floyd
Eddie Kohler Eddie Kohler
ICIR ICIR
24 May 2002 19 June 2002
Expires: November 2002 Expires: December 2002
Profile for DCCP Congestion Control ID 3: Profile for DCCP Congestion Control ID 3:
TFRC Congestion Control TFRC Congestion Control
Status of this Document Status of this Document
This document is an Internet-Draft and is in full conformance with This document is an Internet-Draft and is in full conformance with
all provisions of Section 10 of RFC2026. all provisions of Section 10 of RFC2026.
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
skipping to change at page 3, line 25 skipping to change at page 3, line 25
4.3. Acknowledgments of Acknowledgments . . . . . . . . . 7 4.3. Acknowledgments of Acknowledgments . . . . . . . . . 7
5. Explicit Congestion Notification. . . . . . . . . . . . 7 5. Explicit Congestion Notification. . . . . . . . . . . . 7
6. Relevant Options and Features . . . . . . . . . . . . . 7 6. Relevant Options and Features . . . . . . . . . . . . . 7
6.1. Window counter option. . . . . . . . . . . . . . . . 7 6.1. Window counter option. . . . . . . . . . . . . . . . 7
6.2. Elapsed time option. . . . . . . . . . . . . . . . . 8 6.2. Elapsed time option. . . . . . . . . . . . . . . . . 8
6.3. Loss Event Rate Option . . . . . . . . . . . . . . . 8 6.3. Loss Event Rate Option . . . . . . . . . . . . . . . 8
6.4. Receive Rate Option. . . . . . . . . . . . . . . . . 8 6.4. Receive Rate Option. . . . . . . . . . . . . . . . . 8
6.5. ECN NONCE Option . . . . . . . . . . . . . . . . . . 9 6.5. ECN NONCE Option . . . . . . . . . . . . . . . . . . 9
7. Application Requirements. . . . . . . . . . . . . . . . 10 7. Application Requirements. . . . . . . . . . . . . . . . 10
8. Design Considerations . . . . . . . . . . . . . . . . . 10 8. Design Considerations . . . . . . . . . . . . . . . . . 10
9. Thanks. . . . . . . . . . . . . . . . . . . . . . . . . 11 8.1. Determining Loss Events. . . . . . . . . . . . . . . 10
10. References . . . . . . . . . . . . . . . . . . . . . . 11 8.2. Sending Feedback Packets . . . . . . . . . . . . . . 11
11. Authors' Addresses . . . . . . . . . . . . . . . . . . 13 9. Thanks. . . . . . . . . . . . . . . . . . . . . . . . . 12
10. References . . . . . . . . . . . . . . . . . . . . . . 12
11. Authors' Addresses . . . . . . . . . . . . . . . . . . 14
1. Introduction 1. Introduction
This document contains the profile for Congestion Control Identifier This document contains the profile for Congestion Control Identifier
3, TCP-friendly rate control (TFRC), in the Datagram Congestion 3, TCP-friendly rate control (TFRC), in the Datagram Congestion
Control Protocol (DCCP). DCCP uses Congestion Control Identifiers, Control Protocol (DCCP). DCCP uses Congestion Control Identifiers,
or CCIDs, to specify the congestion control mechanism in use on a or CCIDs, to specify the congestion control mechanism in use on a
half-connection. (A half-connection might consist of data packets half-connection. (A half-connection might consist of data packets
sent from DCCP A to DCCP B, plus acknowledgments sent from DCCP B to sent from DCCP A to DCCP B, plus acknowledgments sent from DCCP B to
DCCP A. DCCP A is the sending DCCP, and DCCP B the acknowledging DCCP A. DCCP A is the sending DCCP, and DCCP B the acknowledging
skipping to change at page 4, line 25 skipping to change at page 4, line 25
TFRC is a receiver-based congestion control mechanism that provides TFRC is a receiver-based congestion control mechanism that provides
a TCP-friendly send rate, while minimizing abrupt rate changes [1]. a TCP-friendly send rate, while minimizing abrupt rate changes [1].
The basic TFRC protocol is as follows. The sender sends a stream of The basic TFRC protocol is as follows. The sender sends a stream of
data packets to the receiver at some rate. The receiver sends a data packets to the receiver at some rate. The receiver sends a
feedback packet to the sender at least once every round-trip time. feedback packet to the sender at least once every round-trip time.
Based on the information contained in the feedback packets, the Based on the information contained in the feedback packets, the
sender adjusts its sending rate in accordance with the TCP sender adjusts its sending rate in accordance with the TCP
throughput equation [2], to maintain TCP-friendliness. If no throughput equation [2], to maintain TCP-friendliness. If no
feedback is received from the receiver in two round-trip times, the feedback is received from the receiver in several round-trip times
sender halves its sending rate. (four, in the current TFRC specification), the sender halves its
sending rate.
The values of the round-trip time RTT, the loss event rate p and the The values of the round-trip time RTT, the loss event rate p and the
base timeout value TO are needed by the sender to calculate the send base timeout value TO are needed by the sender to calculate the send
rate using the TCP throughput equation. The sender calculates the rate using the TCP throughput equation. The sender calculates the
values of RTT and TO, while the receiver calculates the value of p. values of RTT and TO, while the receiver calculates the value of p.
1.1. Usage Scenario 1.1. Usage Scenario
DCCP with TFRC congestion control is intended to provide congestion DCCP with TFRC congestion control is intended to provide congestion
control for the flow of data packets from the server to the client control for the flow of data packets from the server to the client
skipping to change at page 4, line 50 skipping to change at page 4, line 51
prefer to minimize abrupt changes in the sending rate. prefer to minimize abrupt changes in the sending rate.
1.2. Example Half-Connection 1.2. Example Half-Connection
This example, taken from the main DCCP draft, is of a half- This example, taken from the main DCCP draft, is of a half-
connection using TFRC Congestion Control specified by CCID 3. The connection using TFRC Congestion Control specified by CCID 3. The
"sender" is the HC-Sender, and the "receiver" is the HC-Receiver. "sender" is the HC-Sender, and the "receiver" is the HC-Receiver.
(1) The sender sends DCCP-Data packets, where the number of packets (1) The sender sends DCCP-Data packets, where the number of packets
sent is governed by an allowed transmit rate, as specified in sent is governed by an allowed transmit rate, as specified in
[1]. Each DCCP-Data packet has a sequence number, and includes [1]. Each DCCP-Data packet has a sequence number and a window
an Acknowledgment Number that is the sequence number of the most counter option.
recent acknowledgment packet received from the receiver. Each
DCCP-Data packet also contains a timestamp, the sender's
estimate of the round-trip time, and the current sending rate.
One or more of these data packets are DCCP-DataAck packets One or more of these data packets are DCCP-DataAck packets
acknowledging the data packet from the receiver, but for acknowledging the data packet from the receiver, but for
simplicity we will not discuss the half-connection of data from simplicity we will not discuss the half-connection of data from
the receiver to the sender in this example. the receiver to the sender in this example.
(2) The receiver sends DCCP-Ack packets at least once per round-trip (2) The receiver sends DCCP-Ack packets at least once per round-trip
time acknowledging the data packets, or as indicated by the TFRC time acknowledging the data packets, unless the sender is
specification [1]. Each DCCP-Ack packet uses a sequence number sending at a rate of less than one packet per RTT, as indicated
and identifies the most recent packet received from the sender. by the TFRC specification [1]. Each DCCP-Ack packet uses a
Each DCCP-Ack packet includes feedback about the loss event rate sequence number and identifies the most recent packet received
calculated by the receiver, as specified below. from the sender. Each DCCP-Ack packet includes feedback about
the loss event rate calculated by the receiver, as specified
below.
(3) The sender continues sending DCCP-Data packets as controlled by (3) The sender continues sending DCCP-Data packets as controlled by
the allowed transmit rate. Upon receiving DCCP-Ack packets, the the allowed transmit rate. Upon receiving DCCP-Ack packets, the
sender updates its allowed transmit rate as specified in [1]. sender updates its allowed transmit rate as specified in [1].
(4) The sender estimates round-trip times and calculates a TimeOut (4) The sender estimates round-trip times and calculates a TimeOut
value TO as specified in [1]. value TO as specified in [1].
(5) If the use of ECN has been negotiated, each DCCP-Data and DCCP- (5) If the use of ECN has been negotiated, each DCCP-Data and DCCP-
DataAck packet is sent as ECN-Capable, with either the ECT(0) or DataAck packet is sent as ECN-Capable, with either the ECT(0) or
the ECT(1) codepoint set. The use of the ECN Nonce with TFRC is the ECT(1) codepoint set. The use of the ECN Nonce with TFRC is
described below. described below.
2. Connection Establishment 2. Connection Establishment
The connection is initiated by the client using mechanisms described The connection is initiated by the client using mechanisms described
in the DCCP specification [3]. The client and the server MAY in the DCCP specification [3]. The client and the server MAY
negotiate the use of the ACK Vector option. Both the server and the negotiate the use of the ACK Vector option. The ACK vector option
client MUST support the timestamp option. The ACK vector option and is described in [3].
the timestamp option are described in [3].
3. Congestion Control on Data Packets 3. Congestion Control on Data Packets
The sender sends DCCP-Data packets to the receiver at the rate The sender sends DCCP-Data packets to the receiver at the rate
specified by the TCP throughput equation [2]. specified by the TCP throughput equation [2].
Each DCCP-Data packet has a sequence number, and an acknowledgment Each DCCP-Data packet has a sequence number, and an acknowledgment
number that is the sequence number of the most recent acknowledgment number that is the sequence number of the most recent acknowledgment
packet received from the receiver. Each data packet contains the packet received from the receiver. Each data packet contains the
window counter option. The format of the window counter option is window counter option. The format of the window counter option is
described below. described below.
After each feedback packet is received from the receiver, the sender After each feedback packet is received from the receiver, the sender
updates values of RTT, TO and the sending rate using procedures updates values of RTT, TO and the sending rate using procedures
specified in [1]. specified in [1].
If no feedback packet is received from the receiver after an If no feedback packet is received from the receiver after an
inverval specified in [1], the sending rate is halved. However, the interval specified in [1], the sending rate is halved. However, the
sending rate is never reduced below one packet per 64 seconds. See sending rate is never reduced below one packet per 64 seconds. See
[1] for more details. [1] for more details.
4. Acknowledgments 4. Acknowledgments
The receiver sends DCCP-Ack packets to the sender once per round- The receiver sends a DCCP-Ack packet to the sender roughly once per
trip time, or more frequently. This rate is determined by details of round-trip time, if the sender is sending packets that frequently.
the TFRC protocol, as specified in [1]. This rate is determined by details of the TFRC protocol, as
specified in [1].
The acknowledgment number in the DCCP-Ack packet acknowledges the The acknowledgment number in the DCCP-Ack packet acknowledges the
most recent packet received from the sender. Each DCCP-Ack packet most recent packet received from the sender. Each DCCP-Ack packet
from the receiver includes the following options: from the receiver includes the following options:
1. An option specifying the amount of time elapsed between since 1. An option specifying the amount of time elapsed between since
the receiver received the packet whose sequence number appears the receiver received the packet whose sequence number appears
in the acknowledgment field. in the acknowledgment field.
2. An option specifying the loss event rate p calculated by the 2. An option specifying the loss event rate p calculated by the
skipping to change at page 10, line 21 skipping to change at page 10, line 21
As it is presently specified, this CCID should only be used by As it is presently specified, this CCID should only be used by
senders that are willing to trust the receiver to report the correct senders that are willing to trust the receiver to report the correct
loss event rate. If ECN is used, the ECN Nonce Option allows the loss event rate. If ECN is used, the ECN Nonce Option allows the
sender to probabilistically verify the loss rate reported by the sender to probabilistically verify the loss rate reported by the
receiver. However, we have not specified such a verification receiver. However, we have not specified such a verification
procedure in this document. procedure in this document.
8. Design Considerations 8. Design Considerations
The data packets do not carry timestamps. The sender can store the The data packets do not carry timestamps. The sender can store the
times at which each packet was sent. When an acknowldegemnt arrives, times at which recent packets were sent. When an acknowledgement
the acknowldegemnt number and the elapsed time option provide arrives, the acknowledgement number and the elapsed time option
sufficient information to compute the round trip time. provide sufficient information to compute the round trip time.
8.1. Determining Loss Events
The window counter option is used by the receiver to determine if The window counter option is used by the receiver to determine if
multiple lost packets belong to the same loss event. The sender multiple lost packets belong to the same loss event. The sender
increases the window counter by 1 every quarter round trip time. To increases the window counter by 1 every quarter round trip time. To
determine whether two lost packets, with sequnece numbers X and Y (Y determine whether two lost packets, with sequence numbers X and Y (Y
> X), belong to different loss events, the receiver proceeds as > X), belong to different loss events, the receiver proceeds as
follows: follows:
- Let X_prev be the highest sequence number which was received, - Let X_prev be the highest sequence number which was received
and X_prev < X. with X_prev < X.
- Let Y_prev be the highest seuqnce number which was received, - Let Y_prev be the highest sequence number which was received
and Y_prev < Y. with Y_prev < Y.
- Let CX_prev and CY_prev be the window counters associated with - Let CX_prev and CY_prev be the window counters associated with
packets X_prev and Y_prev respectively. Clearly, CY_prev >= packets X_prev and Y_prev respectively. Clearly, CY_prev >=
CX_prev. CX_prev.
- Packets X and Y belong to different loss events if (CY_prev - - Packets X and Y belong to different loss events if (CY_prev -
CX_prev) > 4 CX_prev) > 4
The use of the window counter option can help the receiver to The use of the window counter option can help the receiver to
disambiguate multiple losses after a sudden decrease in the actual disambiguate multiple losses after a sudden decrease in the actual
round-trip time. When the sender receives an acknowledgement round-trip time. When the sender receives an acknowledgement
acknowledging a data packet with window counter i, the sender can acknowledging a data packet with window counter i, the sender
increase its window counter, if necessary, so that subsequent data increases its window counter, if necessary, so that subsequent data
packets are sent with window counter values of at least i+4. This packets are sent with window counter values of at least i+4. This
can help minimize errors on the part of the receiver of incorrectly can help minimize errors on the part of the receiver of incorrectly
interpreting multiple loss events as a single loss event. interpreting multiple loss events as a single loss event.
As an alternative to the window counter option, the sender could As an alternative to the window counter option, the sender could
have sent its estimate of the round-trip time to the receiver have sent its estimate of the round-trip time to the receiver
directly in a round-trip time option, and the receiver should use directly in a round-trip time option, and the receiver should use
the sender's round-trip time estimate to infer when multiple lost or the sender's round-trip time estimate to infer when multiple lost or
marked packets belong in the same loss event. A round-trip time marked packets belong in the same loss event. In some respects, a
option would in some ways give a more precise encoding of the round-trip time option gives a more precise encoding of the sender's
sender's round-trip time estimate than would a window counter round-trip time estimate than does the window counter option.
option. However, the window counter option conveys information However, the window counter option conveys information about the
about the relative *sending* times for packets, while the receiver relative *sending* times for packets, while the receiver could only
could only use a round-trip time option to distinguish between the use the round-trip time option to distinguish between the relative
relative *receive* times (in the absence of timestamps). That is, *receive* times (in the absence of timestamps). That is, the window
the window counter option will give more robust performance in some counter option will give more robust performance in some cases when
cases when there is a large variation in delay for packets sent there is a large variation in delay for packets sent within a window
within a window of data. As a slightly more speculative of data. As a slightly more speculative consideration, the round-
consideration, a round-trip time option could possibly be used more trip time option could possibly be used more easily by middleboxes
easily by middleboxes attempting to verify that a flow was using attempting to verify that a flow was using conformant end-to-end
conformant end-to-end congestion control. congestion control.
8.2. Sending Feedback Packets
The window counter option is also used by the receiver to decide
when to send feedback packets. Feedback packets should normally be
sent at least once per round-trip time, if the sender is sending at
least one data packet per round-trip time. Whenever the receiver
sends a feedback message, the receiver sets a local variable
last_counter to the highest received value of the window counter
since the last feedback message was sent, if any data packets have
been received since the last feedback message was sent. If the
receiver receives a data packet with a window counter value greater
than last_counter + 4, then the receiver sends a new feedback
packet.
The TFRC protocol [1] specifies that the receiver uses a feedback
timer to decide when to send feedback packets. In the TFRC
protocol, when the feedback timer expires, the receiver resets the
timer to expire after R_m seconds, where R_m is the most recent
estimate of the round-trip time received by the receiver from the
sender. However, when the window counter option is used, the
receiver can use information from the window counter option in
deciding when to send feedback packets.
When the sender is sending less than one packet per round-trip time,
then the receiver sends a feedback packet after each data packet,
and the feedback timer is not required. Similarly, when the sender
is sending several packets per round-trip time, then the receiver
will send a feedback packet each time that a data packet arrives
with a window counter more than four greater than the window counter
when the last feedback packet was sent, and again the feedback
counter is not required. Similarly, the receiver always sends a
feedback packet after the detection of a loss event. Thus, the
feedback timer is not absolutely necessary when the window counter
is used.
However, the feedback timer still could be useful in some rare cases
to prevent the sender from unnecessarily halving its sending rate.
We have not considered this in detail. Consider the case when the
receiver receives data soon after the most recent feedback packet
has been sent, but has received no data packets with a window
counter sufficiently large to trigger sending a new feedback packet.
The TFRC protocol specifies that after a feedback packet is
received, the sender sets a nofeedback timer to at least four times
the round-trip time estimate. If the sender doesn't receive any
feedback packets before the nofeedback timer expires, then the
sender halves its sending rate. One could construct scenarios where
the use of a feedback timer at the receiver would prevent the
unnecessary expiration of the nofeedback timer at the sender.
For implementors who wish to implement a feedback timer for the data
receiver, we suggest estimating the round-trip time from the most
recent data packet as follows: Let K be the window counter from the
most recent data packet, and let T_k be the time that that packet
was received. Let J be the highest window counter received that was
less than K-4, and let T_j be the most recent time that such a
packet was received. Then the round-trip time can be very roughly
estimated as 4 (T_k-T_j)/(K-J).
9. Thanks 9. Thanks
We thank Mark Handley for his help in defining CCID 3. We thank Mark Handley for his help in defining CCID 3. We thank
Sara Karlberg and Yufei Wang for feedback on an earlier version of
this document.
10. References 10. References
[1] M. Handley, J. Padhye, and S. Floyd. TCP Friendly Rate Control [1] M. Handley, J. Padhye, and S. Floyd. TCP Friendly Rate Control
(TFRC): Protocol Specification. draft-ietf-tsvwg-tfrc-02.txt, (TFRC): Protocol Specification, draft-ietf-tsvwg-tfrc-04.txt,
work in progress. work in progress, April 2002.
[2] J. Padhye, V. Firoiu, D. Towsley, and J. Kurose. Modeling TCP [2] J. Padhye, V. Firoiu, D. Towsley, and J. Kurose. Modeling TCP
Throughput: A Simple Model and its Empirical Validation. Proc Throughput: A Simple Model and its Empirical Validation. Proc
ACM SIGCOMM 1998. ACM SIGCOMM 1998.
[3] E. Kohler, M. Handley, S. Floyd, and J. Padhye. Datagram [3] E. Kohler, M. Handley, S. Floyd, and J. Padhye. Datagram
Congestion Control Protocol. Work in progress. Congestion Control Protocol, draft-kohler-dcp-02.txt, work in
progress, March 2002.
[4] David Wetherall, David Ely, and Neil Spring. Robust ECN [4] Neil Spring, David Wetherall, and David Ely. Robust ECN
Signaling with Nonces. draft-ietf-tsvwg-tcp-nonce-02.txt, work Signaling with Nonces, draft-ietf-tsvwg-tcp-nonce-03.txt, work
in progress. in progress, April 2002.
[5] S. Floyd, E. Kohler. Profile for DCCP Congestion Control ID 2: [5] S. Floyd, E. Kohler. Profile for DCCP Congestion Control ID 2:
TCP-like Congestion Control. Work in progress. TCP-like Congestion Control, draft-floyd-dcp-ccid2-03.txt, work
in progress, May 2002.
[6] K.K. Ramakrishnan, S. Floyd, and D. Black. The Addition of [6] K.K. Ramakrishnan, S. Floyd, and D. Black. The Addition of
Explicit Congestion Notification (ECN) to IP. RFC 3168. Explicit Congestion Notification (ECN) to IP. RFC 3168.
September 2001. September 2001.
11. Authors' Addresses 11. Authors' Addresses
Jitendra Padhye <padhye@microsoft.com> Jitendra Padhye <padhye@microsoft.com>
Microsoft Research Microsoft Research
 End of changes. 20 change blocks. 
56 lines changed or deleted 122 lines changed or added

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