| Internet Engineering Task Force                              Sally Floyd    |  | 
| INTERNET-DRAFT                                                      ICIR    |  | 
| draft-ietf-dccp-ccid2-09.txt                                Eddie Kohler  | draft-ietf-dccp-ccid2-08.txt                                Eddie Kohler | 
| Expires: 7 September 2005                                           UCLA  | Expires: 14 May 2005                                                UCLA | 
|                                                             7 March 2005  |                                                         14 November 2004 | 
|                                                                             |  | 
|                                                                             |  | 
|                Profile for DCCP Congestion Control ID 2:                    |  | 
|                       TCP-like Congestion Control                           |  | 
|                                                                             |  | 
|                                                                             |  | 
| Status of this Memo                                                         |  | 
|                                                                             |  | 
|     This document is an Internet-Draft and is subject to all provisions     |  | 
|     of section 3 of RFC 3667. By submitting this Internet-Draft, each       |  | 
|     author represents that any applicable patent or other IPR claims of     |  | 
|     which he or she is aware have been or will be disclosed, and any of     |  | 
|     which he or she become aware will be disclosed, in accordance with      |  | 
|     RFC 3668.                                                               |  | 
|                                                                             |  | 
|     Internet-Drafts are working documents of the Internet Engineering       |  | 
|     Task Force (IETF), its areas, and its working groups.  Note that        |  | 
|     other groups may also distribute working documents as Internet-         |  | 
|     Drafts.                                                                 |  | 
|                                                                             |  | 
|     Internet-Drafts are draft documents valid for a maximum of six          |  | 
|     months and may be updated, replaced, or obsoleted by other documents    |  | 
|     at any time.  It is inappropriate to use Internet-Drafts as             |  | 
|     reference material or to cite them other than as "work in progress."    |  | 
|                                                                             |  | 
|     The list of current Internet-Drafts can be accessed at                  |  | 
|     http://www.ietf.org/ietf/1id-abstracts.txt.                             |  | 
|                                                                             |  | 
|     The list of Internet-Draft Shadow Directories can be accessed at        |  | 
|     http://www.ietf.org/shadow.html.                                        |  | 
|                                                                             |  | 
|     This Internet-Draft will expire on 7 September 2005.                  |     This Internet-Draft will expire on 14 May 2005.                    | 
|                                                                             |  | 
| Copyright Notice                                                            |  | 
|                                                                             |  | 
|     Copyright (C) The Internet Society (2004). All Rights Reserved.         |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler                                                    [Page 1]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT          Expires: 7 September 2005             March 2005    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     TO BE DELETED BY THE RFC EDITOR UPON PUBLICATION:                       |  | 
|                                                                             |  | 
|     Changes from draft-ietf-dccp-ccid2-07.txt:                              |  | 
|                                                                             |  | 
|     * Restrict the use of byte-counting to be at most as aggressive         |  | 
|       as the current TCP (without byte-counting).                           |  | 
|                                                                             |  | 
|     Changes from draft-ietf-dccp-ccid2-06.txt:                              |  | 
|                                                                             |  | 
|     * Moved three citations to Informational.                               |  | 
|                                                                             |  | 
|     * Added that "The sender SHOULD not attempt Ack Ratio                   |  | 
|       renegotiations more than once per round-trip time."                   |  | 
|                                                                             |  | 
|     * Specified that ssthresh is never less than two, instead of one.       |  | 
|                                                                             |  | 
|     * Added references to RFC 2988 and RFC 2018.                            |  | 
|                                                                             |  | 
|     * Specify that the congestion window is only increased for packets      |  | 
|     that aren't ECN-marked.                                                 |  | 
|                                                                             |  | 
|     Changes from draft-ietf-dccp-ccid2-05.txt:                              |  | 
|                                                                             |  | 
|     * Changes to the discussion about how the sender infers that DCCP-      |  | 
|     Ack packets are lost.  The sender does not know for sure whether a      |  | 
|     missing sequence number is for a dropped ACK packet or a dropped        |  | 
|     data packet.  Our changes include a new appendix on "The Costs of       |  | 
|     Inferring Lost Ack Packets".                                            |  | 
|                                                                             |  | 
|     * Minor editing for clarity, including some reordering of sections.     |  | 
|                                                                             |  | 
|     * Added a section on response to idle and application-limited           |  | 
|     periods.                                                                |  | 
|                                                                             |  | 
|     * Clarifications on changing the Ack Ratio, based on feedback from      |  | 
|     Nils-Erik Mattsson.                                                     |  | 
|                                                                             |  | 
|     Changes from draft-ietf-dccp-ccid2-04.txt:                              |  | 
|                                                                             |  | 
|     * Minor editing, as follows:                                            |  | 
|       - Added a note that CCID2 implementations MAY check for apps that     |  | 
|     are                                                                     |  | 
|         gaming with regard to the packet size.                              |  | 
|       - Deleted a statement that the maximum packet size is 1500 bytes.     |  | 
|       - Added that the receiver MAY know the round-trip time from its       |  | 
|     role as                                                                 |  | 
|       - Added a note that the initial cwnd is up to four packets.           |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler                                                    [Page 3]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT          Expires: 7 September 2005             March 2005    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     * Added Intellectual Property Notice.                                   |  | 
|                                                                             |  | 
|     Changes from draft-ietf-dccp-ccid2-03.txt:                              |  | 
|                                                                             |  | 
|     * Disallow direct tracking of TCP standards.                            |  | 
|                                                                             |  | 
|     Changes from draft-ietf-dccp-ccid2-02.txt:                              |  | 
|                                                                             |  | 
|     * Added to the section on application requirements.                     |  | 
|                                                                             |  | 
|     * Changed the default Ack Ratio to be two, as recommended for TCP.      |  | 
|                                                                             |  | 
|     * Added a paragraph about packet sizes.                                 |  | 
|                                                                             |  | 
|     Changes from draft-ietf-dccp-ccid2-01.txt:                              |  | 
|                                                                             |  | 
|     * Added "Security Considerations" and "IANA Considerations"             |  | 
|     sections.                                                               |  | 
|                                                                             |  | 
|     * Refer explicitly to SACK-based TCP, and flesh out Section 3           |  | 
|     ("Congestion Control on Data Packets").                                 |  | 
|                                                                             |  | 
|     * When cwnd < ssthresh, increase cwnd by one per newly acknowledged     |  | 
|     packet up to some limit, in line with TCP Appropriate Byte Counting.    |  | 
|                                                                             |  | 
|     * Refined definition of quiescence.                                     |  | 
|                                                                             |  | 
|     Changes from draft-ietf-dccp-ccid2-00.txt:                              |  | 
|                                                                             |  | 
|     * Said that the Acknowledgement Number reports the largest sequence     |  | 
|     number, not the most recent packet, for consistency with draft-ietf-    |  | 
|     dccp-spec.                                                              |  | 
|                                                                             |  | 
|     * Added notes about ECN nonces for acknowledgements, and about          |  | 
|     dealing with piggybacked acknowledgements.                              |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler                                                    [Page 4]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT          Expires: 7 September 2005             March 2005    |  | 
|                                                                             |  | 
|                                                                             |  | 
|                              Table of Contents                              |  | 
|                                                                             |  | 
|     1. Introduction. . . . . . . . . . . . . . . . . . . . . . . . .   6    |  | 
|     2. Conventions and Notation. . . . . . . . . . . . . . . . . . .   6    |  | 
|     3. Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . .   6    |  | 
|        3.1. Relationship with TCP. . . . . . . . . . . . . . . . . .   7    |  | 
|        3.2. Example Half-Connection. . . . . . . . . . . . . . . . .   7    |  | 
|     4. Connection Establishment. . . . . . . . . . . . . . . . . . .   9    |  | 
|     5. Congestion Control on Data Packets. . . . . . . . . . . . . .   9    |  | 
|        5.1. Response to Idle and Application-limited                        |  | 
|        Periods . . . . . . . . . . . . . . . . . . . . . . . . . . .  11    |  | 
|        5.2. Response to Data Dropped and Slow Receiver . . . . . . .  12    |  | 
|        5.3. Packet Size. . . . . . . . . . . . . . . . . . . . . . .  12    |  | 
|     6. Acknowledgements. . . . . . . . . . . . . . . . . . . . . . .  13  |     6. Acknowledgements. . . . . . . . . . . . . . . . . . . . . . .  12 | 
|        6.1. Congestion Control on Acknowledgements . . . . . . . . .  13    |  | 
|           6.1.1. Detecting Lost and Marked                                  |  | 
|           Acknowledgements . . . . . . . . . . . . . . . . . . . . .  13    |  | 
|           6.1.2. Changing Ack Ratio. . . . . . . . . . . . . . . . .  14    |  | 
|        6.2. Acknowledgements of Acknowledgements . . . . . . . . . .  15    |  | 
|           6.2.1. Determining Quiescence. . . . . . . . . . . . . . .  15    |  | 
|     7. Explicit Congestion Notification. . . . . . . . . . . . . . .  16  |     7. Explicit Congestion Notification. . . . . . . . . . . . . . .  15 | 
|     8. Options and Features. . . . . . . . . . . . . . . . . . . . .  16    |  | 
|     9. Security Considerations . . . . . . . . . . . . . . . . . . .  16    |  | 
|     10. IANA Considerations. . . . . . . . . . . . . . . . . . . . .  16    |  | 
|        10.1. Reset Codes . . . . . . . . . . . . . . . . . . . . . .  17  |        10.1. Reset Codes . . . . . . . . . . . . . . . . . . . . . .  16 | 
|        10.2. Option Types. . . . . . . . . . . . . . . . . . . . . .  17    |  | 
|        10.3. Feature Numbers . . . . . . . . . . . . . . . . . . . .  17    |  | 
|     11. Thanks . . . . . . . . . . . . . . . . . . . . . . . . . . .  17    |  | 
|     A. Appendix: Derivation of Ack Ratio Decrease. . . . . . . . . .  18  |     A. Appendix: Derivation of Ack Ratio Decrease. . . . . . . . . .  17 | 
|     B. Appendix: Cost of Loss Inference Mistakes to Ack                     |  | 
|     Ratio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  18    |  | 
|     Normative References . . . . . . . . . . . . . . . . . . . . . .  20    |  | 
|     Informative References . . . . . . . . . . . . . . . . . . . . .  21  |     Informative References . . . . . . . . . . . . . . . . . . . . .  20 | 
|     Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . .  21    |  | 
|     Full Copyright Statement . . . . . . . . . . . . . . . . . . . .  21    |  | 
|     Intellectual Property. . . . . . . . . . . . . . . . . . . . . .  22  |     Intellectual Property. . . . . . . . . . . . . . . . . . . . . .  21 | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler                                                    [Page 5]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT          Expires: 7 September 2005             March 2005    |  | 
|                                                                             |  | 
|                                                                             |  | 
| 1.  Introduction                                                            |  | 
|                                                                             |  | 
|     This document contains the profile for Congestion Control Identifier    |  | 
|     2, TCP-like Congestion Control, in the Datagram Congestion Control      |  | 
|     Protocol (DCCP) [DCCP].  DCCP uses Congestion Control Identifiers,      |  | 
|     or CCIDs, to specify the congestion control mechanism in use on a       |  | 
|     half-connection.                                                        |  | 
|                                                                             |  | 
|     The TCP-like Congestion Control CCID sends data using a close           |  | 
|     variant of TCP's congestion control mechanisms, incorporating           |  | 
|     selective acknowledgements (SACK) [RFC 2018, RFC 3517].  CCID 2 is    |     selective acknowledgements (SACK) [RFC 2018] [RFC 3517].  CCID 2 is | 
|     suitable for senders who can adapt to the abrupt changes in             |  | 
|     congestion window typical of TCP's Additive Increase Multiplicative     |  | 
|     Decrease (AIMD) congestion control, and particularly useful for         |  | 
|     senders who would like to take advantage of the available bandwidth     |  | 
|     in an environment with rapidly changing conditions.  See Section 3      |  | 
|     for more on application requirements.                                   |  | 
|                                                                             |  | 
| 2.  Conventions and Notation                                                |  | 
|                                                                             |  | 
|     The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",     |  | 
|     "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this    |     "SHOULD", "SHOULD NOT", "RECOMMENDED",  "MAY", and "OPTIONAL" in     | 
|     document are to be interpreted as described in RFC 2119.                |     this document are to be interpreted as described in RFC 2119.        | 
|                                                                             |  | 
|     A DCCP half-connection consists of the application data sent by one     |  | 
|     endpoint and the corresponding acknowledgements sent by the other       |  | 
|     endpoint.  The terms "HC-Sender" and "HC-Receiver" denote the           |  | 
|     endpoints sending application data and acknowledgements,                |  | 
|     respectively.  Since CCIDs apply at the level of half-connections,      |  | 
|     we abbreviate HC-Sender to "sender" and HC-Receiver to "receiver" in    |  | 
|     this document.  See [DCCP] for more discussion.                         |  | 
|                                                                             |  | 
|     For simplicity, we say that senders send DCCP-Data packets and          |  | 
|     receivers send DCCP-Ack packets.  Both of these categories are meant    |  | 
|     to include DCCP-DataAck packets.                                        |  | 
|                                                                             |  | 
|     The phrases "ECN-marked" and "marked" refer to packets marked ECN     |  | 
|     Congestion Experienced unless otherwise noted.                        |  | 
|                                                                             |  | 
| 3.  Usage                                                                   |  | 
|                                                                             |  | 
|     CCID 2, TCP-like Congestion Control, is appropriate for DCCP flows      |  | 
|     that would like to receive as much bandwidth as possible over the       |  | 
|     long term, consistent with the use of end-to-end congestion control,    |  | 
|     and that can tolerate the large sending rate variations                 |  | 
|     characteristic of AIMD congestion control, including halving of the     |  | 
|     congestion window in response to a congestion event.                    |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler                                        Section 3.  [Page 6]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT          Expires: 7 September 2005             March 2005    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     Applications that simply need to transfer as much data as possible      |  | 
|     in as short a time as possible should use CCID 2.  This contrasts       |  | 
|     with CCID 3, TCP-Friendly Rate Control (TFRC) Congestion Control        |  | 
|     [CCID 3 PROFILE], which is appropriate for flows that would prefer      |  | 
|     to minimize abrupt changes in the sending rate.  For example, CCID 2    |  | 
|     is recommended over CCID 3 for streaming media applications that        |  | 
|     buffer a considerable amount of data at the application receiver        |  | 
|     before playback time, insulating the application somewhat from          |  | 
|     abrupt changes in the sending rate.  Such applications could easily     |  | 
|     choose DCCP's CCID 2 over TCP itself, possibly adding some form of      |  | 
|     selective reliability at the application layer.  CCID 2 is also         |  | 
|     recommended over CCID 3 for applications where halving the sending      |  | 
|     rate in response to congestion is not likely to interfere with          |  | 
|     application-level performance.                                          |  | 
|                                                                             |  | 
|     An additional advantage of CCID 2 is that its TCP-like congestion       |  | 
|     control mechanisms are reasonably well-understood, with traffic         |  | 
|     dynamics quite similar to those of TCP.  While the network research     |  | 
|     community is still learning about the dynamics of TCP after 15 years    |  | 
|     of its being the dominant transport protocol in the Internet, some      |  | 
|     applications might prefer the more well-known dynamics of TCP-like      |  | 
|     congestion control over that of newer congestion control mechanisms,    |  | 
|     which haven't yet met the test of widespread Internet deployment.       |  | 
|                                                                             |  | 
| 3.1.  Relationship with TCP                                                 |  | 
|                                                                             |  | 
|     The congestion control mechanisms described here closely follow         |  | 
|     mechanisms standardized by the IETF for use in SACK-based TCP, and      |  | 
|     we rely partially on existing TCP documentation, such as RFC 793,     |     we rely partially on existing TCP documentation, such as [RFC 793], | 
|     RFC 2581, RFC 3465, and RFC 3517.  TCP congestion control continues |     [RFC 2581], [RFC 3465], and [RFC 3517].  TCP congestion control  | 
|     to evolve, but CCID 2 implementations SHOULD wait for explicit          |     continues to evolve, but CCID 2 implementations SHOULD wait for      | 
|     updates to CCID 2 rather than track TCP's evolution directly.  The      |     explicit updates to CCID 2 rather than track TCP's evolution         | 
|     differences between CCID 2 and straight TCP include: CCID 2 applies     |     directly.  The differences between CCID 2 and straight TCP include:  | 
|     congestion control to acknowledgements, a mechanism not currently       |     CCID 2 applies congestion control to acknowledgements, a mechanism   | 
|     standardized for use in TCP.  DCCP is a datagram protocol, so           |     not currently standardized for use in TCP.  DCCP is a datagram       | 
|     several parameters whose units are specified in bytes in TCP, such      |     protocol, so several parameters whose units are specified in bytes   | 
|     as the congestion window cwnd, have units of packets in DCCP.           |     in TCP, such as the congestion window cwnd, have units of packets in | 
|     Unreliability also leads to differences from TCP: DCCP never            |     DCCP.  Unreliability also leads to differences from TCP: DCCP never  | 
|     retransmits a packet, so congestion control mechanisms that             |  | 
|     distinguish retransmissions from new packets have been redesigned       |  | 
|     for the DCCP context.                                                   |  | 
|                                                                             |  | 
| 3.2.  Example Half-Connection                                               |  | 
|                                                                             |  | 
|     This example shows the typical progress of a half-connection using      |  | 
|     CCID 2's TCP-like Congestion Control, not including connection          |  | 
|     initiation and termination.  The example is informative, not            |  | 
|     normative.                                                              |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler                                      Section 3.2.  [Page 7]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT          Expires: 7 September 2005             March 2005    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     1.  The sender sends DCCP-Data packets, where the number of packets     |  | 
|         sent is governed by a congestion window, cwnd, as in TCP.  Each     |  | 
|         DCCP-Data packet uses a sequence number.  The sender also sends     |  | 
|         an Ack Ratio feature option specifying the number of data           |  | 
|         packets to be covered by an Ack packet from the receiver; Ack       |  | 
|         Ratio defaults to two.  The DCCP header's CCVal field is set to     |  | 
|         zero.                                                               |  | 
|                                                                             |  | 
|         Assuming that the half-connection is Explicit Congestion            |  | 
|         Notification (ECN) capable (the ECN Incapable feature is zero --    |  | 
|         the default), each DCCP-Data packet is sent as ECN-Capable with     |  | 
|         either the ECT(0) or the ECT(1) codepoint set, as described in      |  | 
|         RFC 3540.                                                         |         [RFC 3540].                                                    | 
|                                                                             |  | 
|     2.  The receiver sends a DCCP-Ack packet acknowledging the data         |  | 
|         packets for every Ack Ratio data packets transmitted by the         |  | 
|         sender.  Each DCCP-Ack packet uses a sequence number and            |  | 
|         contains an Ack Vector.  The sequence number acknowledged in a      |  | 
|         DCCP-Ack packet is that of the received packet with the highest     |  | 
|         sequence number, rather than a TCP-like cumulative                  |  | 
|         acknowledgement.                                                    |  | 
|                                                                             |  | 
|         The receiver returns the sum of received ECN Nonces via Ack         |  | 
|         Vector options, allowing the sender to probabilistically verify     |  | 
|         that the receiver is not misbehaving.  DCCP-Ack packets from the    |  | 
|         receiver are also sent as ECN-Capable, since the sender will        |  | 
|         control the acknowledgement rate in a roughly TCP-friendly way      |  | 
|         using the Ack Ratio feature.  There is little need for the          |  | 
|         receiver to verify the nonces of its DCCP-Ack packets, since the    |  | 
|         sender cannot get significant benefit from misreporting the ack     |  | 
|         mark rate.                                                          |  | 
|                                                                             |  | 
|     3.  The sender continues sending DCCP-Data packets as controlled by     |  | 
|         the congestion window.  Upon receiving DCCP-Ack packets, the        |  | 
|         sender examines their Ack Vectors to learn about marked or          |  | 
|         dropped data packets, and adjusts its congestion window             |  | 
|         accordingly.  Because this is unreliable transfer, the sender       |  | 
|         does not retransmit dropped packets.                                |  | 
|                                                                             |  | 
|     4.  Because DCCP-Ack packets use sequence numbers, the sender has       |  | 
|         some information about lost or marked DCCP-Ack packets.  The        |  | 
|         sender responds to lost or marked DCCP-Ack packets by modifying     |  | 
|         the Ack Ratio sent to the receiver.                                 |  | 
|                                                                             |  | 
|     5.  The sender acknowledges the receiver's acknowledgements at least    |  | 
|         once per congestion window.  If both half-connections are           |  | 
|         active, the sender's acknowledgement of the receiver's              |  | 
|         acknowledgements is included in the sender's acknowledgement of     |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler                                      Section 3.2.  [Page 8]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT          Expires: 7 September 2005             March 2005    |  | 
|                                                                             |  | 
|                                                                             |  | 
|         the receiver's data packets.  If the reverse-path half-             |  | 
|         connection is quiescent, the sender sends a DCCP-DataAck packet     |  | 
|         that includes an Acknowledgement Number in the header.              |  | 
|                                                                             |  | 
|     6.  The sender estimates round-trip times, either through keeping       |  | 
|         track of acknowledgement round-trip times as TCP does or through    |  | 
|         explicit Timestamp options, and calculates a TimeOut (TO) value     |  | 
|         much as the RTO (Retransmit Timeout) is calculated in TCP.  The     |  | 
|         TO is used to determine when a new DCCP-Data packet can be          |  | 
|         transmitted when the sender has been limited by the congestion      |  | 
|         window and no feedback has been received from the receiver.         |  | 
|                                                                             |  | 
| 4.  Connection Establishment                                                |  | 
|                                                                             |  | 
|     Use of the Ack Vector is MANDATORY on CCID 2 half-connections, so       |  | 
|     the sender MUST send a "Change R(Send Ack Vector, 1)" option to the     |  | 
|     receiver as part of connection establishment.  The sender SHOULD NOT    |  | 
|     send data until it has received the corresponding "Confirm L(Send       |  | 
|     Ack Vector, 1)" from the receiver, except possibly for data included    |  | 
|     on the initial DCCP-Request packet.                                     |  | 
|                                                                             |  | 
| 5.  Congestion Control on Data Packets                                      |  | 
|                                                                             |  | 
|     CCID 2's congestion control mechanisms are based on those for SACK-     |  | 
|     based TCP [RFC 3517], since the Ack Vector provides all the             |  | 
|     information that might be transmitted in SACK options.                  |  | 
|                                                                             |  | 
|     A CCID 2 data sender maintains three integer parameters measured in     |  | 
|     packets.                                                                |  | 
|                                                                             |  | 
|     1.  The congestion window "cwnd", which equals the maximum number of    |  | 
|         data packets allowed in the network at any time.  ("Data packet"    |  | 
|         means any DCCP packet that contains user data: DCCP-Data, DCCP-     |  | 
|         DataAck, and occasionally DCCP-Request and DCCP-Response.)          |  | 
|                                                                             |  | 
|     2.  The slow-start threshold "ssthresh", which controls adjustments     |  | 
|         to cwnd.                                                            |  | 
|                                                                             |  | 
|     3.  The pipe value "pipe", which is the sender's estimate of the        |  | 
|         number of data packets outstanding in the network.                  |  | 
|                                                                             |  | 
|     These parameters are manipulated, and their initial values              |  | 
|     determined, according to SACK-based TCP's behavior, except that they    |  | 
|     are measured in packets, not bytes.  The rest of this section           |  | 
|     provides more specific guidance.                                        |  | 
|                                                                             |  | 
|     The sender MAY send a data packet when pipe < cwnd, but MUST NOT        |  | 
|     send a data packet when pipe >= cwnd.  Every data packet sent           |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler                                        Section 5.  [Page 9]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT          Expires: 7 September 2005             March 2005    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     increases pipe by 1.                                                    |  | 
|                                                                             |  | 
|     The sender reduces pipe as it infers that data packets have left the    |  | 
|     network, either by being received or by being dropped.  In              |  | 
|     particular:                                                             |  | 
|                                                                             |  | 
|     1.  Acked data packets.  The sender reduces pipe by 1 for each data     |  | 
|         packet newly-acknowledged as received (Ack Vector State 0 or        |  | 
|         State 1) by some DCCP-Ack.                                          |  | 
|                                                                             |  | 
|     2.  Dropped data packets.  The sender reduces pipe by 1 for each        |  | 
|         data packet it can infer as lost due to the DCCP equivalent of      |  | 
|         TCP's "duplicate acknowledgements".  This depends on the            |  | 
|         NUMDUPACK parameter, the number of duplicate acknowledgements       |  | 
|         needed to infer a loss.  The NUMDUPACK parameter is set to          |  | 
|         three, as is currently the case in TCP.  A packet P is inferred     |  | 
|         to be lost, rather than delayed, when at least NUMDUPACK packets    |  | 
|         transmitted after P have been acknowledged as received (Ack         |  | 
|         Vector State 0 or 1) by the receiver.  Note that the                |  | 
|         acknowledged packets following the hole may be DCCP-Acks or         |  | 
|         other non-data packets.                                             |  | 
|                                                                             |  | 
|     3.  Transmit timeouts.  Finally, the sender needs transmit timeouts,    |  | 
|         handled like TCP's retransmission timeouts, in case an entire       |  | 
|         window of packets is lost.  The sender estimates the round-trip     |  | 
|         time at most once per window of data, and uses the TCP              |  | 
|         algorithms for maintaining the average round-trip time, mean        |  | 
|         deviation, and timeout value [RFC 2988].  (If more than one         |  | 
|         measurement per round-trip time was used for these calculations,    |  | 
|         then the weights of the averagers would have to be adjusted, so     |  | 
|         that the average round-trip time is effectively derived from        |  | 
|         measurements over multiple round-trip times.)  Because DCCP does    |  | 
|         not retransmit data, DCCP does not require TCP's recommended        |  | 
|         minimum timeout of one second.  The exponential backoff of the      |  | 
|         timer is exactly as in TCP.  When a transmit timeout occurs, the    |  | 
|         sender sets pipe to zero.  The adjustments to cwnd and ssthresh     |  | 
|         are described below.                                                |  | 
|                                                                             |  | 
|     The sender MUST NOT decrement pipe more than once per data packet.      |  | 
|     True duplicate acknowledgements, for example, MUST NOT affect pipe.     |  | 
|     Furthermore, the sender MUST NOT decrement pipe for non-data            |  | 
|     packets, such as DCCP-Acks, even though the Ack Vector will contain     |  | 
|     information about them.                                                 |  | 
|                                                                             |  | 
|     Congestion events cause CCID 2 to reduce its congestion window.  A  |     Congestion events, namely one or more packets lost or marked from a | 
|     congestion event contains at least one lost or marked packet.  As in  |     window of data, cause CCID 2 to reduce its congestion window.  For | 
|     TCP, two losses or marks are considered to be part of a single        |     each congestion event, either indicated explicitly as an Ack Vector  | 
|     congestion event when the second packet was sent before the loss or   |     State 1 (ECN-marked) acknowledgement or inferred via "duplicate      | 
|                                                                             |     acknowledgements", cwnd is halved, then ssthresh is set to the new   | 
|                                                                             |     cwnd.  Cwnd is never reduced below one packet.  After a timeout, the | 
|                                                                             |     slow-start threshold is set to cwnd/2, then cwnd is set to one       | 
| Floyd/Kohler                                       Section 5.  [Page 10]    |     packet.  When halved, cwnd and ssthresh have their values rounded    | 
|                                                                            |  | 
| INTERNET-DRAFT          Expires: 7 September 2005             March 2005    |     down, except that cwnd is never less than one and ssthresh is never  | 
|                                                                             |     less than two.                                                       | 
|                                                                             |  | 
|     mark of the first packet was detected.  As an approximation, a        |  | 
|     sender can consider two losses or marks to be part of a single        |  | 
|     congestion event when the packets were sent within one RTT estimate   |  | 
|     of one another, using an RTT estimate current at the time the         |  | 
|     packets were sent.  For each congestion event, either indicated       |  | 
|     explicitly as an Ack Vector State 1 (ECN-marked) acknowledgement or     |  | 
|     inferred via "duplicate acknowledgements", cwnd is halved, then         |  | 
|     ssthresh is set to the new cwnd.  Cwnd is never reduced below one       |  | 
|     packet.  After a timeout, the slow-start threshold is set to cwnd/2,    |  | 
|     then cwnd is set to one packet.  When halved, cwnd and ssthresh have    |  | 
|     their values rounded down, except that cwnd is never less than one      |  | 
|     and ssthresh is never less than two.                                    |  | 
|                                                                             |  | 
|     When cwnd < ssthresh, meaning that the sender is in slow-start, the     |  | 
|     congestion window is increased by one packet for every two newly        |  | 
|     acknowledged data packets with Ack Vector State 0 (not ECN-marked),     |  | 
|     up to a maximum of Ack Ratio/2 packets per acknowledgement.  This is    |  | 
|     a modified form of Appropriate Byte Counting [RFC 3465] that is         |  | 
|     consistent with TCP's current standard (which does not include byte-    |  | 
|     counting), but allows CCID 2 to increase as aggressively as TCP when    |  | 
|     CCID-2's Ack Ratio is greater than the default value of two.  When      |  | 
|     cwnd >= ssthresh, the congestion window is increased by one packet      |  | 
|     for every window of data acknowledged without lost or marked            |  | 
|     packets.  The cwnd parameter is initialized to at most four packets     |  | 
|     for new connections, following the rules from RFC 3390; the ssthresh    |  | 
|     parameter is initialized to an arbitrarily high value.                  |  | 
|                                                                             |  | 
|     Senders MAY use a form of rate-based pacing when sending multiple       |  | 
|     data packets liberated by a single ack packet, rather than sending      |  | 
|     all liberated data packets in a single burst.                           |  | 
|                                                                             |  | 
| 5.1.  Response to Idle and Application-limited Periods                      |  | 
|                                                                             |  | 
|     CCID 2 is designed to follow TCP's congestion control mechanisms to     |  | 
|     the extent possible, but TCP does not have complete standardization     |  | 
|     for its congestion control response to idle periods (when no data       |  | 
|     packets are sent) or to application-limited periods (when the           |  | 
|     sending rate is less than that allowed by cwnd).  This section is a     |  | 
|     brief guide to the standards for TCP in this area.                      |  | 
|                                                                             |  | 
|     For idle periods, RFC 2581 recommends that the TCP sender SHOULD        |  | 
|     slow-start after an idle period, where an idle period is defined as     |  | 
|     a period exceeding the timeout interval.  RFC 2861, currently           |  | 
|     Experimental, suggests a slightly more moderate mechanism where the     |  | 
|     congestion window is halved for every round-trip time that the          |  | 
|     sender has remained idle.                                               |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler                                     Section 5.1.  [Page 11]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT          Expires: 7 September 2005             March 2005    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     There are currently no standards governing TCP's use of the             |  | 
|     congestion window during an application-limited period.  In             |  | 
|     particular, it is possible for TCP's congestion window to grow quite    |  | 
|     large during a long uncongested period when the sender is               |  | 
|     application-limited, sending at a low rate.  RFC 2861 essentially       |  | 
|     suggests that TCP's congestion window not be increased during           |  | 
|     application-limited periods, when the congestion window is not being    |  | 
|     fully utilized.                                                         |  | 
|                                                                             |  | 
| 5.2.  Response to Data Dropped and Slow Receiver                            |  | 
|                                                                             |  | 
|     As described in [DCCP], the Data Dropped option lets an endpoint        |  | 
|     declare that a packet was dropped at the end host before delivery to    |  | 
|     the application -- for instance, because of corruption or receive       |  | 
|     buffer overflow.  CCID 2 senders respond to these options as            |  | 
|     described in [DCCP], with the following further clarifications.         |  | 
|                                                                             |  | 
|     o  Drop Code 2 ("receive buffer drop").  The congestion window          |  | 
|        "cwnd" is reduced by one for each packet newly acknowledged as       |  | 
|        Drop Code 2, except that it is never reduced below one.              |  | 
|                                                                             |  | 
|     o  Exiting slow-start.  The sender MUST exit slow start whenever it     |  | 
|        receives a relevant Data Dropped or Slow Receiver option.            |  | 
|                                                                             |  | 
| 5.3.  Packet Size                                                           |  | 
|                                                                             |  | 
|     CCID 2 is optimized for applications that generally use a fixed         |  | 
|     packet size, and that vary their sending rate in packets per second     |  | 
|     in response to congestion.  CCID 2 is not appropriate for               |  | 
|     applications that require a fixed interval of time between packets,     |  | 
|     and vary their packet size instead of their packet rate in response     |  | 
|     to congestion.  CCID 2 maintains a congestion window in packets, and    |  | 
|     does not increase the congestion window in response to a decrease in    |  | 
|     the packet size.  However, some attention might be required for         |  | 
|     applications using CCID 2 that vary their packet size not in            |  | 
|     response to congestion, but in response to other application-level      |  | 
|     requirements.                                                           |  | 
|                                                                             |  | 
|     CCID 2 implementations MAY check for applications that appear to be     |  | 
|     manipulating the packet size inappropriately.  For example, an          |  | 
|     application might send small packets for a while, building up a fast    |  | 
|     rate, then switch to large packets to take advantage of the fast        |  | 
|     rate.  (Preliminary simulations indicate that applications may not      |  | 
|     be able to increase their overall transfer rates this way, so it is     |  | 
|     not clear this manipulation will occur in practice [V03].)              |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler                                     Section 5.3.  [Page 12]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT          Expires: 7 September 2005             March 2005    |  | 
|                                                                             |  | 
|                                                                             |  | 
| 6.  Acknowledgements                                                        |  | 
|                                                                             |  | 
|     CCID 2 acknowledgements are generally paced by the sender's data        |  | 
|     packets.  Each required acknowledgement MUST contain Ack Vector         |  | 
|     options that declare exactly which packets arrived, and whether         |  | 
|     those packets were ECN-marked.  Acknowledgement data in the Ack         |  | 
|     Vector options SHOULD generally cover the receiver's entire             |  | 
|     Acknowledgement Window; see [DCCP] (Section 11.4.2).                |     Acknowledgement Window (Section 11.4.2 of [DCCP]).               | 
|                                                                             |  | 
|     CCID 2 senders use DCCP's Ack Ratio feature to influence the rate at    |  | 
|     which DCCP-Ack packets are generated, thus controlling reverse-path     |  | 
|     congestion.  This differs from TCP, which presently has no              |  | 
|     congestion control for pure acknowledgement traffic.  CCID 2's          |  | 
|     reverse-path congestion control does not try to be TCP-friendly; it     |  | 
|     just tries to avoid congestion collapse, and to be somewhat better      |  | 
|     than TCP in the presence of a high packet loss or mark rate on the      |  | 
|     reverse path.  The default Ack Ratio is two, and CCID 2 with this       |  | 
|     Ack Ratio behaves like TCP with delayed acks.  [DCCP] (Section 11.3)  |     Ack Ratio behaves like TCP with delayed acks.  Section 11.3 of     | 
|     describes the Ack Ratio in more detail, including its relationship      |     [DCCP] describes the Ack Ratio in more detail, including its         | 
|     to acknowledgement pacing and DCCP-DataAck packets.  Section 6.1.1      |     relationship to acknowledgement pacing and DCCP-DataAck packets.     | 
|     below describes the sender's detection of lost or marked                |     Section 6.1.1 below describes the sender's detection of lost or      | 
|     acknowledgements, and Section 6.1.2 gives the sender's rules for        |     marked acknowledgements, and Section 6.1.2 gives the sender's rules  | 
|     changing the Ack Ratio.                                                 |     for changing the Ack Ratio.                                          | 
|                                                                             |  | 
| 6.1.  Congestion Control on Acknowledgements                                |  | 
|                                                                             |  | 
|     When Ack Ratio is R, the receiver sends one DCCP-Ack packet per R       |  | 
|     data packets, more or less.  Since the sender sends cwnd data           |  | 
|     packets per round-trip time, the acknowledgement rate equals cwnd/R     |  | 
|     DCCP-Acks per round-trip time.  The sender keeps the acknowledgement    |  | 
|     rate roughly TCP-friendly by monitoring the acknowledgement stream      |  | 
|     for lost and marked DCCP-Ack packets, and modifying R accordingly.      |  | 
|     For every RTT containing a DCCP-Ack congestion event (that is, a        |  | 
|     lost or marked DCCP-Ack), the sender halves the acknowledgement rate    |  | 
|     by doubling Ack Ratio; for every RTT containing no DCCP-Ack             |  | 
|     congestion event, it additively increases the acknowledgement rate      |  | 
|     through gradual decreases in Ack Ratio.                                 |  | 
|                                                                             |  | 
| 6.1.1.  Detecting Lost and Marked Acknowledgements                          |  | 
|                                                                             |  | 
|     All packets from the receiver contain sequence numbers, so the          |  | 
|     sender can detect both losses and marks on the receiver's packets.      |  | 
|     The sender infers receiver packet loss in the same way as it infers     |  | 
|     losses of its data packets: a packet from the receiver is considered    |  | 
|     lost after at least NUMDUPACK packets with greater sequence numbers     |  | 
|     have been received.                                                     |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler                                   Section 6.1.1.  [Page 13]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT          Expires: 7 September 2005             March 2005    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     DCCP-Ack packets are generally small, so they might impose less load    |  | 
|     on congested network links than DCCP-Data and DCCP-DataAck packets.     |  | 
|     For this reason, Ack Ratio depends on losses and marks on the           |  | 
|     receiver's non-data packets, not on aggregate losses and marks on       |  | 
|     all of the receiver's packets.  The non-data packet category            |  | 
|     consists of those packet types that cannot carry application data:      |  | 
|     DCCP-Ack, DCCP-Close, DCCP-CloseReq, DCCP-Reset, DCCP-Sync, and         |  | 
|     DCCP-SyncAck.  The sender can easily distinguish non-data marks from    |  | 
|     other marks.  This is harder for losses, though, since the sender       |  | 
|     can't always know whether a lost packet carried data.  Unless it has    |  | 
|     better information, the sender SHOULD assume, for the purpose of Ack    |  | 
|     Ratio calculation, that every lost packet was a non-data packet.        |  | 
|     Better information is available via DCCP's NDP Count option, if         |  | 
|     necessary.  (Appendix B discusses the costs of mistaking data packet    |  | 
|     loss for non-data packet loss.)                                         |  | 
|                                                                             |  | 
|     A receiver that implements its own acknowledgement congestion           |  | 
|     control SHOULD NOT reduce its DCCP-Ack acknowledgement rate due to      |  | 
|     losses or marks on its data packets.                                    |  | 
|                                                                             |  | 
| 6.1.2.  Changing Ack Ratio                                                  |  | 
|                                                                             |  | 
|     Ack Ratio always meets three constraints: (1) Ack Ratio is an           |  | 
|     integer.  (2) Ack Ratio does not exceed cwnd/2, rounded up, except      |  | 
|     that Ack Ratio 2 is always acceptable.  (3) Ack Ratio is two or more    |  | 
|     for a congestion window of four or more packets.                        |  | 
|                                                                             |  | 
|     The sender changes Ack Ratio within those constraints as follows.       |  | 
|     For each congestion window of data with lost or marked DCCP-Ack         |  | 
|     packets, Ack Ratio is doubled; and for each cwnd/(R^2 - R)              |  | 
|     consecutive congestion windows of data with no lost or marked DCCP-     |  | 
|     Ack packets, Ack Ratio is decreased by 1.  (See Appendix A for the      |  | 
|     derivation.)  Changes in Ack Ratio are signalled through feature        |  | 
|     negotiation; see [DCCP] (Section 11.3).                               |     negotiation; see Section 11.3 of [DCCP].                           | 
|                                                                             |  | 
|     For a constant congestion window, this gives an Ack sending rate        |  | 
|     that is roughly TCP-friendly.  Of course, cwnd usually varies over      |  | 
|     time; the dynamics will be rather complex, but roughly TCP-friendly.    |  | 
|     We recommend that the sender use the most recent value of cwnd when     |  | 
|     determining whether to decrease Ack Ratio by 1.                         |  | 
|                                                                             |  | 
|     The sender need not keep Ack Ratio completely up to date.  For          |  | 
|     instance, it MAY rate-limit Ack Ratio renegotiations to once every      |  | 
|     four or five round-trip times, or to once every second or two.  The     |  | 
|     sender SHOULD NOT attempt to renegotiate the Ack Ratio more than        |  | 
|     once per round-trip time.  Additionally, it MAY bound Ack Ratio         |  | 
|     below by two, or it MAY set Ack Ratio to one for half-connections       |  | 
|     with persistent congestion windows of 1 or 2 packets.                   |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler                                   Section 6.1.2.  [Page 14]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT          Expires: 7 September 2005             March 2005    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     Putting it all together, the receiver always sends at least one         |  | 
|     acknowledgement per window of data when cwnd = 1, and at least two      |  | 
|     acknowledgements per window of data otherwise.  Thus, the receiver      |  | 
|     could be sending two ack packets per window of data even in the face    |  | 
|     of very heavy congestion on the reverse path.  We would note,           |  | 
|     however, that if congestion is sufficiently heavy that all of the       |  | 
|     ack packets are dropped, then the sender falls back on an               |  | 
|     exponentially-backed-off timeout, as in TCP.  Thus, if congestion is    |  | 
|     sufficiently heavy on the reverse path, then the sender reduces its     |  | 
|     sending rate on the forward path, which reduces the rate on the         |  | 
|     reverse path as well.                                                   |  | 
|                                                                             |  | 
| 6.2.  Acknowledgements of Acknowledgements                                  |  | 
|                                                                             |  | 
|     An active sender DCCP A MUST occasionally acknowledge its peer DCCP     |  | 
|     B's acknowledgements, so that DCCP B can free up Ack Vector state.      |  | 
|     When both half-connections are active, A's acknowledgements of B's      |  | 
|     acknowledgements are automatically contained in A's acknowledgements    |  | 
|     of B's data. If the B-to-A half-connection is quiescent, however,       |  | 
|     DCCP A must occasionally send acknowledgements proactively, such as     |  | 
|     by sending a DCCP-DataAck packet that includes an Acknowledgement       |  | 
|     Number in the header.                                                   |  | 
|                                                                             |  | 
|     An active sender SHOULD acknowledge the receiver's acknowledgements     |  | 
|     at least once per congestion window. Of course, the sender's            |  | 
|     application might fall silent.  This is no problem; when neither        |  | 
|     side is sending data, a sender can wait arbitrarily long before         |  | 
|     sending an ack.                                                         |  | 
|                                                                             |  | 
| 6.2.1.  Determining Quiescence                                              |  | 
|                                                                             |  | 
|     This section describes how a CCID 2 receiver determines that the    |     This section refers to quiescence in the DCCP sense (see Section   | 
|     corresponding sender is not sending any data, and therefore has gone  |     11.1 of [DCCP]): How does a CCID 2 receiver determine that the   | 
|     quiescent.  See [DCCP] (Section 11.1) for general information on      |     corresponding sender is not sending any data?                      | 
|     quiescence.                                                           |  | 
|                                                                             |  | 
|     Let T equal the greater of 0.2 seconds and two round-trip times.        |  | 
|     (The receiver may know the round-trip time in its role as the sender    |  | 
|     for the other half-connection.  If it does not, it should use a         |  | 
|     default RTT of 0.2 seconds, as described in [DCCP] (Section 3.4).)    |     default RTT of 0.2 seconds, as described in Section 3.4 of [DCCP].) | 
|     Once the sender acknowledges the receiver's Ack Vectors, and the        |  | 
|     sender has not sent additional data for at least T seconds, the         |  | 
|     receiver can infer that the sender is quiescent.  More precisely,       |  | 
|     the receiver infers that the sender has gone quiescent when at least    |  | 
|     T seconds have passed without receiving any data from the sender,       |  | 
|     and the sender has acknowledged receiver Ack Vectors covering all       |  | 
|     data packets received at the receiver.                                  |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler                                   Section 6.2.1.  [Page 15]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT          Expires: 7 September 2005             March 2005    |  | 
|                                                                             |  | 
|                                                                             |  | 
| 7.  Explicit Congestion Notification                                        |  | 
|                                                                             |  | 
|     CCID 2 supports Explicit Congestion Notification (ECN) [RFC 3168].      |  | 
|     The sender will use the ECN Nonce for data packets, and the receiver    |  | 
|     will echo those nonces in its Ack Vectors, as specified in [DCCP]     |     will echo those nonces in its Ack Vectors, as specified in Section | 
|     (Section 12.2).  Information about marked packets is also returned    |     12.2 of [DCCP].  Information about marked packets is also returned | 
|     in the Ack Vector.  Because the information in the Ack Vector is        |  | 
|     reliably transferred, DCCP does not need the TCP flags of ECN-Echo      |  | 
|     and Congestion Window Reduced.                                          |  | 
|                                                                             |  | 
|     For unmarked data packets, the receiver computes the ECN Nonce Echo     |  | 
|     as in RFC 3540, and returns it as part of its Ack Vector options.     |     as in [RFC 3540], and returns it as part of its Ack Vector options. | 
|     The sender SHOULD check these ECN Nonce Echoes against the expected     |  | 
|     values, thus protecting against the accidental or malicious             |  | 
|     concealment of marked packets.                                          |  | 
|                                                                             |  | 
|     Because CCID 2 acknowledgements are congestion-controlled, ECN may      |  | 
|     also be used for its acknowledgements.  In this case we do not make     |  | 
|     use of the ECN Nonce, because it would not be easy to provide           |  | 
|     protection against the concealment of marked ack packets by the         |  | 
|     sender, and because the sender does not have much motivation for        |  | 
|     lying about the mark rate on acknowledgements.                          |  | 
|                                                                             |  | 
| 8.  Options and Features                                                    |  | 
|                                                                             |  | 
|     DCCP's Ack Vector option, and its ECN Capable, Ack Ratio, and Send      |  | 
|     Ack Vector features, are relevant for CCID 2.                           |  | 
|                                                                             |  | 
| 9.  Security Considerations                                                 |  | 
|                                                                             |  | 
|     Security considerations for DCCP have been discussed in [DCCP], and     |  | 
|     security considerations for TCP have been discussed in RFC 2581.      |     security considerations for TCP have been discussed in [RFC 2581]. | 
|                                                                             |     [RFC 2581] discusses ways that an attacker could impair the        | 
|     RFC 2581 discusses ways that an attacker could impair the             |  | 
|     performance of a TCP connection by dropping packets, or by forging      |  | 
|     extra duplicate acknowledgements or acknowledgements for new data.      |  | 
|     We are not aware of any new security considerations created by this     |  | 
|     document in its use of TCP-like congestion control.                     |  | 
|                                                                             |  | 
| 10.  IANA Considerations                                                    |  | 
|                                                                             |  | 
|     This specification defines the value 2 in the DCCP CCID namespace       |  | 
|     managed by IANA.  This assignment is also mentioned in [DCCP].          |  | 
|                                                                             |  | 
|     CCID 2 also introduces three sets of numbers whose values should be     |  | 
|     allocated by IANA, namely CCID 2-specific Reset Codes, option types,  |     allocated by IANA.  We refer to allocation policies, such as       | 
|     and feature numbers.  These ranges will prevent any future            |     Standards Action, outlined in [RFC 2434], and most registries    | 
|     CCID 2-specific allocations from polluting DCCP's corresponding       |     reserve some values for experimental and testing use [RFC 3692].   | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler                                      Section 10.  [Page 16]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT          Expires: 7 September 2005             March 2005    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     global namespaces; see [DCCP] (Section 10.3).  However, this          |  | 
|     document makes no particular allocations from any range, except for   |  | 
|     experimental and testing use [RFC 3692].  We refer to the Standards   |  | 
|     Action policy outlined in RFC 2434.                                   |  | 
|                                                                             |  | 
| 10.1.  Reset Codes                                                          |  | 
|                                                                             |  | 
|     Each entry in the DCCP CCID 2 Reset Code registry contains a            |  | 
|     CCID 2-specific Reset Code, which is a number in the range 128-255;     |  | 
|     a short description of the Reset Code; and a reference to the RFC       |  | 
|     defining the Reset Code.  Reset Codes 184-190 and 248-254 are           |  | 
|     permanently reserved for experimental and testing use.  The             |  | 
|     remaining Reset Codes -- 128-183, 191-247, and 255 -- are currently     |  | 
|     reserved, and should be allocated with the Standards Action policy,   |     reserved, and should be allocated with the IETF Consensus policy,  | 
|     which requires IESG review and approval and standards-track IETF RFC  |     which requires RFC publication (not necessarily standards-track).  | 
|     publication.                                                          |  | 
|                                                                             |  | 
| 10.2.  Option Types                                                         |  | 
|                                                                             |  | 
|     Each entry in the DCCP CCID 2 option type registry contains a           |  | 
|     CCID 2-specific option type, which is a number in the range 128-255;    |  | 
|     the name of the option; and a reference to the RFC defining the         |  | 
|     option type.  Option types 184-190 and 248-254 are permanently          |  | 
|     reserved for experimental and testing use.  The remaining option        |  | 
|     types -- 128-183, 191-247, and 255 -- are currently reserved, and       |  | 
|     should be allocated with the Standards Action policy, which requires  |     should be allocated with the IETF Consensus policy, which requires | 
|     IESG review and approval and standards-track IETF RFC publication.  |     RFC publication (not necessarily standards-track).                 | 
|                                                                             |  | 
| 10.3.  Feature Numbers                                                      |  | 
|                                                                             |  | 
|     Each entry in the DCCP CCID 2 feature number registry contains a        |  | 
|     CCID 2-specific feature number, which is a number in the range          |  | 
|     128-255; the name of the feature; and a reference to the RFC            |  | 
|     defining the feature number.  Feature numbers 184-190 and 248-254       |  | 
|     are permanently reserved for experimental and testing use.  The         |  | 
|     remaining feature numbers -- 128-183, 191-247, and 255 -- are           |  | 
|     currently reserved, and should be allocated with the Standards        |     currently reserved, and should be allocated with the IETF Consensus | 
|     Action policy, which requires IESG review and approval and          |     policy, which requires RFC publication (not necessarily standards- | 
|     standards-track IETF RFC publication.                               |     track).                                                            | 
|                                                                             |  | 
| 11.  Thanks                                                                 |  | 
|                                                                             |  | 
|     We thank Mark Handley and Jitendra Padhye for their help in defining    |  | 
|     CCID 2.  We also thank Mark Allman, Aaron Falk, Nils-Erik Mattsson,     |  | 
|     Greg Minshall, Arun Venkataramani, Magnus Westerlund, and members of    |  | 
|     the DCCP Working Group for feedback on this document.                   |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler                                      Section 11.  [Page 17]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT          Expires: 7 September 2005             March 2005    |  | 
|                                                                             |  | 
|                                                                             |  | 
| A.  Appendix: Derivation of Ack Ratio Decrease                              |  | 
|                                                                             |  | 
|     This section justifies the algorithm for increasing and decreasing      |  | 
|     the Ack Ratio given in Section 6.1.2.                                   |  | 
|                                                                             |  | 
|     The congestion avoidance phase of TCP halves the cwnd for every         |  | 
|     window with congestion.  Similarly, CCID 2 doubles Ack Ratio for        |  | 
|     every window with congestion on the return path, roughly halving the    |  | 
|     DCCP-Ack sending rate.                                                  |  | 
|                                                                             |  | 
|     The congestion avoidance phase of TCP increases cwnd by one MSS for     |  | 
|     every congestion-free window.  Applying this congestion avoidance       |  | 
|     behavior to acknowledgement traffic, this would correspond to           |  | 
|     increasing the number of DCCP-Ack packets per window by one after       |  | 
|     every congestion-free window of DCCP-Ack packets.  We cannot achieve    |  | 
|     this exactly using Ack Ratio, since it is an integer.  Instead, we      |  | 
|     must decrease Ack Ratio by one after K windows have been sent           |  | 
|     without a congestion event on the reverse path, where K is chosen so    |  | 
|     that the long-term number of DCCP-Ack packets per congestion window     |  | 
|     is roughly TCP-friendly, following AIMD congestion control.             |  | 
|                                                                             |  | 
|     In CCID 2, rough TCP-friendliness for the ack traffic can be            |  | 
|     accomplished by setting K to cwnd/(R^2 - R), where R is the current     |  | 
|     Ack Ratio.                                                              |  | 
|                                                                             |  | 
|     This result was calculated as follows:                                  |  | 
|                                                                             |  | 
|            R = Ack Ratio = # data packets / ack packets, and                |  | 
|            W = Congestion Window = # data packets / window, so              |  | 
|            W/R = # ack packets / window.                                    |  | 
|                                                                             |  | 
|         Requirement: Increase W/R by 1 per congestion-free window.          |  | 
|         Since we can only reduce R by increments of one, we find K          |  | 
|         so that, after K congestion-free windows,                           |  | 
|         W/R + K would equal W/(R-1).                                        |  | 
|                                                                             |  | 
|         (W/R) + K = W/(R-1), so                                             |  | 
|                 K = W/(R-1) - W/R = W/(R^2 - R).                            |  | 
|                                                                             |  | 
|                                                                             |  | 
| B.  Appendix: Cost of Loss Inference Mistakes to Ack Ratio                  |  | 
|                                                                             |  | 
|     As discussed in Section 6.1.1, the sender often cannot determine        |  | 
|     whether lost packets carried data.  This hinders its ability to         |  | 
|     separate non-data loss events from other loss events.  In the           |  | 
|     absence of better information, the sender assumes, for the purpose      |  | 
|     of Ack Ratio calculation, that all lost packets were non-data           |  | 
|     packets.  This may overestimate the non-data loss event rate, which     |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler                                       Section B.  [Page 18]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT          Expires: 7 September 2005             March 2005    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     can lead to a too-high Ack Ratio, and thus a too-slow                   |  | 
|     acknowledgement rate.  All acknowledgement information will still       |  | 
|     get through -- DCCP acknowledgements are reliable -- but                |  | 
|     acknowledgement information will arrive in a burstier fashion.          |  | 
|     Absent some form of rate-based pacing, this could lead to increased     |  | 
|     burstiness for the sender's data traffic.                               |  | 
|                                                                             |  | 
|     There are several cases when the problem of an overly-high Ack          |  | 
|     Ratio, and the resulting increased burstiness of the data traffic,      |  | 
|     will not arise.  In particular, call the receiver DCCP B and the        |  | 
|     sender DCCP A.  Then:                                                   |  | 
|                                                                             |  | 
|     o  The problem won't arise unless DCCP B is sending a significant       |  | 
|        amount of data itself.  When the B-to-A half-connection is           |  | 
|        quiescent or low-rate, most packets sent by DCCP B will, in fact,    |  | 
|        be pure acknowledgements, and DCCP A's estimate of the DCCP-Ack      |  | 
|        loss rate will be reasonably accurate.                               |  | 
|                                                                             |  | 
|     o  The problem won't arise if DCCP B habitually piggybacks              |  | 
|        acknowledgement information on its data packets.  The piggybacked    |  | 
|        acknowledgements are not limited by Ack Ratio, so they can arrive    |  | 
|        frequently enough to prevent burstiness.                             |  | 
|                                                                             |  | 
|     o  The problem won't arise if DCCP A's sending rate is low, since       |  | 
|        burstiness isn't a problem at low rates.                             |  | 
|                                                                             |  | 
|     o  The problem won't arise if DCCP B's sending rate is high relative    |  | 
|        to DCCP A's sending rate, since the B-to-A loss rate must be low     |  | 
|        to support DCCP B's sending rate.  This bounds the Ack Ratio to      |  | 
|        reasonable values even when DCCP A labels every loss as a DCCP-      |  | 
|        Ack loss.                                                            |  | 
|                                                                             |  | 
|     o  The problem won't arise if DCCP B sends NDP Count options when       |  | 
|        appropriate (the Send NDP Count/B feature is true).  Then the        |  | 
|        sender can use the receiver's NDP Count options to detect, in        |  | 
|        most cases, whether lost packets were data packets or DCCP-Acks.     |  | 
|                                                                             |  | 
|     o  Finally, the problem won't arise if DCCP A rate-paces its data       |  | 
|        packets.                                                             |  | 
|                                                                             |  | 
|     This leaves the case when DCCP B is sending roughly the same amount     |  | 
|     of data packets and non-data packets, without NDP Count options, and    |  | 
|     with all acknowledgement information in DCCP-Ack packets.  We now       |  | 
|     quantify the potential cost, in terms of a too-large Ack Ratio, due     |  | 
|     to the sender's misclassifying data packet losses as DCCP-Ack           |  | 
|     losses.  For simplicity, we assume an environment of large-scale        |  | 
|     statistical multiplexing, where the packet drop rate is independent     |  | 
|     of the sending rate of any individual connection.                       |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler                                       Section B.  [Page 19]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT          Expires: 7 September 2005             March 2005    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     Assume that when DCCP A correctly counts non-data losses, Ack Ratio     |  | 
|     is set so that B-to-A data and acknowledgement traffic both have a      |  | 
|     sending rate of D packets per second.  Then when DCCP A incorrectly     |  | 
|     counts data losses as non-data losses, the sending rate for the B-      |  | 
|     to-A data traffic is still D pps, but the reduced sending rate for      |  | 
|     the B-to-A acknowledgement traffic is f*D pps, with f < 1.  Let the     |  | 
|     packet loss rate be p.  The sender incorrectly estimates the non-       |  | 
|     data loss rate as (pD+pfD)/fD, or, equivalently, as p(1 + 1/f).         |  | 
|     Because the congestion control mechanism for acknowledgement traffic    |  | 
|     is roughly TCP-friendly, and therefore the non-data sending rate and    |  | 
|     the data sending rate both grow as 1/sqrt(x) for x the packet drop      |  | 
|     rate, we have                                                           |  | 
|            fD/D = sqrt(p)/sqrt(p(1 + 1/f)),                                 |  | 
|     so                                                                      |  | 
|            f^2 = 1/(1 + 1/f).                                               |  | 
|     Solving, we get f = 0.62.  If the sender incorrectly counts lost        |  | 
|     data packets as non-data in this scenario, the acknowledgement rate     |  | 
|     is decreased by a factor of 0.62.  This would result in a moderate      |  | 
|     increase in burstiness for the A-to-B data traffic, which could be      |  | 
|     mitigated by sending NDP Count options or piggybacked                   |  | 
|     acknowledgements, or by rate-pacing out the data.                       |  | 
|                                                                             |  | 
| Normative References                                                        |  | 
|                                                                             |  | 
|     [DCCP] E. Kohler, M. Handley, and S. Floyd.  Datagram Congestion        |  | 
|         Control Protocol, draft-ietf-dccp-spec-09.txt, work in progress,    |  | 
|         November 2004.                                                      |  | 
|                                                                             |  | 
|     [RFC 793] J. Postel, editor.  Transmission Control Protocol.            |  | 
|         RFC 793.                                                            |  | 
|                                                                             |  | 
|     [RFC 2018] M. Mathis, J. Mahdavi, A. Floyd, and A. Romanow. TCP         |  | 
|         Selective Acknowledgement Options, RFC 2018, October 1996.          |  | 
|                                                                             |  | 
|     [RFC 2119] S. Bradner.  Key Words For Use in RFCs to Indicate           |  | 
|         Requirement Levels.  RFC 2119.                                      |  | 
|                                                                             |  | 
|     [RFC 2434] T. Narten and H. Alvestrand.  Guidelines for Writing an      |  | 
|         IANA Considerations Section in RFCs.  RFC 2434.                     |  | 
|                                                                             |  | 
|     [RFC 2581] M. Allman, V. Paxson, and W. Stevens.  TCP Congestion        |  | 
|         Control.  RFC 2581.                                                 |  | 
|                                                                             |  | 
|     [RFC 2988] V. Paxson and M. Allman, Computing TCP's Retransmission      |  | 
|         Timer, RFC 2988, November 2000.                                     |  | 
|                                                                             |  | 
|     [RFC 3168] K.K. Ramakrishnan, S. Floyd, and D. Black.  The Addition     |  | 
|         of Explicit Congestion Notification (ECN) to IP.  RFC 3168.         |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler                                                   [Page 20]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT          Expires: 7 September 2005             March 2005    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     [RFC 3390] M. Allman, S. Floyd, and C. Partridge.  Increasing TCP's     |  | 
|         Initial Window.  RFC 3390.                                          |  | 
|                                                                             |  | 
|     [RFC 3517] E. Blanton, M. Allman, K. Fall, and L. Wang.  A              |  | 
|         Conservative Selective Acknowledgment (SACK)-based Loss Recovery    |  | 
|         Algorithm for TCP.  RFC 3517.                                       |  | 
|                                                                             |  | 
|     [RFC 3692] T. Narten.  Assigning Experimental and Testing Numbers       |  | 
|         Considered Useful.  RFC 3692.                                       |  | 
|                                                                             |  | 
| Informative References                                                      |  | 
|                                                                             |  | 
|     [CCID 3 PROFILE] S. Floyd, E. Kohler, and J. Padhye.  Profile for       |  | 
|         DCCP Congestion Control ID 3: TFRC Congestion Control.  draft-      |  | 
|         ietf-dccp-ccid3-08.txt, work in progress, November 2004.            |  | 
|                                                                             |  | 
|     [RFC 2861] M. Handley, J. Padhye, and S. Floyd.  TCP Congestion         |  | 
|         Window Validation.  RFC 2861.                                       |  | 
|                                                                             |  | 
|     [RFC 3465] M. Allman. TCP Congestion Control with Appropriate Byte      |  | 
|         Counting (ABC). RFC 3465.                                           |  | 
|                                                                             |  | 
|     [RFC 3540] N. Spring, D. Wetherall, and D. Ely.  Robust Explicit        |  | 
|         Congestion Notification (ECN) Signaling with Nonces.  RFC 3540.     |  | 
|                                                                             |  | 
|     [V03] Arun Venkataramani, August 2003.  Citation for acknowledgement    |  | 
|         purposes only.                                                      |  | 
|                                                                             |  | 
| Authors' Addresses                                                          |  | 
|                                                                             |  | 
|     Sally Floyd <floyd@icir.org>                                            |  | 
|     ICSI Center for Internet Research                                       |  | 
|     1947 Center Street, Suite 600                                           |  | 
|     Berkeley, CA 94704                                                      |  | 
|     USA                                                                     |  | 
|                                                                             |  | 
|     Eddie Kohler <kohler@cs.ucla.edu>                                       |  | 
|     4531C Boelter Hall                                                      |  | 
|     UCLA Computer Science Department                                        |  | 
|     Los Angeles, CA 90095                                                   |  | 
|     USA                                                                     |  | 
|                                                                             |  | 
| Full Copyright Statement                                                    |  | 
|                                                                             |  | 
|     Copyright (C) The Internet Society 2004.  This document is subject      |  | 
|     to the rights, licenses and restrictions contained in BCP 78, and       |  | 
|     except as set forth therein, the authors retain all their rights.       |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler                                                   [Page 21]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT          Expires: 7 September 2005             March 2005    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     This document and the information contained herein are provided on      |  | 
|     an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE           |  | 
|     REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE    |  | 
|     INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR     |  | 
|     IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF      |  | 
|     THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED      |  | 
|     WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.      |  | 
|                                                                             |  | 
| Intellectual Property                                                       |  | 
|                                                                             |  | 
|     The IETF takes no position regarding the validity or scope of any       |  | 
|     Intellectual Property Rights or other rights that might be claimed      |  | 
|     to pertain to the implementation or use of the technology described     |  | 
|     in this document or the extent to which any license under such          |  | 
|     rights might or might not be available; nor does it represent that      |  | 
|     it has made any independent effort to identify any such rights.         |  | 
|     Information on the procedures with respect to rights in RFC             |  | 
|     documents can be found in BCP 78 and BCP 79.                            |  | 
|                                                                             |  | 
|     Copies of IPR disclosures made to the IETF Secretariat and any          |  | 
|     assurances of licenses to be made available, or the result of an        |  | 
|     attempt made to obtain a general license or permission for the use      |  | 
|     of such proprietary rights by implementers or users of this             |  | 
|     specification can be obtained from the IETF on-line IPR repository      |  | 
|     at http://www.ietf.org/ipr.                                             |  | 
|                                                                             |  | 
|     The IETF invites any interested party to bring to its attention any     |  | 
|     copyrights, patents or patent applications, or other proprietary        |  | 
|     rights that may cover technology that may be required to implement      |  | 
|     this standard.  Please address the information to the IETF at ietf-     |  | 
|     ipr@ietf.org.                                                           |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler                                                   [Page 22]    |  |