| Internet Engineering Task Force                              Sally Floyd    |  | 
| INTERNET-DRAFT                                                      ICIR    |  | 
| draft-ietf-dccp-ccid3-09.txt                                Eddie Kohler  | draft-ietf-dccp-ccid3-08.txt                                Eddie Kohler | 
| Expires: 20 June 2005                                               UCLA  | Expires: 14 May 2005                                                UCLA | 
|                                                          Jitendra Padhye    |  | 
|                                                       Microsoft Research    |  | 
|                                                         20 December 2004  |                                                         14 November 2004 | 
|                                                                             |  | 
|                                                                             |  | 
|                Profile for DCCP Congestion Control ID 3:                    |  | 
|                         TFRC 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 20 June 2005.                      |     This Internet-Draft will expire on 14 May 2005.                    | 
|                                                                             |  | 
| Copyright Notice                                                            |  | 
|                                                                             |  | 
|     Copyright (C) The Internet Society (2004). All Rights Reserved.         |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                                             [Page 1]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     TO BE DELETED BY THE RFC EDITOR UPON PUBLICATION:                       |  | 
|                                                                             |  | 
|     Changes from draft-ietf-dccp-ccid3-08.txt:                            |  | 
|                                                                             |  | 
|     * Add description of data and sequence loss interval lengths.         |  | 
|                                                                             |  | 
|     * Change Loss Intervals option to include loss interval data          |  | 
|     lengths.                                                              |  | 
|                                                                             |  | 
|     * Some rephrasing, as a result of working group feedback.             |  | 
|                                                                             |  | 
|     * Added section numbers to many references.                           |  | 
|                                                                             |  | 
|     * Referred to RFC 3448 for the definition of the first loss           |  | 
|     interval, and for the definition of the beginning and end of a loss   |  | 
|     interval.                                                             |  | 
|                                                                             |  | 
|     * Clarified that X_inrecv is in bytes per second, and changed         |  | 
|     "X_inrecv - 3*s" to "X_inrecv - 3*s/RTT", to keep all of the units    |  | 
|     straight.                                                             |  | 
|                                                                             |  | 
|     Changes from draft-ietf-dccp-ccid3-07.txt:                            |  | 
|                                                                             |  | 
|     * Loss Intervals is mandatory.                                          |  | 
|                                                                             |  | 
|     * Elapsed Time is mandatory, even if there's a Timestamp Echo.          |  | 
|                                                                             |  | 
|     * Send Loss Event Rate defaults to zero.                                |  | 
|                                                                             |  | 
|     * Rewrite Section 5.                                                    |  | 
|                                                                             |  | 
|     * IANA Considerations.                                                  |  | 
|                                                                             |  | 
|     * Wording nits.                                                         |  | 
|                                                                             |  | 
|     Changes from draft-ietf-dccp-ccid3-06.txt:                              |  | 
|                                                                             |  | 
|     * Moved the sections on Possible Changes to the Initial Window and      |  | 
|     Other Possible Changes to TFRC to be the section on Possible Future     |  | 
|     Changes to CCID3 in the appendix.                                       |  | 
|                                                                             |  | 
|     * Some rephrasing, as a result of Working Group Last Call.              |  | 
|                                                                             |  | 
|     * Specified the value of the inverted loss event rate when the loss     |  | 
|     event rate is 0.  From a suggestion from David Vos.                     |  | 
|                                                                             |  | 
|     * Added that the optional procedure for estimated the RTT at the        |  | 
|     receiver does not work when the inter-packet sending times are          |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                                             [Page 3]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     greater than the RTT.  From a suggestion by Ladan Gharai.               |  | 
|                                                                             |  | 
|     Changes from draft-ietf-dccp-ccid3-05.txt:                              |  | 
|                                                                             |  | 
|     * Added a section on Response to Idle and Application-limited           |  | 
|     Periods                                                                 |  | 
|                                                                             |  | 
|     * Added a paragraph on the sending rate when no feedback is received    |  | 
|     from the receiver.                                                      |  | 
|                                                                             |  | 
|     * Expanded on the discussion of the packet size s used in the TCP       |  | 
|     throughput equation.                                                    |  | 
|                                                                             |  | 
|     * Some editing to improve the presentation.                             |  | 
|                                                                             |  | 
|     * Added to discussion of response to Data Dropped and Slow Receiver.    |  | 
|                                                                             |  | 
|     * Deleted the optional algorithm given in Section 8.7.1 for             |  | 
|     receivers to estimate the RTT, and replaced it with one sentence.       |  | 
|                                                                             |  | 
|     * Added a section on Other Possible Changes to TFRC.                    |  | 
|                                                                             |  | 
|     Changes from draft-ietf-dccp-ccid3-04.txt:                              |  | 
|                                                                             |  | 
|     * Minor editing.                                                        |  | 
|                                                                             |  | 
|     * Said that implementations may check for apps that are manipulating    |  | 
|     the packet size inappropriately.                                        |  | 
|                                                                             |  | 
|     * Deletes the maximum packet size of 1500 bytes.                        |  | 
|                                                                             |  | 
|     * Added discussion on using the CCVal counter for estimating the        |  | 
|     round-trip time.                                                        |  | 
|                                                                             |  | 
|     * Changed the option number for the Loss Intervals option.              |  | 
|                                                                             |  | 
|     * Added the Intellectual Property Notice.                               |  | 
|                                                                             |  | 
|     Changes from draft-ietf-dccp-ccid3-03.txt:                              |  | 
|                                                                             |  | 
|     * Added more text to the section on Congestion Control on Data          |  | 
|     Packets to make it more readable, and to summarize the key              |  | 
|     mechanisms specified in the TFRC spec.                                  |  | 
|                                                                             |  | 
|     * Said that it is OK to use an initial sending rate of 2-4 pkts/RTT,    |  | 
|     based on RFC 3390.  And that in the future an initial sending rate      |  | 
|     of up to 8 pkts/RTT might be specified, for very small packets.         |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                                             [Page 4]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     * Receive Rate is measured in bytes per second, as RFC 3448             |  | 
|     specifies.                                                              |  | 
|                                                                             |  | 
|     * New definition of Loss Intervals option, because old definition       |  | 
|     was 24-bit-sequence-number specific; and add an example.                |  | 
|                                                                             |  | 
|     Changes from draft-ietf-dccp-ccid3-02.txt:                              |  | 
|                                                                             |  | 
|     * Added to the section on Application Requirements.                     |  | 
|                                                                             |  | 
|     * Added a section on Packet Sizes.                                      |  | 
|                                                                             |  | 
|     Changes from draft-ietf-dccp-ccid3-01.txt:                              |  | 
|                                                                             |  | 
|     * Added "Security Considerations" and "IANA Considerations"             |  | 
|     sections.                                                               |  | 
|                                                                             |  | 
|     * Store Window Counter in the DCCP header's CCVal field, not a          |  | 
|     separate option.                                                        |  | 
|                                                                             |  | 
|     * Add to the description of a loss interval in the Loss Intervals       |  | 
|     option: a loss interval includes at most one round-trip time's worth    |  | 
|     of possibly-marked packets, and at least one round-trip time's worth    |  | 
|     of packets in all.                                                      |  | 
|                                                                             |  | 
|     * Added a description of when the loss event rate calculated by the     |  | 
|     sender could differ from that calculated by the receiver.               |  | 
|                                                                             |  | 
|     * Window counter fixups.                                                |  | 
|                                                                             |  | 
|     * Add Use Loss Intervals and Use Loss Event Rate features, and          |  | 
|     explain their interaction.                                              |  | 
|                                                                             |  | 
|     * Move Elapsed Time option to DCCP's main specification (and            |  | 
|     simultaneously change its units to tenths of milliseconds). Allow       |  | 
|     the use of either Elapsed Time or Timestamp Echo.                       |  | 
|                                                                             |  | 
|     * Clarify the definition of quiescence.                                 |  | 
|                                                                             |  | 
|     * Change calculations for determining loss events to take window        |  | 
|     counter wrapping into account.                                          |  | 
|                                                                             |  | 
|     Changes from draft-ietf-dccp-ccid3-00.txt:                              |  | 
|                                                                             |  | 
|     * Changed the guidelines to say that required acknowledgement           |  | 
|     packets should include one or more of the following:  The Loss Event    |  | 
|     Rate, Loss Intervals, or the Ack Vector.                                |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                                             [Page 5]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|                              Table of Contents                              |  | 
|                                                                             |  | 
|     1. Introduction. . . . . . . . . . . . . . . . . . . . . . . . .  10  |     1. Introduction. . . . . . . . . . . . . . . . . . . . . . . . .   9 | 
|     2. Conventions . . . . . . . . . . . . . . . . . . . . . . . . .  10  |     2. Conventions . . . . . . . . . . . . . . . . . . . . . . . . .   9 | 
|     3. Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . .  11  |     3. Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . .   9 | 
|        3.1. Relationship with TFRC . . . . . . . . . . . . . . . . .  11  |        3.1. Relationship with TFRC . . . . . . . . . . . . . . . . .  10 | 
|        3.2. Example Half-Connection. . . . . . . . . . . . . . . . .  11  |        3.2. Example Half-Connection. . . . . . . . . . . . . . . . .  10 | 
|     4. Connection Establishment. . . . . . . . . . . . . . . . . . .  12  |     4. Connection Establishment. . . . . . . . . . . . . . . . . . .  11 | 
|     5. Congestion Control on Data Packets. . . . . . . . . . . . . .  12  |     5. Congestion Control on Data Packets. . . . . . . . . . . . . .  11 | 
|        5.1. Response to Idle and Application-limited                        |  | 
|        Periods . . . . . . . . . . . . . . . . . . . . . . . . . . .  14  |        Periods . . . . . . . . . . . . . . . . . . . . . . . . . . .  13 | 
|        5.2. Response to Data Dropped and Slow Receiver . . . . . . .  15  |        5.2. Response to Data Dropped and Slow Receiver . . . . . . .  14 | 
|        5.3. Packet Sizes . . . . . . . . . . . . . . . . . . . . . .  16  |        5.3. Packet Sizes . . . . . . . . . . . . . . . . . . . . . .  15 | 
|     6. Acknowledgements. . . . . . . . . . . . . . . . . . . . . . .  16  |     6. Acknowledgements. . . . . . . . . . . . . . . . . . . . . . .  15 | 
|        6.1. Loss Interval Definition . . . . . . . . . . . . . . . .  17  |        6.1. Loss Interval Definition . . . . . . . . . . . . . . . .  16 | 
|           6.1.1. Loss Interval Lengths . . . . . . . . . . . . . . .  19  |        6.2. Congestion Control on Acknowledgements . . . . . . . . .  17 | 
|        6.2. Congestion Control on Acknowledgements . . . . . . . . .  20  |        6.3. Acknowledgements of Acknowledgements . . . . . . . . . .  17 | 
|        6.3. Acknowledgements of Acknowledgements . . . . . . . . . .  20  |        6.4. Quiescence . . . . . . . . . . . . . . . . . . . . . . .  18 | 
|        6.4. Quiescence . . . . . . . . . . . . . . . . . . . . . . .  21  |     7. Explicit Congestion Notification. . . . . . . . . . . . . . .  18 | 
|     7. Explicit Congestion Notification. . . . . . . . . . . . . . .  21  |     8. Options and Features. . . . . . . . . . . . . . . . . . . . .  18 | 
|     8. Options and Features. . . . . . . . . . . . . . . . . . . . .  21  |        8.1. Window Counter Value . . . . . . . . . . . . . . . . . .  19 | 
|        8.1. Window Counter Value . . . . . . . . . . . . . . . . . .  22  |        8.2. Elapsed Time Options . . . . . . . . . . . . . . . . . .  21 | 
|        8.2. Elapsed Time Options . . . . . . . . . . . . . . . . . .  24  |        8.3. Receive Rate Option. . . . . . . . . . . . . . . . . . .  21 | 
|        8.3. Receive Rate Option. . . . . . . . . . . . . . . . . . .  24  |        8.4. Send Loss Event Rate Feature . . . . . . . . . . . . . .  22 | 
|        8.4. Send Loss Event Rate Feature . . . . . . . . . . . . . .  24  |        8.5. Loss Event Rate Option . . . . . . . . . . . . . . . . .  22 | 
|        8.5. Loss Event Rate Option . . . . . . . . . . . . . . . . .  25  |        8.6. Loss Intervals Option. . . . . . . . . . . . . . . . . .  23 | 
|        8.6. Loss Intervals Option. . . . . . . . . . . . . . . . . .  25  |           8.6.1. Option Details. . . . . . . . . . . . . . . . . . .  23 | 
|           8.6.1. Option Details. . . . . . . . . . . . . . . . . . .  26  |           8.6.2. Example . . . . . . . . . . . . . . . . . . . . . .  24 | 
|           8.6.2. Example . . . . . . . . . . . . . . . . . . . . . .  27  |     9. Verifying Congestion Control Compliance With ECN. . . . . . .  26 | 
|     9. Verifying Congestion Control Compliance With ECN. . . . . . .  29  |        9.1. Verifying the ECN Nonce Echo . . . . . . . . . . . . . .  26 | 
|        9.1. Verifying the ECN Nonce Echo . . . . . . . . . . . . . .  29  |  | 
|        9.2. Verifying the Reported Loss Intervals and Loss                  |  | 
|        Event Rate. . . . . . . . . . . . . . . . . . . . . . . . . .  30  |        Event Rate. . . . . . . . . . . . . . . . . . . . . . . . . .  27 | 
|     10. Implementation Issues. . . . . . . . . . . . . . . . . . . .  30  |     10. Implementation Issues. . . . . . . . . . . . . . . . . . . .  27 | 
|        10.1. Timestamp Usage . . . . . . . . . . . . . . . . . . . .  30  |        10.1. Timestamp Usage . . . . . . . . . . . . . . . . . . . .  27 | 
|        10.2. Determining Loss Events at the Receiver . . . . . . . .  30  |        10.2. Determining Loss Events at the Receiver . . . . . . . .  27 | 
|        10.3. Sending Feedback Packets. . . . . . . . . . . . . . . .  32  |        10.3. Sending Feedback Packets. . . . . . . . . . . . . . . .  29 | 
|     11. Security Considerations. . . . . . . . . . . . . . . . . . .  34  |     11. Security Considerations. . . . . . . . . . . . . . . . . . .  31 | 
|     12. IANA Considerations. . . . . . . . . . . . . . . . . . . . .  34  |     12. IANA Considerations. . . . . . . . . . . . . . . . . . . . .  31 | 
|        12.1. Reset Codes . . . . . . . . . . . . . . . . . . . . . .  35  |        12.1. Reset Codes . . . . . . . . . . . . . . . . . . . . . .  32 | 
|        12.2. Option Types. . . . . . . . . . . . . . . . . . . . . .  35  |        12.2. Option Types. . . . . . . . . . . . . . . . . . . . . .  32 | 
|        12.3. Feature Numbers . . . . . . . . . . . . . . . . . . . .  35  |        12.3. Feature Numbers . . . . . . . . . . . . . . . . . . . .  32 | 
|     13. Thanks . . . . . . . . . . . . . . . . . . . . . . . . . . .  35  |     13. Thanks . . . . . . . . . . . . . . . . . . . . . . . . . . .  32 | 
|     A. Appendix: Possible Future Changes to CCID 3 . . . . . . . . .  36  |     A. Appendix: Possible Future Changes to CCID 3 . . . . . . . . .  33 | 
|     Normative References . . . . . . . . . . . . . . . . . . . . . .  37  |     Normative References . . . . . . . . . . . . . . . . . . . . . .  34 | 
|     Informative References . . . . . . . . . . . . . . . . . . . . .  37  |     Informative References . . . . . . . . . . . . . . . . . . . . .  34 | 
|     Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . .  38  |     Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . .  35 | 
|     Full Copyright Statement . . . . . . . . . . . . . . . . . . . .  38  |     Full Copyright Statement . . . . . . . . . . . . . . . . . . . .  35 | 
|                                                                             |     Intellectual Property. . . . . . . . . . . . . . . . . . . . . .  35 | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                                             [Page 7]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
| 1.  Introduction                                                            |  | 
|                                                                             |  | 
|     This document contains the profile for Congestion Control Identifier    |  | 
|     3, TCP-friendly rate control (TFRC), 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.                                            |  | 
|                                                                             |  | 
|     TFRC is a receiver-based congestion control mechanism that provides     |  | 
|     a TCP-friendly sending rate, while minimizing the abrupt rate           |  | 
|     changes characteristic of TCP or of TCP-like congestion control [RFC    |  | 
|     3448].  The sender's allowed sending rate is set in response to the     |  | 
|     loss event rate, which is typically reported by the receiver to the     |  | 
|     sender.  See Section 3 for more on application requirements.            |  | 
|                                                                             |  | 
| 2.  Conventions                                                             |  | 
|                                                                             |  | 
|     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].    | 
|                                                                             |  | 
|     All multi-byte numerical quantities in CCID 3, such as arguments to     |  | 
|     options, are transmitted in network byte order (most significant        |  | 
|     byte first).                                                            |  | 
|                                                                             |  | 
|     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.                         |     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.                        |  | 
|                                                                             |  | 
|     This document uses a number of variables from RFC 3448, including:    |  | 
|                                                                             |  | 
|     o  X_recv: The receive rate in bytes per second.  See [RFC 3448]      |  | 
|        (Section 3.2.2).                                                   |  | 
|                                                                             |  | 
|     o  s: The packet size in bytes.  See [RFC 3448] (Section 3.1).        |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                                Section 2.  [Page 10]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     o  p: The loss event rate.  See [RFC 3448] (Section 3.1).             |  | 
|                                                                             |  | 
| 3.  Usage                                                                   |  | 
|                                                                             |  | 
|     CCID 3's TFRC congestion control is appropriate for flows that would    |  | 
|     prefer to minimize abrupt changes in the sending rate, including        |  | 
|     streaming media applications with small or moderate receiver          |     streaming media applications with small or moderate buffering at the | 
|     buffering before playback.  TCP-like congestion control, such as    |     receive application before the playback time.  CCID 2, TCP-like  | 
|     that of DCCP's CCID 2 [CCID 2 PROFILE], halves the sending rate in    |     congestion control [CCID 2 PROFILE], which halves the sending rate | 
|     response to each congestion event, and thus cannot provide a      |     in response to a congestion event, cannot satisfy a preference for a | 
|     relatively smooth sending rate.                                         |  | 
|                                                                             |  | 
|     As explained in RFC 3448 (Section 1), the penalty of having smoother  |     As explained in [RFC 3448], the penalty of having smoother         | 
|     throughput than TCP while competing fairly for bandwidth is that the    |  | 
|     TFRC mechanism in CCID 3 responds slower than TCP or TCP-like           |  | 
|     mechanisms to changes in available bandwidth.  Thus, CCID 3 should      |  | 
|     only be used for applications with a requirement for smooth             |  | 
|     throughput, in particular avoiding TCP's halving of the sending rate    |  | 
|     in response to a single packet drop.  For applications that simply      |  | 
|     need to transfer as much data as possible in as short a time as         |  | 
|     possible, we recommend using TCP-like congestion control, such as       |  | 
|     CCID 2.                                                                 |  | 
|                                                                             |  | 
|     CCID 3 should also not be used by applications that change their        |     As described in the TFRC specification [RFC 3448], CCID 3 should   | 
|     sending rate by varying the packet size, rather than varying the        |     also not be used by applications that change their sending rate by   | 
|     rate at which packets are sent.  A new CCID will be required for        |     varying the packet size, rather than varying the rate at which       | 
|     these applications.                                                     |     packets are sent.  A new CCID will be required for these             | 
|                                                                             |     applications.                                                        | 
| 3.1.  Relationship with TFRC                                                |  | 
|                                                                             |  | 
|     The congestion control mechanisms described here follow the TFRC        |  | 
|     mechanism standardized by the IETF [RFC 3448].  Conformant CCID 3       |  | 
|     implementations MAY track updates to the TCP throughput equation        |  | 
|     directly, as updates are standardized in the IETF, rather than          |  | 
|     waiting for revisions of this document.  However, conformant            |  | 
|     implementations SHOULD wait for explicit updates to CCID 3 before       |  | 
|     implementing other changes to TFRC congestion control.                  |  | 
|                                                                             |  | 
| 3.2.  Example Half-Connection                                               |  | 
|                                                                             |  | 
|     This example shows the typical progress of a half-connection using      |  | 
|     CCID 3's TFRC Congestion Control, not including connection              |  | 
|     initiation and termination.  The example is informative, not            |  | 
|     normative.                                                              |  | 
|                                                                             |  | 
|     1.  The sender transmits DCCP-Data packets, where the sending rate    |     1.  The sender sends DCCP-Data packets, where the sending rate is  | 
|         is governed by the allowed transmit rate as specified in RFC      |         governed by the allowed transmit rate as specified in [RFC     | 
|         3448 (Section 3.2).  Each DCCP-Data packet has a sequence         |         3448].  Each DCCP-Data packet has a sequence number, and the   | 
|                                                                             |         DCCP header's CCVal field contains the Window Counter Value,   | 
|                                                                             |         used by the receiver in determining when multiple losses belong  | 
|                                                                             |         in a single loss event.                                          | 
| Floyd/Kohler/Padhye                              Section 3.2.  [Page 11]    |         If the connection isn't Explicit Congestion Notification (ECN) | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |         Incapable, then each DCCP-Data and DCCP-DataAck packet is sent | 
|                                                                             |         as ECN-Capable, with either the ECT(0) or the ECT(1) codepoint   | 
|                                                                             |         set.  The use of the ECN Nonce with TFRC is described in Section | 
|         number, and the DCCP header's CCVal field contains the window     |         9.                                                               | 
|         counter value, used by the receiver in determining when multiple  |  | 
|         losses belong in a single loss event.                               |  | 
|                                                                             |  | 
|         In the typical case of an ECN-capable half-connection, each     |  | 
|         DCCP-Data and DCCP-DataAck packet is sent as ECN-Capable, with      |  | 
|         either the ECT(0) or the ECT(1) codepoint set.  The use of the      |  | 
|         ECN Nonce with TFRC is described in Section 9.                      |  | 
|                                                                             |  | 
|     2.  The receiver sends DCCP-Ack packets at least once per round-trip    |  | 
|         time acknowledging the data packets, unless the sender is           |  | 
|         sending at a rate of less than one packet per round-trip time,      |  | 
|         as indicated by the TFRC specification RFC 3448 (Section 6).      |         as indicated by the TFRC specification [RFC 3448].  Each DCCP- | 
|         Each DCCP-Ack packet uses a sequence number, identifies the most  |         Ack packet uses a sequence number, identifies the most recent  | 
|         recent packet received from the sender, and includes feedback       |         packet received from the sender, and includes feedback about the | 
|         about the recent loss intervals experienced by the receiver.        |         recent loss intervals experienced by the receiver.               | 
|                                                                             |  | 
|     3.  The sender continues sending DCCP-Data packets as controlled by     |  | 
|         the allowed transmit rate.  Upon receiving DCCP-Ack packets, the    |  | 
|         sender updates its allowed transmit rate as specified in RFC      |         sender updates its allowed transmit rate as specified in [RFC  | 
|         3448 (Section 4.3).  This update is based upon a loss event rate  |         3448].  This update is based upon a loss event rate calculated | 
|         calculated by the sender, based on the receiver's loss intervals    |         by the sender, based on the receiver's loss intervals feedback.  | 
|         feedback.  If it prefers, the sender can also use a loss event      |         If it prefers, the sender can also use a loss event rate         | 
|         rate calculated and reported by the receiver.                       |         calculated and reported by the receiver.                         | 
|                                                                             |  | 
|     4.  The sender estimates round-trip times and calculates a              |  | 
|         nofeedback time, as specified in RFC 3448 (Section 4.4).  If no   |         nofeedback time, as specified in [RFC 3448].  If no feedback is | 
|         feedback is received from the receiver in that time (at least       |         received from the receiver in that time (at least four round-  | 
|         four round-trip times), the sender halves its sending rate.       |         trip times), the sender halves its sending rate.               | 
|                                                                             |  | 
| 4.  Connection Establishment                                                |  | 
|                                                                             |  | 
|     The connection is initiated by the client using mechanisms described    |  | 
|     in the DCCP specification [DCCP].  During or after CCID 3               |  | 
|     negotiation, the client and/or server may want to negotiate the         |  | 
|     values of the Send Ack Vector and Send Loss Event Rate features.        |  | 
|                                                                             |  | 
| 5.  Congestion Control on Data Packets                                      |  | 
|                                                                             |  | 
|     CCID 3 uses the congestion control mechanisms of TFRC [RFC 3448].       |  | 
|     The following discussion summarizes information from RFC 3448, which  |     The following discussion summarizes information from RFC 3448; that | 
|     should be considered normative except where specifically indicated.     |     RFC should be considered normative except where specifically       | 
|                                                                             |     indicated.                                                           | 
|     Loss Event Rate                                                         |  | 
|                                                                             |  | 
|     The basic operation of CCID 3 centers around the calculation of a       |  | 
|     loss event rate: the number of loss events as a fraction of the         |  | 
|     number of packets transmitted, weighted over the last several loss      |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                                Section 5.  [Page 12]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     intervals.  This loss event rate, a round-trip time estimate, and       |  | 
|     the average packet size are plugged into the TCP throughput             |  | 
|     equation, as specified in RFC 3448 (Section 3.1).  The result is a    |     equation, as specified in RFC 3448.  The result is a fair transmit | 
|     fair transmit rate, close to what a modern TCP would achieve in the     |     rate, close to what a modern TCP would achieve in the same           | 
|     same conditions.  CCID 3 senders are limited to this fair rate.         |     conditions.  CCID 3 senders are limited to this fair rate.           | 
|                                                                             |  | 
|     The loss event rate itself is calculated in CCID 3 using recent loss    |  | 
|     interval lengths reported by the receiver.  Loss intervals are          |  | 
|     precisely defined in Section 6.1.  In summary, a loss interval is up    |  | 
|     to 1 RTT of possibly lost or ECN-marked data packets, followed by an  |     to 1 RTT of possibly lost or ECN-marked packets, followed by an      | 
|     arbitrary number of non-dropped, non-marked data packets.  Thus,      |     arbitrary number of non-dropped, non-marked packets.  Thus, long     | 
|     long loss intervals represent low congestion rates.  The CCID 3 Loss    |     loss intervals represent low congestion rates.  The CCID 3 Loss      | 
|     Intervals option is used to report loss interval lengths; see           |  | 
|     Section 8.6.                                                            |  | 
|                                                                             |  | 
|     Other Congestion Control Mechanisms                                     |  | 
|                                                                             |  | 
|     The sender starts in a slow-start phase, roughly doubling its           |  | 
|     allowed sending rate each round-trip time.  The slow-start phase is     |  | 
|     ended by the receiver's report of a data packet drop or mark, after   |     ended by the receiver's report of a packet drop or mark, after which | 
|     which the sender uses the loss event rate to calculate its allowed      |     the sender uses the loss event rate to calculate its allowed sending | 
|     sending rate.                                                           |     rate.                                                                | 
|                                                                             |     RFC 3448 specifies an initial sending rate of one packet per RTT     | 
|     RFC 3448 (Section 4) specifies an initial sending rate of one packet  |     (Round-Trip Time) as follows: The sender initializes the allowed     | 
|     per RTT (Round-Trip Time) as follows: The sender initializes the        |     sending rate to one packet per second.  As soon as a feedback packet | 
|     allowed sending rate to one packet per second.  As soon as a            |     is received from the receiver, the sender has a measurement of the   | 
|     feedback packet is received from the receiver, the sender has a         |     round-trip time, and then sets the initial allowed sending rate to   | 
|     measurement of the round-trip time, and then sets the initial           |     one packet per RTT.  However, while the initial TCP window used to   | 
|     allowed sending rate to one packet per RTT.  However, while the         |     be one segment, RFC 2581 allows an initial TCP window of two         | 
|     initial TCP window used to be one segment, RFC 2581 allows an           |     segments, and RFC 3390 allows an initial TCP window of three or four | 
|     initial TCP window of two segments, and RFC 3390 allows an initial      |     segments (up to 4380 bytes).  RFC 3390 gives an upper bound on the   | 
|     TCP window of three or four segments (up to 4380 bytes).  RFC 3390      |     initial window of                                                    | 
|     gives an upper bound on the initial window of                           |  | 
|                min(4*MSS, max(2*MSS, 4380 bytes)).                          |  | 
|     Translating this to the packet-based congestion control of CCID 3,      |  | 
|     the initial CCID 3 sending rate is allowed to be at least two           |  | 
|     packets per RTT, and at most four packets per RTT, depending on the     |  | 
|     packet size.  The initial rate is only allowed to be three or four      |  | 
|     packets per RTT when, in terms of segment size, that translates to      |  | 
|     at most 4380 bytes per RTT.                                             |  | 
|                                                                             |  | 
|     The sender's measurement of the round-trip time uses the Elapsed        |  | 
|     Time and/or Timestamp Echo option contained in feedback packets, as     |  | 
|     described in Section 8.2. The Elapsed Time option is required, while    |  | 
|     the Timestamp Echo option is not required.  The sender maintains an     |  | 
|     average round-trip time heavily weighted on the most recent             |  | 
|     measurements.                                                           |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                                Section 5.  [Page 13]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     Each DCCP-Data packet contains a sequence number.  Each DCCP-Data       |  | 
|     packet also contains a window counter value, as described in Section  |     packet also contains a Window Counter Value, as described in Section | 
|     8.1 below.  The window counter is incremented by one every quarter    |     8.1 below.  The Window Counter Value is incremented by one every   | 
|     round-trip time.  The receiver uses it as a coarse-grained timestamp |     quarter round-trip time, and is used by the receiver in the        | 
|     to determine when a packet loss should be considered part of an         |     calculation of loss intervals.  In particular, the Window Counter  | 
|     existing loss interval, or must begin a new loss interval.              |     Value is used by the receiver as a coarse-grained timestamp to     | 
|                                                                             |     determine when a packet loss should be considered part of an         | 
|     Because TFRC is rate-based instead of window-based, and because         |  | 
|     feedback packets can be dropped in the network, the sender needs        |  | 
|     some mechanism for reducing its sending rate in the absence of          |  | 
|     positive feedback from the receiver.  As described in Section 6, the    |  | 
|     receiver sends feedback packets roughly once per round-trip time.       |  | 
|     As specified in RFC 3448 (Section 4.3), the sender sets a nofeedback  |     As specified in RFC 3448, the sender sets a nofeedback timer to at | 
|     timer to at least four round-trip times, or to twice the interval       |     least four round-trip times, or to twice the interval between data   | 
|     between data packets, whichever is larger; if the sender hasn't         |     packets, whichever is larger; if the sender hasn't received a        | 
|     received a feedback packet from the receiver when the nofeedback        |     feedback packet from the receiver when the nofeedback timer expires, | 
|     timer expires, then the sender halves its allowed sending rate.  The    |     then the sender halves its allowed sending rate.  The allowed        | 
|     allowed sending rate is never reduced below one packet per 64           |     sending rate is never reduced below one packet per 64 seconds.  Note | 
|     seconds.  Note that not all acknowledgements are considered feedback    |     that not all acknowledgements are considered feedback packets, since | 
|     packets, since feedback packets must contain valid Loss Intervals,      |     feedback packets must contain valid Loss Intervals, Elapsed Time,    | 
|     Elapsed Time, and Receive Rate options.                                 |     and Receive Rate options.                                            | 
|                                                                             |  | 
|     If the sender never receives a feedback packet from the receiver,       |  | 
|     and as a consequence never gets to set the allowed sending rate to      |  | 
|     one packet per RTT, then the sending rate is left at its initial        |  | 
|     rate of one packet per second, with the nofeedback timer expiring       |  | 
|     after two seconds.  The allowed sending rate is halved each time the    |  | 
|     nofeedback timer expires.  Thus, if no feedback is received from the    |  | 
|     receiver, the allowed sending rate is never above one packet per        |  | 
|     second, and is quickly reduced below one packet per second.             |  | 
|                                                                             |  | 
|     The feedback packets from the receiver contain a Receive Rate option    |  | 
|     specifying the rate at which data packets arrived at the receiver     |     specifying the rate at which data packets were received by the     | 
|     since the last feedback packet.  The allowed sending rate can be at     |     receiver since the last feedback packet.  The allowed sending rate   | 
|     most twice the rate received at the receiver in the last round-trip   |     can be at most twice the rate that the receiver received in the last | 
|     time.  This may be less than the nominal fair rate if, for example,     |     round-trip time.  This may be less than the nominal fair rate if,    | 
|     the application is sending less than its fair share.                    |     for example, the application is sending less than its fair share.    | 
|                                                                             |  | 
| 5.1.  Response to Idle and Application-limited Periods                      |  | 
|                                                                             |  | 
|     One consequence of the nofeedback timer is that the sender reduces      |  | 
|     the allowed sending rate when the sender has been idle for a            |  | 
|     significant period of time.  In RFC 3448 (Section 4.4), the allowed |     significant period of time.  As specified in RFC 3448, the allowed | 
|     sending rate is never reduced to less than two packets per round-       |  | 
|     trip time as the result of an idle period.  In CCID 3, we revise        |     trip time as the result of an idle period.                           | 
|     this to take into account the larger initial windows allowed by RFC     |     In CCID 3, we revise this specification from RFC 3448 to take into | 
|     3390.  That is, the allowed sending rate is never reduced to less       |     account the larger initial windows allowed by RFC 3390.  That is,    | 
|     than the RFC 3390 initial sending rate as the result of an idle         |     the allowed sending rate is never reduced to less than the RFC 3390  | 
|                                                                             |     initial sending rate as the result of an idle period.  If the        | 
|                                                                             |     allowed sending rate is less than the initial sending rate upon      | 
|                                                                             |     entry to the idle period, then it will still be less than the        | 
| Floyd/Kohler/Padhye                              Section 5.1.  [Page 14]    |     initial sending rate when exiting the idle period.  However, the     | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |     allowed sending rate should not be reduced to below the initial      | 
|                                                                             |     sending rate because of reductions of the allowed sending rate       | 
|                                                                             |     during the idle period itself.                                       | 
|     period.  If the allowed sending rate is less than the initial           |  | 
|     sending rate upon entry to the idle period, then it will still be       |  | 
|     less than the initial sending rate when exiting the idle period.        |  | 
|     However, the allowed sending rate should not be reduced to below the    |  | 
|     initial sending rate because of reductions of the allowed sending       |  | 
|     rate during the idle period itself.                                     |  | 
|                                                                             |  | 
|     The sender's allowed sending rate is limited to at most twice the       |  | 
|     receive rate reported by the receiver.  Thus, after an application-     |  | 
|     limited period, the sender can at most double its sending rate from     |  | 
|     one round-trip time to the next, until it reaches the allowed           |  | 
|     sending rate determined by the loss event rate.                         |  | 
|                                                                             |  | 
| 5.2.  Response to Data Dropped and Slow Receiver                            |  | 
|                                                                             |  | 
|     A CCID 3 sender responds to packets acknowledged as Data Dropped as     |  | 
|     described in [DCCP], with the following further clarifications.         |  | 
|                                                                             |  | 
|     o  Drop Code 2 ("receive buffer drop").  The allowed sending rate is    |  | 
|        reduced by one packet per RTT for each packet newly acknowledged     |  | 
|        as Drop Code 2, except that it is never reduced below one packet     |  | 
|        per RTT as a result of Drop Code 2.                                |        per round-trip time.                                            | 
|                                                                             |  | 
|     o  Adjusting the receive rate X_recv.  A CCID 3 sender SHOULD also      |  | 
|        respond to non-network-congestion events, such as those implied    |        respond to non-congestion events, such as those implied by Data | 
|        by Data Dropped and Slow Receiver options, by adjusting X_recv,      |        Dropped and Slow Receiver options, by adjusting X_recv, the       | 
|        the receive rate reported by the receiver in Receive Rate options    |        receive rate reported by the receiver in Receive Rate options     | 
|        (see Section 8.3).  The CCID 3 sender's allowed sending rate is      |  | 
|        limited to at most twice the receive rate reported by the            |  | 
|        receiver, via the "min(..., 2*X_recv)" clause in TFRC's            |        receiver, via the "min(..., 2*X_recv)" clause in RFC 3448's     | 
|        throughput calculations [RFC 3448] (Section 4.3). When the sender  |        throughput calculations.  When the sender receives one or more  | 
|        receives one or more Data Dropped and Slow Receiver options, the     |        Data Dropped and Slow Receiver options, the sender SHOULD adjust  | 
|        sender SHOULD adjust X_recv as follows:                              |        X_recv as follows:                                                | 
|                                                                             |        1.  Let X_inrecv equal the Receive Rate reported by the receiver  | 
|        1.  Let X_inrecv equal the Receive Rate in bytes per second        |            in the most recent acknowledgement.                           | 
|            reported by the receiver in the most recent acknowledgement.     |  | 
|                                                                             |  | 
|        2.  Let X_drop equal the upper bound on the sending rate implied     |  | 
|            by Data Dropped and Slow Receiver options.  If the sender        |  | 
|            receives a Slow Receiver option, which requests that the         |  | 
|            sender not increase its sending rate for roughly a round-trip    |  | 
|            time [DCCP], then X_drop should be set to X_inrecv.              |  | 
|            Similarly, if the sender receives a Data Dropped option          |  | 
|            indicating, for example, that three packets were dropped with  |            indicating that three packets were dropped with Drop Code 2, | 
|            Drop Code 2, then the upper bound on the sending rate will be    |            then the upper bound on the sending rate will be decreased by | 
|            decreased by at most three packets per RTT, by the sender    |            three by the sender setting X_drop to X_inrecv - 3*s, where s | 
|            setting X_drop to                                                |            is the packet size in bytes.                                  | 
|                 max(X_inrecv - 3*s/RTT, min(X_inrecv, s/RTT)).          |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                              Section 5.2.  [Page 15]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|            Again, s is the packet size in bytes.                          |  | 
|                                                                             |  | 
|        3.  Set X_recv := min(X_inrecv, X_drop/2).                           |  | 
|                                                                             |  | 
|        As a result, the next round-trip time's sending rate will be         |  | 
|        limited to at most 2*(X_drop/2) = X_drop.  The effects of the        |  | 
|        Slow Receiver and Data Dropped options on X_recv will mostly         |  | 
|        vanish by the round-trip time after that, which is appropriate       |  | 
|        for this non-network-congestion feedback.  This procedure MUST     |        for this non-congestion feedback.  This procedure MUST only be  | 
|        only be used for those Drop Codes not related to corruption (see     |        used for those Drop Codes not related to corruption (see [DCCP]). | 
|        [DCCP]).  Currently, this is limited to Drop Codes 0, 1, and 2.      |        Currently, this is limited to Drop Codes 0, 1, and 2.             | 
|                                                                             |     o  Exiting slow-start.  The sender MUST also exit slow start       | 
| 5.3.  Packet Sizes                                                          |        whenever it receives a relevant Data Dropped or Slow Receiver   | 
|                                                                             |        option.                                                         | 
|     CCID 3 is intended for applications that use a fixed packet size,       |  | 
|     and that vary their sending rate in packets per second in response      |  | 
|     to congestion.   CCID 3 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.     |  | 
|     However, some attention might be required for applications using        |  | 
|     CCID 3 that vary their packet size not in response to congestion,       |  | 
|     but in response to other application-level requirements.                |  | 
|                                                                             |  | 
|     The packet size s is used in the TCP throughput equation.  A CCID 3     |  | 
|     implementation MAY calculate s as the segment size averaged over        |  | 
|     multiple round trip times -- for example, over the most recent four     |  | 
|     loss intervals, for loss intervals as defined in Section 6.1.           |  | 
|     Alternately, a CCID 3 implementation MAY use the Maximum Packet Size    |  | 
|     to derive s.  In this case, s is set to the Maximum Segment Size        |  | 
|     (MSS), the maximum size in bytes for the data segment, not including    |  | 
|     the default DCCP and IP packet headers.  Each packet transmitted      |     the default DCCP and IP packet headers.  In this case, each packet | 
|     then counts as one MSS, regardless of the actual segment size, and  |     transmitted counts as one MSS, regardless of the actual segment      | 
|     the TCP throughput equation can be interpreted as specifying the        |     size.  In this case, the TCP throughput equation can be interpreted | 
|     sending rate in packets per second.                                     |     as specifying the sending rate in packets per second.                | 
|                                                                             |  | 
|     CCID 3 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].)              |  | 
|                                                                             |  | 
| 6.  Acknowledgements                                                        |  | 
|                                                                             |  | 
|     The receiver sends an acknowledgement to the sender roughly once per    |  | 
|     round-trip time, if the sender is sending packets that frequently.      |  | 
|     This rate is determined by the TFRC protocol, specified in RFC 3448   |     This rate is determined by the TFRC protocol, specified in [RFC    | 
|                                                                             |     3448].                                                             | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                                Section 6.  [Page 16]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     (Section 6).                                                          |  | 
|                                                                             |  | 
|     As specified in [DCCP], the acknowledgement number acknowledges the     |  | 
|     greatest valid sequence number received so far on this connection.      |  | 
|     ("Greatest" is, of course, measured in circular sequence space.)        |  | 
|     Each acknowledgement required by TFRC also includes at least the        |  | 
|     following options:                                                      |  | 
|                                                                             |  | 
|     1.  An Elapsed Time and/or Timestamp Echo option specifying the         |  | 
|         amount of time elapsed since the arrival at the receiver of the |         amount of time elapsed since the receiver received the packet  | 
|         packet whose sequence number appears in the Acknowledgement         |         whose sequence number appears in the Acknowledgement Number      | 
|         Number field.  These options are described in [DCCP] (Sections    |         field.  These options are described in Sections 13.2 and 13.1 of | 
|         13.2 and 13.1).                                                   |         [DCCP].                                                        | 
|                                                                             |     2.  A Receive Rate option (Section 8.3) specifying the rate at which | 
|     2.  A Receive Rate option, defined in Section 8.3, specifying the     |         the receiver received data since the last DCCP-Ack was sent. | 
|         rate at which data was received since the last DCCP-Ack was       |     3.  A Loss Intervals option (Section 8.6) specifying the beginning | 
|         sent.                                                               |         and end of the most recent loss intervals experienced by the   | 
|                                                                             |         receiver.  (The definition of a loss interval is provided        | 
|     3.  A Loss Intervals option, defined in Section 8.6, specifying the   |         below.)  From Loss Intervals, the sender can easily calculate    | 
|         most recent loss intervals experienced by the receiver.  (The       |         the loss event rate p using the procedure described in [RFC    | 
|         definition of a loss interval is provided below.)  From Loss        |         3448].                                                         | 
|         Intervals, the sender can easily calculate the loss event rate p    |  | 
|         using the procedure described in RFC 3448 (Section 5.4).          |  | 
|                                                                             |  | 
|     Acknowledgements not containing at least these three options are not    |  | 
|     considered feedback packets.                                            |  | 
|                                                                             |  | 
|     The receiver MAY also include other options concerning the loss         |  | 
|     event rate, including Loss Event Rate, which gives the loss event       |  | 
|     rate calculated by the receiver, defined in Section 8.5, and DCCP's   |     rate calculated by the receiver (Section 8.5), and DCCP's generic  | 
|     generic Ack Vector option, which reports the specific sequence      |     Ack Vector option, which reports which specific packets were lost or | 
|     numbers of any lost or marked packets [DCCP] (Section 11.4).  Ack |     marked (Section 11.4 of [DCCP]).  Ack Vector is not required by    | 
|     Vector is not required by CCID 3's congestion control mechanisms:       |     CCID 3's congestion control mechanisms: the Loss Intervals option    | 
|     the Loss Intervals option provides all the information needed to        |     provides all the information needed to manage the transmit rate and  | 
|     manage the transmit rate and probabilistically verify receiver          |     probabilistically verify receiver reports.  However, Ack Vector may | 
|     feedback.  However, Ack Vector may be useful for applications that    |     be useful for applications that need to determine exactly which      | 
|     need to determine exactly which packets were lost.                      |     packets were lost.                                                   | 
|                                                                             |  | 
|     If the HC-Receiver is also sending data packets to the HC-Sender,       |  | 
|     then it MAY piggyback acknowledgement information on those data         |  | 
|     packets more frequently than TFRC's specified acknowledgement rate      |  | 
|     allows.                                                                 |  | 
|                                                                             |  | 
| 6.1.  Loss Interval Definition                                              |  | 
|                                                                             |  | 
|     As described in RFC 3448 (Section 5.2), a loss interval begins with   |     As described in [RFC 3448] (Section 5.2), a loss interval begins   | 
|     a lost or ECN-marked data packet; continues with at most one round    |     with a lost or ECN-marked packet; continues with at most one round   | 
|     trip time's worth of packets that may or may not be lost or marked;     |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                              Section 6.1.  [Page 17]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     and completes with an arbitrarily-long series of non-dropped, non-      |  | 
|     marked data packets.  For example, here is a single loss interval,    |     marked packets.  Call these the lossy part and the lossless part of | 
|     assuming that sequence numbers increase as you move right:              |     the loss interval.  For example, here is a single loss interval,   | 
|                                                                             |  | 
|                Lossy Part                                                   |  | 
|                 <= 1 RTT   __________ Lossless Part __________              |  | 
|               /          \/                                   \             |  | 
|               *----*--*--*-------------------------------------             |  | 
|               ^    ^  ^  ^                                                  |  | 
|              losses or marks                                                |  | 
|                                                                             |  | 
|                                                                             |  | 
|     Note that a loss interval's lossless part might be empty, as in the     |  | 
|     first interval below:                                                   |  | 
|                                                                             |  | 
|              Lossy Part   Lossy Part                                        |  | 
|               <= 1 RTT     <= 1 RTT   _____ Lossless Part _____             |  | 
|             /          \/           \/                         \            |  | 
|             *----*--*--***--------*-*---------------------------            |  | 
|             ^    ^  ^  ^^^        ^ ^                                       |  | 
|             \_ Int. 1 _/\_____________ Interval 2 _____________/            |  | 
|                                                                             |  | 
|                                                                             |  | 
|     As in RFC 3448 (Section 5.2), the length of the lossy part MUST be  |     [RFC 3448] specifies that the length of the lossy part must be <= | 
|     <= 1 RTT.  CCID 3 uses window counter values, not receive times, to   |     1 RTT.  CCID 3 uses the Window Counter, not receive times, to      | 
|     determine whether multiple packets occurred in the same RTT, and        |  | 
|     thus belong to the same loss event; see Section 10.2.  A loss         |     thus belong to the same loss event; see Section 10.2.              | 
|     interval whose lossy part lasts for more than 1 RTT, or whose         |     A missing packet doesn't begin a new loss interval until NDUPACK | 
|     lossless part contains a dropped or marked data packet, is invalid.   |     packets have been seen after the "hole", where NDUPACK = 3 (see  | 
|                                                                             |     Section 5.1 of [RFC 3448]).  Thus, up to NDUPACK of the most recent | 
|     A missing data packet doesn't begin a new loss interval until       |     sequence numbers (including the sequence numbers of any holes) might | 
|     NDUPACK packets have been seen after the "hole", where NDUPACK = 3.   |     temporarily not be part of any loss interval, while the          | 
|     Thus, up to NDUPACK of the most recent sequence numbers (including    |     implementation waits to see whether a hole will be filled.       | 
|     the sequence numbers of any holes) might temporarily not be part of   |  | 
|     any loss interval, while the implementation waits to see whether a    |  | 
|     hole will be filled.  See RFC 3448 (Section 5.1) and RFC 2581         |  | 
|     (Section 3.2) for further discussion of NDUPACK.                      |  | 
|                                                                             |  | 
|     As specified by RFC 3448 (Section 5), all loss intervals except the   |  | 
|     first begin with a lost or marked data packet, and all loss           |  | 
|     intervals are as long as possible, subject to the validity            |  | 
|     constraints above.                                                    |  | 
|                                                                             |  | 
|     Lost and ECN-marked non-data packets may occur freely in the          |  | 
|     lossless part of a loss interval.  (Non-data packets consist of       |  | 
|     those packet types that cannot carry application data, namely DCCP-   |  | 
|     Ack, DCCP-Close, DCCP-CloseReq, DCCP-Reset, DCCP-Sync, and DCCP-      |  | 
|     SyncAck.)  In the absence of better information, a receiver MUST      |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                              Section 6.1.  [Page 18]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     conservatively assume that every lost packet was a data packet, and   |  | 
|     thus must occur in some lossy part.  DCCP's NDP Count option can      |  | 
|     help the receiver determine whether a particular packet contained     |  | 
|     data; see [DCCP] (Section 7.7).                                       |  | 
|                                                                             |  | 
| 6.1.1.  Loss Interval Lengths                                             |  | 
|                                                                             |  | 
|     RFC 3448 defines the TFRC congestion control mechanism in terms of a  |  | 
|     one-way transfer of data, with data packets going from the sender to  |  | 
|     the receiver and feedback packets going from the receiver back to     |  | 
|     the sender.  However, CCID 3 applies in a context of two half-        |  | 
|     connections, with DCCP-Data and and DCCP-DataAck packets from one     |  | 
|     half-connection sharing sequence number space with DCCP-Ack packets   |  | 
|     from the other half-connection.  For the purposes of CCID 3           |  | 
|     congestion control, loss interval lengths should only include data    |  | 
|     packets, and exclude the acknowledgement packets from the reverse     |  | 
|     half-connection; but it's also useful to report the total number of   |  | 
|     packets in each loss interval (for example, to facilitate ECN Nonce   |  | 
|     verification).                                                        |  | 
|                                                                             |  | 
|     CCID 3's Loss Intervals option thus reports two lengths for each      |  | 
|     loss interval.  An interval's sequence length is the total number of  |  | 
|     packets the sender transmitted during the interval, and is easily     |  | 
|     calculated in DCCP as the greatest packet sequence number in the      |  | 
|     interval minus the greatest packet sequence number in the preceding   |  | 
|     interval (or, if there is no preceding interval, the initial          |  | 
|     sequence number in the CCID 3 half-connection).  An interval's data   |  | 
|     length is the number used in TFRC's loss event rate calculation, as   |  | 
|     defined in RFC 3448 (Section 5), and is calculated as follows.        |  | 
|                                                                             |  | 
|     For all loss intervals except the first, the data length equals the   |  | 
|     sequence length minus the number of non-data packets the sender       |  | 
|     transmitted during the loss interval, except that the minimum data    |  | 
|     length is one packet.  In the absence of better information, an       |  | 
|     endpoint MUST conservatively assume that the loss interval contained  |  | 
|     only data packets, in which case the data length equals the sequence  |  | 
|     length.  To achieve greater precision, the sender can calculate the   |  | 
|     exact number of non-data packets in an interval by remembering which  |  | 
|     sent packets contained data; the receiver can count non-data packets  |  | 
|     received or received ECN-marked, and for packets that were not        |  | 
|     received, it may be able to discriminate between lost data packets    |  | 
|     and lost non-data packets using DCCP's NDP Count option.              |  | 
|                                                                             |  | 
|     For the first loss interval, the data length is undefined until the   |  | 
|     first loss event.  RFC 3448 (Section 6.3.1) specifies how the first   |  | 
|     loss interval's data length is calculated once the first loss event   |  | 
|     has occurred; this calculation uses X_recv, the most recent receive   |  | 
|     rate, as input.  Until this first loss event, the loss event rate is  |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                            Section 6.1.1.  [Page 19]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     zero, as is the data length reported for the interval in the Loss     |  | 
|     Intervals option.                                                     |  | 
|                                                                             |  | 
|     The first loss interval's data length might be less than, equal to,   |  | 
|     or even greater than its sequence length.  Any other loss interval's  |  | 
|     data length must be less than or equal to its sequence length.        |  | 
|                                                                             |  | 
|     A sender MAY use the loss event rate or loss interval data lengths    |  | 
|     as reported by the receiver, or it MAY recalculate loss event rate    |  | 
|     and/or loss interval data lengths based on receiver feedback and      |  | 
|     additional information.  For example, assume the network drops a      |  | 
|     DCCP-Ack packet with sequence number 50.  The receiver might then   |  | 
|     report a loss interval beginning at sequence number 50.  If the   |  | 
|     sender determined that this loss interval actually contained no lost  |  | 
|     or ECN-marked data packets, then it might coalesce the loss interval |  | 
|     with the previous loss interval, resulting in a larger allowed    |  | 
|     transmit rate.                                                        |  | 
|                                                                             |  | 
| 6.2.  Congestion Control on Acknowledgements                                |  | 
|                                                                             |  | 
|     The rate and timing for generating acknowledgements is determined by    |  | 
|     the TFRC algorithm [RFC 3448] (Section 6).  The sending rate for      |     the TFRC algorithm [RFC 3448].  The sending rate for               | 
|     acknowledgements is relatively low -- roughly once per round-trip       |  | 
|     time -- so there is no need for explicit congestion control on          |  | 
|     acknowledgements.                                                       |  | 
|                                                                             |  | 
| 6.3.  Acknowledgements of Acknowledgements                                  |  | 
|                                                                             |  | 
|     TFRC acknowledgements don't generally need to be reliable, so the       |  | 
|     sender generally need not acknowledge the receiver's                    |  | 
|     acknowledgements.  When Ack Vector is used, however, the sender,        |  | 
|     DCCP A, MUST occasionally acknowledge the receiver's                    |  | 
|     acknowledgements so that the receiver can free up Ack Vector state.     |  | 
|     When both half-connections are active, the necessary                    |  | 
|     acknowledgements will be contained in A's acknowledgements to B's       |  | 
|     data.  If the B-to-A half-connection goes quiescent, however, DCCP A    |  | 
|     must send an acknowledgement proactively.                               |  | 
|                                                                             |  | 
|     Thus, when Ack Vector is used, an active sender MUST acknowledge the    |  | 
|     receiver's acknowledgements approximately once per round-trip time,     |  | 
|     within a factor of two or three, probably by sending a DCCP-DataAck     |  | 
|     packet.  No acknowledgement options are necessary, just the             |  | 
|     Acknowledgement Number in the DCCP-DataAck header.                      |  | 
|                                                                             |  | 
|     The sender MAY choose to acknowledge the receiver's acknowledgements    |  | 
|     even if they do not contain Ack Vectors.  For instance, regular         |  | 
|     acknowledgements can shrink the size of the Loss Intervals option.      |  | 
|     Unlike the Ack Vector, however, the Loss Intervals option is bounded    |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                              Section 6.3.  [Page 20]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     in size (and receiver state), so acks-of-acks are not required.         |  | 
|                                                                             |  | 
| 6.4.  Quiescence                                                            |  | 
|                                                                             |  | 
|     This section describes how a CCID 3 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 3 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.  (A    |  | 
|     CCID 3 receiver has a rough measure of the round-trip time, so that     |  | 
|     it can pace its acknowledgements.)  The receiver detects that the       |  | 
|     sender has gone quiescent after T seconds have passed without           |  | 
|     receiving any additional data from the sender.                          |  | 
|                                                                             |  | 
| 7.  Explicit Congestion Notification                                        |  | 
|                                                                             |  | 
|     CCID 3 supports Explicit Congestion Notification (ECN) [RFC 3168].      |  | 
|     In the typical case of an ECN-capable half-connection (where the      |     The sender will use the ECN Nonce for its data packets, as specified | 
|     receiver's ECN Incapable feature is set to zero), the sender will     |     in Section 12.2 of [DCCP].  Information about the ECN Nonce is   | 
|     use the ECN Nonce for its data packets, as specified in [DCCP]        |     returned by the receiver using the Loss Intervals option.          | 
|     (Section 12.2).  Information about the ECN Nonce MUST be returned by |     Additionally, any Ack Vector options will include the ECN Nonce Sum. | 
|     the receiver using the Loss Intervals option, and any Ack Vector      |     The sender can maintain a table with the ECN nonce sum for each    | 
|     options MUST include the ECN Nonce Sum.  The sender MAY maintain a  |     packet, and use this information to probabilistically verify the ECN | 
|     table with the ECN nonce sum for each packet, and use this              |     nonce sums returned in Loss Intervals or Ack Vector options.         | 
|     information to probabilistically verify the ECN nonce sums returned     |     Section 9 describes this further.                                    | 
|     in Loss Intervals or Ack Vector options.  Section 9 describes this      |  | 
|     further.                                                                |  | 
|                                                                             |  | 
| 8.  Options and Features                                                    |  | 
|                                                                             |  | 
|     CCID 3 can make use of DCCP's Ack Vector, Timestamp, Timestamp Echo,    |  | 
|     and Elapsed Time options, and its Send Ack Vector and ECN Incapable     |  | 
|     features.  In addition, the following CCID-specific options are         |  | 
|     defined for use with CCID 3.                                            |  | 
|                                                                             |  | 
|                    Option                        DCCP-   Section            |  | 
|           Type     Length     Meaning            Data?  Reference           |  | 
|           -----    ------     -------            -----  ---------           |  | 
|          128-191              Reserved                                      |  | 
|            192        6       Loss Event Rate      N      8.5               |  | 
|            193     variable   Loss Intervals       N      8.6               |  | 
|            194        6       Receive Rate         N      8.3               |  | 
|          195-255              Reserved                                      |  | 
|                                                                             |  | 
|                        Table 1: DCCP CCID 3 Options                         |  | 
|                                                                             |  | 
|     The "DCCP-Data?" column indicates that all currently defined          |     The DCCP-Data? column indicates that all currently defined         | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                                Section 8.  [Page 21]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     CCID 3-specific options MUST be ignored when they occur on DCCP-Data    |  | 
|     packets.                                                                |  | 
|                                                                             |  | 
|     The following CCID-specific feature is also defined.                    |  | 
|                                                                             |  | 
|                                         Rec'n Initial        Section        |  | 
|       Number   Meaning                  Rule   Value  Req'd Reference       |  | 
|       ------   -------                  -----  -----  ----- ---------       |  | 
|       128-191  Reserved                                                     |  | 
|         192    Send Loss Event Rate      SP      0      N      8.4          |  | 
|       193-255  Reserved                                                     |  | 
|                                                                             |  | 
|                    Table 2: DCCP CCID 3 Feature Numbers                     |  | 
|                                                                             |  | 
|     The column meanings are described in [DCCP] (Table 4).  "Rec'n Rule" |     The columns are defined in Table 4 of [DCCP].  Rec'n Rule defines | 
|     defines the feature's reconciliation rule, where "SP" means server-   |     the feature's reconciliation rule, where "SP" means server-priority. | 
|     priority.  "Req'd" specifies whether every CCID 3 implementation      |     Req'd specifies whether every CCID 3 implementation MUST understand | 
|     MUST understand a feature; Send Loss Event Rate is optional, in that    |     a feature; in this case, Send Loss Event Rate is optional, in that | 
|     it behaves like an extension [DCCP] (Section 15).                     |     it behaves like an extension (see Section 15 of [DCCP]).           | 
|                                                                             |  | 
| 8.1.  Window Counter Value                                                  |  | 
|                                                                             |  | 
|     The data sender stores a 4-bit window counter value in the DCCP         |  | 
|     generic header's CCVal field on every data packet it sends.  This       |  | 
|     value is set to 0 at the beginning of the transmission, and             |  | 
|     generally increased by 1 every quarter of a round-trip time, as         |  | 
|     described in RFC 3448 (Section 3.2.1).  For reference, the DCCP       |     described in [RFC 3448].  For reference, the DCCP generic header is | 
|     generic header is as follows (diagram repeated from [DCCP], which       |     as follows (diagram repeated from [DCCP], which also shows the       | 
|     also shows the generic header with a 24-bit Sequence Number field).     |     generic header with a 24-bit Sequence Number field).                 | 
|                                                                             |  | 
|      0                   1                   2                   3          |  | 
|      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1        |  | 
|     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+       |  | 
|     |          Source Port          |           Dest Port           |       |  | 
|     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+       |  | 
|     |  Data Offset  | CCVal | CsCov |           Checksum            |       |  | 
|     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+       |  | 
|     | Res | Type  |1|   Reserved    |  Sequence Number (high bits)  .       |  | 
|     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+       |  | 
|     .                  Sequence Number (low bits)                   |       |  | 
|     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+       |  | 
|                                                                             |  | 
|     The CCVal field has enough space to express 4 round-trip times at       |  | 
|     quarter-RTT granularity.  The sender MUST avoid wrapping CCVal on       |  | 
|     adjacent packets, as might happen, for example, if two data-carrying    |  | 
|     packets were sent 4 round-trip times apart with no packets              |  | 
|     intervening.  Therefore, the sender SHOULD use the following            |  | 
|     algorithm for setting CCVal.  The algorithm uses three variables:       |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                              Section 8.1.  [Page 22]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     "last_WC" holds the last window counter value sent, "last_WC_time"      |  | 
|     is the time at which the first packet with window counter value         |  | 
|     "last_WC" was sent, and "RTT" is the current round-trip time            |  | 
|     estimate.  last_WC is initialized to zero, and last_WC_time to the      |  | 
|     time of the first packet sent.  Then, before sending a new packet,      |  | 
|     proceed like this:                                                      |  | 
|                                                                             |  | 
|       Let quarter_RTTs = floor((current_time - last_WC_time) / (RTT/4)).    |  | 
|       If quarter_RTTs > 0, then:                                            |  | 
|           Set last_WC := (last_WC + min(quarter_RTTs, 5)) mod 16, and       |  | 
|           Set last_WC_time := current_time.                                 |  | 
|       Set the packet header's CCVal field to last_WC.                       |  | 
|                                                                             |  | 
|     When this algorithm is used, adjacent data-carrying packets' CCVal      |  | 
|     counters never differ by more than five, modulo 16.                     |  | 
|                                                                             |  | 
|     The window counter value may also change as feedback packets arrive.    |  | 
|     In particular, after receiving an acknowledgement for a packet sent     |  | 
|     with window counter WC, the sender SHOULD increase its window           |  | 
|     counter, if necessary, so that subsequent packets have window           |  | 
|     counter value at least (WC + 4) mod 16.                                 |  | 
|                                                                             |  | 
|     The CCVal counters are used by the receiver to determine whether        |  | 
|     multiple losses belong to a single loss event, to determine the         |  | 
|     interval to use for calculating the receive rate, and to determine      |  | 
|     when to send feedback packets.  None of these procedures require the    |  | 
|     receiver to maintain an explicit estimate of the round-trip time.       |  | 
|     However, implementors who wish to keep such an RTT estimate may do      |  | 
|     so using CCVal.  Let T(I) be the arrival time of the earliest valid     |  | 
|     received packet with CCVal = I.  (Of course, when the window counter    |  | 
|     value wraps around to the same value mod 16, we must recalculate        |  | 
|     T(I).)  Let D = 2, 3, or 4, and say that T(K) and T(K+D) both exist     |  | 
|     (packets were received with window counters K and K+D).  Then the       |  | 
|     value (T(K+D) - T(K)) * 4/D MAY serve as an estimate of the round-      |  | 
|     trip time.  Values of D = 4 SHOULD be preferred for RTT estimation.     |  | 
|     Concretely, say that the following packets arrived:                     |  | 
|                                                                             |  | 
|     Time:       T1  T2  T3 T4  T5           T6  T7   T8  T9                 |  | 
|            ------*---*---*-*----*------------*---*----*--*---->             |  | 
|     CCVal:      K-1 K-1  K K   K+1          K+3 K+4  K+3 K+4                |  | 
|                                                                             |  | 
|     Then T7 - T3, the difference between the receive times of the first     |  | 
|     packet received with window counter K+4 and the first packet            |  | 
|     received with window counter K, is a reasonable round-trip time         |  | 
|     estimate.  Because of the necessary constraint that measurements can    |  | 
|     only come from packet pairs whose CCVals differ by at most 4, this      |  | 
|     procedure does not work when the inter-packet sending times are         |  | 
|     significantly greater than the RTT, resulting in packet pairs whose     |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                              Section 8.1.  [Page 23]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     CCVals differ by 5.  Explicit RTT measurement techniques, such as       |  | 
|     Timestamp and Timestamp Echo, should be used in that case.              |  | 
|                                                                             |  | 
| 8.2.  Elapsed Time Options                                                  |  | 
|                                                                             |  | 
|     The data receiver MUST include an elapsed time value on every           |  | 
|     required acknowledgement.  This helps the sender distinguish between    |  | 
|     network round-trip time, which it must include in its rate              |  | 
|     equations, and delay at the receiver due to TFRC's infrequent           |  | 
|     acknowledgement rate, which it need not include.  The elapsed time      |  | 
|     value is included in one, or possibly two, ways:                        |  | 
|                                                                             |  | 
|     1.  If at least one recent data packet (i.e., a packet received         |  | 
|         after the previous DCCP-Ack was sent) included a Timestamp          |  | 
|         option, then the receiver SHOULD include the corresponding          |  | 
|         Timestamp Echo option, with Elapsed Time value.                     |  | 
|                                                                             |  | 
|     2.  In any case, the receiver MUST include an Elapsed Time option.      |  | 
|                                                                             |  | 
|     All these option types are defined in the main DCCP specification       |  | 
|     [DCCP].                                                                 |  | 
|                                                                             |  | 
| 8.3.  Receive Rate Option                                                   |  | 
|                                                                             |  | 
|     +--------+--------+--------+--------+--------+--------+                 |  | 
|     |11000010|00000110|            Receive Rate           |                 |  | 
|     +--------+--------+--------+--------+--------+--------+                 |  | 
|      Type=194   Len=6                                                       |  | 
|                                                                             |  | 
|     This option MUST be sent by the data receiver on all required           |  | 
|     acknowledgements.  Its four data bytes indicate the rate at which       |  | 
|     the receiver has received data since it last sent an                    |  | 
|     acknowledgement, in bytes per second.  To calculate this receive      |     acknowledgement, in bytes per second.  The Receive Rate is         | 
|     rate, the receiver sets t to the larger of the estimated round-trip |     calculated as the number of bytes received in the most recent t  | 
|     time and the time since the last Receive Rate option was sent.    |     seconds, divided by t, where t is the larger of the following:  the | 
|     (Received data packets' window counters can be used to produce a  |     time since the last Receive Rate Option was sent, and the estimated | 
|     suitable RTT estimate, as described in Section 8.1.)  The receive     |     round-trip time.  The receiver can use the Window Counter Value in | 
|     rate then equals the number of data bytes received in the most      |     received data packets to determine if an interval of t seconds   | 
|     recent t seconds, divided by t.                                     |     corresponds to at least a round-trip time.                         | 
|                                                                             |  | 
|     Receive Rate options MUST NOT be sent on DCCP-Data packets, and any     |  | 
|     Receive Rate options on received DCCP-Data packets MUST be ignored.     |  | 
|                                                                             |  | 
| 8.4.  Send Loss Event Rate Feature                                          |  | 
|                                                                             |  | 
|     The Send Loss Event Rate feature lets CCID 3 endpoints negotiate        |  | 
|     whether the receiver MUST provide Loss Event Rate options on its        |  | 
|     acknowledgements.  DCCP A sends a "Change R(Send Loss Event Rate,       |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                              Section 8.4.  [Page 24]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     1)" option to ask DCCP B to send Loss Event Rate options as part of     |  | 
|     its acknowledgement traffic.                                            |  | 
|                                                                             |  | 
|     Send Loss Event Rate has feature number 192, and is server-priority.    |  | 
|     It takes one-byte Boolean values.  DCCP B MUST send Loss Event Rate     |  | 
|     options on its acknowledgements when Set Loss Event Rate/B is one,      |  | 
|     although it MAY send Loss Event Rate options even when Send Loss        |  | 
|     Event Rate/B is zero.  Values of two or more are reserved.  A CCID 3    |  | 
|     half-connection starts with Send Loss Event Rate equal to zero.         |  | 
|                                                                             |  | 
| 8.5.  Loss Event Rate Option                                                |  | 
|                                                                             |  | 
|     +--------+--------+--------+--------+--------+--------+                 |  | 
|     |11000000|00000110|          Loss Event Rate          |                 |  | 
|     +--------+--------+--------+--------+--------+--------+                 |  | 
|      Type=192   Len=6                                                       |  | 
|                                                                             |  | 
|     The option value indicates the inverse of the loss event rate,          |  | 
|     rounded UP, as calculated by the receiver.  Its units are data        |     rounded UP, as calculated by the receiver.  Its units are packets    | 
|     packets per loss interval.  Thus, if the Loss Event Rate option         |     per loss interval.  Thus, if the Loss Event Rate option value is     | 
|     value is 100, then the loss event rate is 0.01 loss events per data   |     100, then the loss event rate is 0.01 loss events per packet (and    | 
|     packet (and the average loss interval contains 100 data packets).     |     the average loss interval contains 100 packets).  When each loss     | 
|     When each loss event has exactly one data packet loss, the loss       |     event has exactly one packet loss, the loss event rate is the same   | 
|     event rate is the same as the data packet drop rate.                  |     as the packet drop rate.                                             | 
|                                                                             |     See [RFC 3448] for a normative calculation of loss event rate.       | 
|     See [RFC 3448] (Section 5) for a normative calculation of loss event  |     Before any losses have occurred, when the loss event rate is zero,   | 
|     rate.  Before any losses have occurred, when the loss event rate is     |     the Loss Event Rate option value is set to                           | 
|     zero, the Loss Event Rate option value is set to                        |  | 
|     "11111111111111111111111111111111" in binary (or equivalently, to       |  | 
|     2^32 - 1).  The loss event rate calculation uses loss interval data   |     2^32 - 1).                                                           | 
|     lengths, as defined in Section 6.1.1.                                 |  | 
|                                                                             |  | 
|     Loss Event Rate options MUST NOT be sent on DCCP-Data packets, and      |  | 
|     any Loss Event Rate options on received DCCP-Data packets MUST be       |  | 
|     ignored.                                                                |  | 
|                                                                             |  | 
| 8.6.  Loss Intervals Option                                                 |  | 
|                                                                             |  | 
|     +--------+--------+--------+--------...--------+--------+---          |                                  ___ Loss Interval ___                 | 
|     |11000001| Length |  Skip  |   Loss Interval   | More Loss            |                                 /                     \                | 
|     |        |        | Length |                   | Intervals...         |     +--------+--------+--------+----...----+----...----+--------+---   | 
|     +--------+--------+--------+--------...--------+--------+---          |     |11000001| Length |  Skip  | Lossless  |E|  Loss   | More Loss     | 
|      Type=193                         9 bytes                             |     |        |        | Length |  Length   | | Length  | Intervals... | 
|                                                                             |     +--------+--------+--------+----...----+----...----+--------+---   | 
|     Each 9-byte Loss Interval contains three fields, as follows:          |      Type=193                     3 bytes     3 bytes                  | 
|                                                                             |     This option MUST be sent by the data receiver on all required        | 
|                                                                             |     acknowledgements.  The option reports up to 42 loss intervals seen | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                              Section 8.6.  [Page 25]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|       ____________________ Loss Interval _____________________            |  | 
|      /                                                        \           |  | 
|     +--------...-------+--------...--------+--------...--------+          |  | 
|     | Lossless Length  |E|   Loss Length   |    Data Length    |        |  | 
|     +--------...-------+--------...--------+--------...--------+          |  | 
|            3 bytes            3 bytes             3 bytes                 |  | 
|                                                                             |  | 
|     The receiver reports its observed loss intervals using a Loss         |  | 
|     Intervals option.  (Section 6.1 defines loss intervals.)  This        |  | 
|     option MUST be sent by the data receiver on all required                |  | 
|     acknowledgements.  The option reports up to 28 loss intervals seen    |  | 
|     by the receiver (although TFRC currently uses at most the latest 9      |  | 
|     of these).  This lets the sender calculate a loss event rate and        |  | 
|     probabilistically verify the receiver's ECN Nonce Echo.                 |  | 
| || TEXT DELETED ||                                                          |     As specified in [RFC 3448], the length of the loss interval is the | 
|                                                                             |     number of packets transmitted in the lossy and lossless parts of the | 
|     The Loss Intervals option serves several purposes.                      |     loss interval.  The receiver computes the weighted average of the  | 
|  |     last eight loss interval lengths, to get the average loss interval | 
|  |     in packets.  The Loss Event Rate, discussed in option 192, is the  | 
|  |     inverse of the average loss interval, in units of loss events per  | 
|  |     packet.  Thus, if the average loss interval is 100 packets, this   | 
|  |     gives a loss event rate of 0.01 loss events per packet.            | 
|                                                                             |  | 
|     o  The sender can use the Loss Intervals option to calculate the      |     o  The sender uses the Loss Intervals option to calculate the Loss | 
|        Loss Event Rate.                                                     |        Event Rate.                                                       | 
|                                                                             |  | 
|     o  Loss Intervals information is easily checked for consistency         |  | 
|        against previous Loss Intervals options, and against any Loss        |  | 
|        Event Rate calculated by the receiver.                               |  | 
|                                                                             |  | 
|     o  The sender can probabilistically verify the ECN Nonce Echo for       |  | 
|        each Loss Interval, reducing the likelihood of misbehavior.          |  | 
|                                                                             |  | 
|     Loss Intervals options MUST NOT be sent on DCCP-Data packets, and     |     Loss Interval options MUST NOT be sent on DCCP-Data packets, and any | 
|     any Loss Intervals options on received DCCP-Data packets MUST be      |     Loss Interval options on received DCCP-Data packets MUST be ignored. | 
|     ignored.                                                                |  | 
|                                                                             |  | 
| 8.6.1.  Option Details                                                      |  | 
|                                                                             |  | 
|     The Loss Intervals option contains information about between one and    |  | 
|     28 consecutive loss intervals, always including the most recent loss  |     42 consecutive loss intervals, always including the most recent loss | 
|     interval.  Intervals are listed in reverse chronological order.         |     interval.  Intervals are listed in reverse chronological order.  The | 
|     Should more than 28 loss intervals need to be reported, then          |     option MUST contain information about at least the most recent     | 
|     multiple Loss Intervals options can be sent; the second option        |     NINTERVAL + 1 = 9 loss intervals unless (1) there have not yet been  | 
|     begins where the first left off, and so forth.  The options MUST      |     NINTERVAL + 1 loss intervals, or (2) the receiver knows, because of  | 
|     contain information about at least the most recent NINTERVAL + 1 = 9    |     the sender's acknowledgements, that some previously-transmitted loss | 
|     loss intervals unless (1) there have not yet been NINTERVAL + 1 loss    |     interval information has been received.  In this second case, the    | 
|     intervals, or (2) the receiver knows, because of the sender's           |     receiver need not send loss intervals that the sender already knows  | 
|     acknowledgements, that some previously-transmitted loss interval        |     about, except that it MUST transmit at least one loss interval       | 
|     information has been received.  In this second case, the receiver       |     regardless.  The NINTERVAL parameter is equal to "n" as defined in   | 
|     need not send loss intervals that the sender already knows about,       |     Section 5.4 of [RFC 3448].                                         | 
|     except that it MUST transmit at least one loss interval regardless.     |  | 
|     The NINTERVAL parameter is equal to "n" as defined in RFC 3448        |  | 
|     (Section 5.4).                                                        |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                            Section 8.6.1.  [Page 26]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     Loss interval sequence numbers are delta-encoded starting from the      |  | 
|     Acknowledgement Number.  Therefore, Loss Intervals options MUST NOT     |  | 
|     be sent on packets without an Acknowledgement Number.                   |  | 
|                                                                             |  | 
|     The first byte of option data is Skip Length, which indicates the       |  | 
|     number of packets up to and including the Acknowledgement Number        |  | 
|     that are not part of any Loss Interval.  As discussed above, Skip       |  | 
|     Length must be less than or equal to NDUPACK = 3.                       |  | 
|                                                                             |  | 
|     Loss Interval structures follow Skip Length.  Each Loss Interval        |  | 
|     consists of a Lossless Length, a Loss Length, an ECN Nonce Echo (E),  |     consists of a Lossless Length, a Loss Length, and an ECN Nonce Echo | 
|     and a Data Length.                                                    |     (E).                                                               | 
|                                                                             |  | 
|     Lossless Length, a 24-bit number, specifies the number of packets in    |  | 
|     the loss interval's lossless part.                                    |  | 
|                                                                             |  | 
|     Loss Length, a 23-bit number, specifies the number of packets in the  |  | 
|     loss interval's lossy part.  The sum of the Lossless Length and the   |     loss interval's lossy part.                                      | 
|     Loss Length equals the loss interval's sequence length.  Receivers    |  | 
|     SHOULD report the minimum valid Loss Length for each loss interval, |  | 
|     making the first and last sequence numbers in each lossy part   |  | 
|     correspond to lost or marked data packets.                            |  | 
|                                                                             |  | 
|     The ECN Nonce Echo, stored in the high-order bit of the 3-byte field    |  | 
|     containing Loss Length, equals the one-bit sum (exclusive-or, or        |  | 
|     parity) of data packet nonces received over the loss interval's       |     parity) of nonces received over the loss interval's lossless part    | 
|     lossless part (which is Lossless Length packets long).  If Lossless     |     (which is Lossless Length packets long).  If Lossless Length is 0,   | 
|     Length is 0, the receiver is ECN-incapable, or the Lossless Length    |     or if the receiver is ECN-incapable, the ECN Nonce Echo MUST be    | 
|     contained no data packets, then the ECN Nonce Echo MUST be reported   |     reported as 0.                                                       | 
|     as 0.                                                                   |  | 
|                                                                             |  | 
|     Finally, Data Length, a 24-bit number, specifies the loss interval's  |  | 
|     data length, as defined in Section 6.1.1.                             |  | 
|                                                                             |  | 
| 8.6.2.  Example                                                             |  | 
|                                                                             |  | 
|     Consider the following sequence of packets, where "-" represents a      |  | 
|     safely delivered packet and "*" represents a lost or marked packet.     |  | 
|                                                                             |  | 
|     Sequence                                                                |  | 
|      Numbers: 0         10        20        30        40  44                |  | 
|               |         |         |         |         |   |                 |  | 
|               ----------*--------***-*--------*----------*-               |               --*-*-----*--------***-*--------*----------*-            | 
|                                                                             |  | 
|     Assuming that packet 43 was lost, not marked, this sequence might be    |  | 
|     divided into loss intervals as follows:                                 |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                            Section 8.6.2.  [Page 27]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|               0         10        20        30        40  44                |  | 
|               |         |         |         |         |   |                 |  | 
|               ----------*--------***-*--------*----------*-               |               --*-*-----*--------***-*--------*----------*-            | 
|               \________/\_______/\___________/\_________/                 |               \/\______/\_______/\___________/\_________/              | 
|                   L0       L1         L2          L3                        |               L0   L1      L2         L3           L4                  | 
|                                                                             |  | 
|     A Loss Intervals option sent to acknowledge this set of loss            |  | 
|     intervals, on a packet with Acknowledgement Number 44, might contain    |  | 
|     the bytes 193,39,2, 0,0,10, 128,0,1, 0,0,10, 0,0,8, 0,0,5, 0,0,10, |     the bytes 193,33,2, 0,0,10, 128,0,1, 0,0,8, 0,0,5, 0,0,8, 0,0,1,   | 
|     0,0,8, 0,0,1, 0,0,8, 0,0,10, 128,0,0, 0,0,15.  This option is         |     0,0,5, 128,0,3, 0,0,2, 128,0,0.  This option is interpreted as     | 
|     interpreted as follows.                                                 |     follows.                                                             | 
|                                                                             |  | 
|     193 The Loss Intervals option number.                                   |  | 
|                                                                             |  | 
|     39  The length of the option, including option type and length        |     33  The length of the option, including option type and length     | 
|         bytes.  This option contains information about (39 - 3)/9 = 4 |         bytes.  This option contains information about (33 - 3)/6 = 5 | 
|         loss intervals.                                                     |  | 
|                                                                             |  | 
|     2   The Skip Length is 2 packets.  Thus, the most recent loss           |  | 
|         interval, L3, ends immediately before sequence number 44 - 2 + 1  |         interval, L4, ends immediately before sequence number 44 - 2 + 1 | 
|         = 43.                                                               |  | 
|                                                                             |  | 
|     0,0,10, 128,0,1, 0,0,10                                               |     0,0,10, 128,0,1                                                    | 
|         These bytes define L3.  L3 consists of a 10-packet lossless part  |         These bytes define L4.  L4 consists of a 10-packet lossless part | 
|         (0,0,10), preceded by a 1-packet lossy part.  Continuing to         |  | 
|         subtract, the lossless part begins with sequence number 43 - 10     |  | 
|         = 33, and the lossy part begins with sequence number 33 - 1 =       |  | 
|         32.  The ECN Nonce Echo for the lossless part, namely packets 33    |  | 
|         through 42, inclusive, equals 1.  The interval's data length is   |         through 42, inclusive, equals 1.                                 | 
|         10, so the receiver believes that the interval contained exactly  |     0,0,8, 0,0,5                                                       | 
|         one non-data packet.                                              |         This defines L3, whose lossless part begins with sequence number | 
|                                                                             |  | 
|     0,0,8, 0,0,5, 0,0,10                                                  |  | 
|         This defines L2, whose lossless part begins with sequence number  |  | 
|         32 - 8 = 24; whose lossy part begins with sequence number 24 - 5    |  | 
|         = 19; whose ECN Nonce Echo (for packets [24,31]) equals 0; and    |         = 19; and whose ECN Nonce Echo (for packets [24,31]) equals 0. | 
|         whose data length is 10.                                          |     0,0,8, 0,0,1                                                       | 
|                                                                             |         L2's lossless part begins with sequence number 11, its lossy   | 
|     0,0,8, 0,0,1, 0,0,8                                                   |         part begins with sequence number 10, and its ECN Nonce Echo (for | 
|         L1's lossless part begins with sequence number 11, its lossy      |         packets [11,18]) equals 0.                                     | 
|         part begins with sequence number 10, its ECN Nonce Echo (for        |     0,0,5, 128,0,3                                                     | 
|         packets [11,18]) equals 0, and its data length is 8.            |         L1's lossless part begins with sequence number 5, its lossy part | 
|                                                                             |         begins with sequence number 2, and its ECN Nonce Echo (for   | 
|     0,0,10, 128,0,0, 0,0,15                                               |         packets [5,9]) equals 1.                                       | 
|         L0's lossless part begins with sequence number 0, it has no         |     0,0,2, 128,0,0                                                     | 
|         lossy part, its ECN Nonce Echo (for packets [0,1]) equals 1, and  |         lossy part, and its ECN Nonce Echo (for packets [0,1]) equals 1. | 
|         its data length is 15.  (This must be the first loss interval in  |  | 
|         the connection; otherwise, a data length greater than the         |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                            Section 8.6.2.  [Page 28]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|         sequence length would be invalid.)                                |  | 
|                                                                             |  | 
| 9.  Verifying Congestion Control Compliance With ECN                        |  | 
|                                                                             |  | 
|     The sender can use Loss Intervals options' ECN Nonce Echoes (and        |  | 
|     possibly any Ack Vectors' ECN Nonce Echoes) to probabilistically        |  | 
|     verify that the receiver is correctly reporting all dropped or          |  | 
|     marked packets.  Even if ECN is not used (the receiver's ECN          |     marked packets.  Even if ECN is not used (the ECN Incapable feature  | 
|     Incapable feature is set to one), the sender could still check on       |     is set to one), the sender could still check on the receiver by      | 
|     the receiver by occasionally not sending a packet, or sending a         |     occasionally not sending a packet, or sending a packet out-of-order, | 
|     packet out-of-order, to catch the receiver in an error in Loss          |     to catch the receiver in an error in Loss Intervals or Ack Vector    | 
|     Intervals or Ack Vector information.  This is not as robust or as       |     information.  This is not as robust or as non-intrusive as the       | 
|     non-intrusive as the verification provided by the ECN Nonce,            |     verification provided by the ECN Nonce, however.                     | 
|     however.                                                                |  | 
|                                                                             |  | 
| 9.1.  Verifying the ECN Nonce Echo                                          |  | 
|                                                                             |  | 
|     To verify the ECN Nonce Echo included with a Loss Intervals option,     |  | 
|     the sender maintains a table with the ECN nonce sum for each data     |     the sender maintains a table with the ECN nonce sum for each packet. | 
|     packet.  As defined in RFC 3540, the nonce sum for sequence number S  |     As defined in [RFC 3540], the nonce sum for sequence number S is the | 
|     is the one-bit sum (exclusive-or, or parity) of data packet nonces    |     one-bit sum (exclusive-or, or parity) of nonces over the sequence    | 
|     over the sequence number range [I,S], where I is the initial            |     number range [I,S], where I is the initial sequence number.  Let     | 
|     sequence number.  Let NonceSum(S) represent this nonce sum for          |     NonceSum(S) represent this nonce sum for sequence number S, and let  | 
|     sequence number S, and let NonceSum(I - 1) equal 0.  Then the Nonce     |     NonceSum(I - 1) equal 0.  Then the Nonce Echo for a loss interval    | 
|     Echo for a loss interval [Left Edge, Left Edge + Offset) should         |     [Left Edge, Left Edge + Offset) should equal the following one-bit   | 
|     equal the following one-bit sum:                                        |     sum:                                                                 | 
|                                                                             |  | 
|        NonceSum(Left Edge - 1) + NonceSum(Left Edge + Offset - 1).          |  | 
|                                                                             |  | 
|     Since an ECN Nonce Echo is returned for the lossless part of each       |  | 
|     Loss Interval, a misbehaving receiver -- meaning a receiver that        |  | 
|     reports a lost or marked data packet as "received non-marked", to     |     reports a lost or marked packet as "received non-marked", to avoid   | 
|     avoid rate reductions -- has only a 50% chance of guessing the          |     rate reductions -- has only a 50% chance of guessing the correct     | 
|     correct Nonce Echo for each loss interval.                              |     Nonce Echo for each loss interval.                                   | 
|                                                                             |  | 
|     To verify the ECN Nonce Echo included with an Ack Vector option, the    |  | 
|     sender maintains a table with the ECN nonce value sent for each         |  | 
|     packet.  The Ack Vector option explicitly says which packets were       |  | 
|     received non-marked; the sender just adds up the nonces for those       |  | 
|     packets using a one-bit sum, and compares the result to the Nonce       |  | 
|     Echo encoded in the Ack Vector's option type.  Again, a misbehaving     |  | 
|     receiver has only a 50% chance of guessing an Ack Vector's correct      |  | 
|     Nonce Echo.  [DCCP] (Appendix A) describes this further.              |     Nonce Echo.  Appendix A of [DCCP] describes this further.          | 
|     Alternatively, an Ack Vector's ECN Nonce Echo may also be calculated    |  | 
|     from a table of ECN nonce sums, rather than ECN nonces.  If the Ack     |  | 
|     Vector contains many long runs of non-marked, non-dropped packets,      |  | 
|     the nonce sum-based calculation will probably be faster than a          |  | 
|     straightforward nonce-based calculation.                                |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                              Section 9.1.  [Page 29]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     Note that Ack Vector's ECN Nonce Echo is measured over both data      |  | 
|     packets and non-data packets, while the Loss Intervals option         |  | 
|     reports ECN Nonce Echoes for data packets only.                       |  | 
|                                                                             |  | 
| 9.2.  Verifying the Reported Loss Intervals and Loss Event Rate             |  | 
|                                                                             |  | 
|     Besides probabilistically verifying the ECN Nonce Echoes reported by    |  | 
|     the receiver, the sender may also verify the loss intervals and any     |  | 
|     loss event rate reported by the receiver, if it so desires.             |  | 
|     Specifically, the Loss Intervals option explicitly reports the size     |  | 
|     of each loss interval as seen by the receiver; the sender can verify    |  | 
|     that the receiver is not falsely combining two loss events into one     |  | 
|     reported Loss Interval by using saved window counter information.     |     reported Loss Interval by using saved Window Counter information.  | 
|     The sender can also compare any Loss Event Rate option to the loss      |  | 
|     event rate it calculates using the Loss Intervals option.               |  | 
|                                                                             |  | 
|     We note that in some cases the loss event rate calculated by the        |  | 
|     sender could differ from an explicit Loss Event Rate option sent by     |  | 
|     the receiver.  In particular, when a number of successive packets       |  | 
|     are dropped, the receiver does not know the sending times for these     |  | 
|     packets, and interprets these losses as a single loss event.  In        |  | 
|     contrast, if the sender has saved the sending times or window           |     contrast, if the sender has saved the sending times or the window  | 
|     counter information for these packets, then the sender can determine    |  | 
|     if these losses constitute a single loss event, or several              |  | 
|     successive loss events.   Thus, with its knowledge of the sending       |  | 
|     times of dropped packets, the sender is able to make a more accurate    |  | 
|     calculation of the loss event rate.  These kinds of differences         |  | 
|     SHOULD NOT be misinterpreted as attempted receiver misbehavior.         |  | 
|                                                                             |  | 
| 10.  Implementation Issues                                                  |  | 
|                                                                             |  | 
| 10.1.  Timestamp Usage                                                      |  | 
|                                                                             |  | 
|     CCID 3 data packets need not carry Timestamp options.  The sender       |  | 
|     can store the times at which recent packets were sent; the              |  | 
|     Acknowledgement Number and Elapsed Time option contained on each        |  | 
|     required acknowledgement then provide sufficient information to         |  | 
|     compute the round trip time.  Alternatively, the sender MAY include     |  | 
|     Timestamp options on a limited subset of its data packets.  The         |  | 
|     receiver will respond with Timestamp Echo options including Elapsed     |  | 
|     Times, allowing the sender to calculate round-trip times without        |  | 
|     storing timestamps at all.                                              |  | 
|                                                                             |  | 
| 10.2.  Determining Loss Events at the Receiver                              |  | 
|                                                                             |  | 
|     The window counter is used by the receiver to determine if multiple     |  | 
|     lost packets belong to the same loss event.  The sender increases       |  | 
|     the window counter by one every quarter round-trip time.  This          |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                             Section 10.2.  [Page 30]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     section describes in detail the procedure for using the window          |  | 
|     counter to determine when two lost packets belong to the same loss      |  | 
|     event.                                                                  |  | 
|                                                                             |  | 
|     Section 3.2.1 of RFC 3448 specifies that each data packet contains a  |     RFC 3448 specifies that each data packet contains a timestamp, and   | 
|     timestamp, and gives as an alternative implementation a "timestamp"     |     gives as an alternative implementation a "timestamp" that is         | 
|     that is incremented every quarter of an RTT, as is the window           |     incremented every quarter of an RTT, as is the window counter in     | 
|     counter in CCID 3.  However, Section 5.2 in RFC 3448 on "Translation |     CCID 3.  However, the section in [RFC 3448] on "Translation from | 
|     from Loss History to Loss Events" is written in terms of timestamps,    |     Loss History to Loss Events" is written in terms of timestamps, not  | 
|     not in terms of window counters.  In this section, we give an           |     in terms of window counters.  In this section, we give an procedure  | 
|     procedure for the translation from loss history to loss events that     |     for the translation from loss history to loss events that is         | 
|     is explicitly in terms of window counters.                              |     explicitly in terms of window counters.                              | 
|                                                                             |  | 
|     To determine whether two lost packets with sequence numbers X and Y     |  | 
|     belong to different loss events, the receiver proceeds as follows.      |  | 
|     Assume Y > X in circular sequence space.                                |  | 
|                                                                             |  | 
|     o  Let X_prev be the greatest valid sequence number received with       |  | 
|        X_prev < X.                                                          |  | 
|                                                                             |  | 
|     o  Let Y_prev be the greatest valid sequence number received with       |  | 
|        Y_prev < Y.                                                          |  | 
|                                                                             |  | 
|     o  Given a sequence number N, let C(N) be the window counter value      |  | 
|        associated with that packet.                                         |  | 
|                                                                             |  | 
|     o  Packets X and Y belong to different loss events if there exists a    |  | 
|        packet with sequence number S so that X_prev < S <= Y_prev, and      |  | 
|        the distance from C(X_prev) to C(S) is greater than 4.  (The         |  | 
|        distance is the number D so that C(X_prev) + D = C(S) (mod           |  | 
|        WCTRMAX), where WCTRMAX is the maximum value for the window          |  | 
|        counter -- in our case, 16.)                                         |  | 
|                                                                             |  | 
|        That is, the receiver only considers losses X and Y as separate      |  | 
|        loss events if there exists some packet S received between X and     |  | 
|        Y, with the distance from C(X_prev) to C(S) greater than 4.  This    |  | 
|        complex calculation is necessary to handle the case where window     |  | 
|        counter space wrapped completely between X and Y.  Generally, the    |  | 
|        receiver can simply check whether the distance from C(X_prev) to     |  | 
|        C(Y_prev) is greater than 4;  if so, then X and Y belong to          |  | 
|        separate loss events.                                                |  | 
|                                                                             |  | 
|     Window counters can help the receiver to disambiguate multiple          |  | 
|     losses after a sudden decrease in the actual round-trip time.  When     |  | 
|     the sender receives an acknowledgement acknowledging a data packet      |  | 
|     with window counter i, the sender increases its window counter, if      |  | 
|     necessary, so that subsequent data packets are sent with window         |  | 
|     counter values of at least i+4.  This can help minimize errors on       |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                             Section 10.2.  [Page 31]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     the part of the receiver of incorrectly interpreting multiple loss      |  | 
|     events as a single loss event.                                          |  | 
|                                                                             |  | 
|     We note that if all of the packets between X and Y are lost in the      |  | 
|     network, then X_prev and Y_prev are both set to X-1, and the series     |  | 
|     of consecutive losses is treated by the receiver as a single loss       |  | 
|     event.  However, the sender will receive no DCCP-Ack packets during     |  | 
|     a period of consecutive losses, and the sender will reduce its          |  | 
|     sending rate accordingly.                                               |  | 
|                                                                             |  | 
|     As an alternative to the window counter, the sender could have sent     |  | 
|     its estimate of the round-trip time to the receiver directly in a       |  | 
|     round-trip time option; the receiver would use the sender's round-      |  | 
|     trip time estimate to infer when multiple lost or marked packets        |  | 
|     belong in the same loss event.  In some respects, a round-trip time     |  | 
|     option would give a more precise encoding of the sender's round-trip    |  | 
|     time estimate than does the window counter.  However, the window        |  | 
|     counter conveys information about the relative *sending* times for      |  | 
|     packets, while the receiver could only use the round-trip time          |  | 
|     option to distinguish between the relative *receive* times (in the      |  | 
|     absence of timestamps).  That is, the window counter will give more     |  | 
|     robust performance when there is a large variation in delay for         |  | 
|     packets sent within a window of data.  Slightly more speculatively,     |  | 
|     a round-trip time option might possibly be used more easily by          |  | 
|     middleboxes attempting to verify that a flow was using conformant       |  | 
|     end-to-end congestion control.                                          |  | 
|                                                                             |  | 
| 10.3.  Sending Feedback Packets                                             |  | 
|                                                                             |  | 
|     In CCID 3, the window counter is used by the receiver to decide when    |  | 
|     to send feedback packets.  RFC 3448 (Sections 6.1 and 6.2) specifies  |     to send feedback packets.  [RFC 3448] specifies that the TFRC      | 
|     that the TFRC receiver sends a feedback packet when the new loss        |     receiver sends a feedback packet when the new loss event rate p is   | 
|     event rate p is less that the old value.  This rule is followed by      |     less that the old value.  This rule is followed by CCID 3.           | 
|     CCID 3.                                                                 |     In addition, [RFC 3448] specifies that the receiver uses a feedback | 
|                                                                             |     timer to decide when to send additional feedback packets.  If the    | 
|     In addition, RFC 3448 (Section 6.2) specifies that the receiver uses  |     feedback timer expires, and data packets have been received since    | 
|     a feedback timer to decide when to send additional feedback packets.    |     the previous feedback was sent, then the receiver sends a feedback   | 
|     If the feedback timer expires, and data packets have been received      |     packet.  When the feedback timer expires, the receiver resets the    | 
|     since the previous feedback was sent, then the receiver sends a         |     timer to expire after R_m seconds, where R_m is the most recent      | 
|     feedback packet.  When the feedback timer expires, the receiver         |     estimate of the round-trip time received by the receiver from the  | 
|     resets the timer to expire after R_m seconds, where R_m is the most     |     sender.  This section describes how CCID 3 uses the window counter   | 
|     recent estimate of the round-trip time received from the sender.        |     instead of the feedback timer to determine when to send additional   | 
|     This section describes how CCID 3 uses the window counter instead of    |     feedback packets.                                                    | 
|     the feedback timer to determine when to send additional feedback        |  | 
|     packets.                                                                |  | 
|                                                                             |  | 
|     Whenever the receiver sends a feedback message, the receiver sets a     |  | 
|     local variable last_counter to the greatest received value of the       |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                             Section 10.3.  [Page 32]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     window counter since the last feedback message was sent, if any data    |  | 
|     packets have been received since the last feedback message was sent.    |  | 
|     If the receiver receives a data packet with a window counter value      |  | 
|     greater than or equal to last_counter + 4, then the receiver sends a    |  | 
|     new feedback packet.  ("Greater" and "greatest" are measured in         |  | 
|     circular window counter space.)                                         |  | 
|                                                                             |  | 
|     This procedure ensures that when the sender is sending less than one    |  | 
|     packet per round-trip time, then the receiver sends a feedback          |  | 
|     packet after each data packet.  Similarly, this procedure ensures       |  | 
|     that when the sender is sending several packets per round-trip time,    |  | 
|     then the receiver will send a feedback packet each time that a data     |  | 
|     packet arrives with a window counter more than four greater than the    |  | 
|     window counter when the last feedback packet was sent.  Thus, the       |  | 
|     feedback timer is not necessary when the window counter is used.        |  | 
|                                                                             |  | 
|     However, the feedback timer still could be useful in some rare cases    |  | 
|     to prevent the sender from unnecessarily halving its sending rate.      |  | 
|     In particular, one could construct scenarios where the use of the       |  | 
|     feedback timer at the receiver would prevent the unnecessary            |  | 
|     expiration of the nofeedback timer at the sender.  Consider the case    |  | 
|     below, in which a feedback packet is sent when a data packet arrives    |  | 
|     with a window counter of K.                                             |  | 
|                                                                             |  | 
|      Window                                                                 |  | 
|      Counters: K   K+1 K+2 K+3 K+4 K+5 K+6  ...  K+15 K+16 K+17 ...         |  | 
|                |   |   |   |   |   |   |         |    |    |                |  | 
|      Data      |   |   |   |   |   |   |         |    |    |                |  | 
|      Packets   |   |   |   |   |   |   |         |    |    |                |  | 
|      Received:   - -  ---  -                ...   - - -- -  -- --  -        |  | 
|                  |                |               |    |    |        |      |  | 
|                  |                |               |    |    |        |      |  | 
|      Events:     1:               2:              3:   4:   5:       6:     |  | 
|                 "A"                              "B"  Timer "B"             |  | 
|                 sent                             sent       received        |  | 
|                                                                             |  | 
|           1:  Feedback message A is sent.                                   |  | 
|           2:  A feedback message would have been sent if feedback timers    |  | 
|               had been used.                                                |  | 
|           3:  Feedback message B is sent.                                   |  | 
|           4:  Sender's nofeedback timer expires.                            |  | 
|           5:  Feedback message B is received at the sender.                 |  | 
|           6:  Sender's nofeedback timer would have expired if feedback      |  | 
|               timers had been used, and the feedback message at 2 had       |  | 
|               been sent.                                                    |  | 
|                                                                             |  | 
|     The receiver receives data after the feedback packet has been sent,     |  | 
|     but has received no data packets with a window counter between K+4      |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                             Section 10.3.  [Page 33]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     and K+14.  A data packet with a window counter of K+4 or larger         |  | 
|     would have triggered sending a new feedback packet, but no feedback     |  | 
|     packet is sent until time 3.                                            |  | 
|                                                                             |  | 
|     The TFRC protocol specifies that after a feedback packet is             |  | 
|     received, the sender sets a nofeedback timer to at least four times     |  | 
|     the round-trip time estimate.  If the sender doesn't receive any        |  | 
|     feedback packets before the nofeedback timer expires, then the          |  | 
|     sender halves its sending rate.  In the figure, the sender receives     |  | 
|     feedback message A (time 1), then sets the nofeedback timer to          |  | 
|     expire roughly four round-trip times later (time 4).  The sender        |  | 
|     starts sending again just before the nofeedback timer expires, but      |  | 
|     doesn't receive the resulting feedback message until after its          |  | 
|     expiration, resulting in an unnecessary halving of the sending rate.    |  | 
|     If the connection had used feedback timers, the receiver would have     |  | 
|     sent a feedback message when the feedback timer expired at time 2,      |  | 
|     and the halving of the sending rate would have been avoided.            |  | 
|                                                                             |  | 
|     For implementors who wish to implement a feedback timer for the data    |  | 
|     receiver, we suggest estimating the round-trip time from the most       |  | 
|     recent data packet as described in Section 8.1.  We note that this      |  | 
|     procedure does not work when the inter-packet sending times are         |  | 
|     greater than the RTT.                                                   |  | 
|                                                                             |  | 
| 11.  Security Considerations                                                |  | 
|                                                                             |  | 
|     Security considerations for DCCP have been discussed in [DCCP], and     |  | 
|     security considerations for TFRC have been discussed in RFC 3448      |     security considerations for TFRC have been discussed in [RFC 3448]. | 
|     (Section 9).  The security considerations for TFRC include the need   |     The security considerations for TFRC include the need to protect     | 
|     to protect against spoofed feedback, and the need for protection        |     against spoofed feedback, and the need for protection mechanisms to  | 
|     mechanisms to protect the congestion control mechanisms against         |     protect the congestion control mechanisms against incorrect          | 
|     incorrect information from the receiver.                                |     information from the receiver.                                       | 
|                                                                             |  | 
|     In this document we have extensively discussed the mechanisms the       |  | 
|     sender can use to verify the information sent by the receiver.  As      |  | 
|     the document described, ECN may be used with CCID 3.  When ECN is       |  | 
|     used, the receiver must use either Ack Vector or Loss Intervals to      |  | 
|     return ECN Nonce information to the sender.  When ECN is not used,      |  | 
|     then, as Section 9 shows, the sender could still use various            |  | 
|     techniques that might catch the receiver in an error in reporting       |  | 
|     congestion, but this is not as robust or as non-intrusive as the        |  | 
|     verification provided by the ECN Nonce.                                 |  | 
|                                                                             |  | 
| 12.  IANA Considerations                                                    |  | 
|                                                                             |  | 
|     This specification defines the value 3 in the DCCP CCID namespace       |  | 
|     managed by IANA.  This assignment is also mentioned in [DCCP].          |  | 
|     CCID 3 also introduces three sets of numbers whose values should be     |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                               Section 12.  [Page 34]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     allocated by IANA.  We refer to allocation policies, such as            |  | 
|     Standards Action, outlined in RFC 2434, and most registries reserve   |     Standards Action, outlined in [RFC 2434], and most registries      | 
|     some values for experimental and testing use [RFC 3692].                |     reserve some values for experimental and testing use [RFC 3692].     | 
|                                                                             |  | 
| 12.1.  Reset Codes                                                          |  | 
|                                                                             |  | 
|     Each entry in the DCCP CCID 3 Reset Code registry contains a            |  | 
|     CCID 3-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 IETF Consensus policy,       |  | 
|     which requires RFC publication (not necessarily standards-track).       |  | 
|                                                                             |  | 
| 12.2.  Option Types                                                         |  | 
|                                                                             |  | 
|     Each entry in the DCCP CCID 3 option type registry contains a           |  | 
|     CCID 3-specific option type, which is a number in the range 128-255;    |  | 
|     the name of the option, such as "Loss Intervals"; and a reference to    |  | 
|     the RFC defining the option type.  The registry is initially            |  | 
|     populated using the values in Table 1, in Section 8.  This document   |     populated using the values in Table 1 (Section 8).  This document  | 
|     allocates option types 192-194, and option types 184-190 and 248-254    |  | 
|     are permanently reserved for experimental and testing use.  The         |  | 
|     remaining option types -- 128-183, 191, 195-247, and 255 -- are         |  | 
|     currently reserved, and should be allocated with the IETF Consensus     |  | 
|     policy, which requires RFC publication (not necessarily standards-      |  | 
|     track).                                                                 |  | 
|                                                                             |  | 
| 12.3.  Feature Numbers                                                      |  | 
|                                                                             |  | 
|     Each entry in the DCCP CCID 3 feature number registry contains a        |  | 
|     CCID 3-specific feature number, which is a number in the range          |  | 
|     128-255; the name of the feature, such as "Send Loss Event Rate";       |  | 
|     and a reference to the RFC defining the feature number.  The            |  | 
|     registry is initially populated using the values in Table 2, in       |     registry is initially populated using the values in Table 2 (Section | 
|     Section 8.  This document allocates feature number 192, and feature   |     8).  This document allocates feature number 192, and feature numbers | 
|     numbers 184-190 and 248-254 are permanently reserved for                |     184-190 and 248-254 are permanently reserved for experimental and    | 
|     experimental and testing use.  The remaining feature numbers --         |     testing use.  The remaining feature numbers -- 128-183, 191,         | 
|     128-183, 191, 193-247, and 255 -- are currently reserved, and should    |     193-247, and 255 -- are currently reserved, and should be allocated  | 
|     be allocated with the IETF Consensus policy, which requires RFC         |     with the IETF Consensus policy, which requires RFC publication (not  | 
|     publication (not necessarily standards-track).                          |     necessarily standards-track).                                        | 
|                                                                             |  | 
| 13.  Thanks                                                                 |  | 
|                                                                             |  | 
|     We thank Mark Handley for his help in defining CCID 3.  We also         |  | 
|     thank Mark Allman, Aaron Falk, Ladan Gharai, Sara Karlberg, Greg        |  | 
|     Minshall, Arun Venkataramani, David Vos, Yufei Wang, Magnus             |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                               Section 13.  [Page 35]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     Westerlund, and members of the DCCP Working Group for feedback on       |  | 
|     versions of this document.                                              |  | 
|                                                                             |  | 
| A.  Appendix: Possible Future Changes to CCID 3                             |  | 
|                                                                             |  | 
|     There are a number of cases where the behavior of TFRC as specified     |  | 
|     in RFC 3448 does not match the desires of possible users of DCCP.     |     in [RFC 3448] does not match the desires of possible users of DCCP. | 
|     These include the following:                                            |  | 
|                                                                             |  | 
|     1.  The initial sending rate of at most four packets per RTT, as        |  | 
|         specified in RFC 3390.                                            |         specified in [RFC 3390].                                       | 
|                                                                             |  | 
|     2.  The receiver's sending of an acknowledgement for every data         |  | 
|         packet received, when the receiver receives less than one packet    |  | 
|         per round-trip time.                                                |  | 
|                                                                             |  | 
|     3.  The sender's limitation of at most doubling the sending rate        |  | 
|         from one round-trip time to the next (or more specifically, of      |  | 
|         limiting the sending rate to at most twice the reported receive     |  | 
|         rate over the previous round-trip time).                            |  | 
|                                                                             |  | 
|     4.  The limitation of halving the allowed sending rate after an idle    |  | 
|         period of four round-trip times (possibly down to the initial       |  | 
|         sending rate of two to four packets per round-trip time).           |  | 
|                                                                             |  | 
|     5.  Another change that is needed is to modify the response function    |  | 
|         used in RFC 3448 (Section 3.1) to match more closely the          |         used in [RFC 3448] to match more closely the behavior of TCP in | 
|         behavior of TCP in environments with high packet drop rates [RFC    |         environments with high packet drop rates [RFC 3714].             | 
|         3714].                                                              |  | 
|                                                                             |  | 
|     One suggestion for higher initial sending rates is that of an           |  | 
|     initial sending rate of up to eight small packets per RTT, when the     |  | 
|     total packet size, including headers, is at most 4380 bytes.            |  | 
|     Because the packets would be rate-paced out over a round-trip time,     |  | 
|     instead of sent back-to-back as they would be in TCP, an initial        |  | 
|     sending rate of eight small packets per RTT with TFRC-based             |  | 
|     congestion control would be considerably milder than the impact of      |  | 
|     an initial window of eight small packets sent back-to-back in TCP.      |  | 
|     As Section 5.1 describes, the initial sending rate also serves as a     |  | 
|     lower bound for reductions of the allowed sending rate during an        |  | 
|     idle period.                                                            |  | 
|                                                                             |  | 
|     We note that with CCID 3, the sender is in slow-start in the            |  | 
|     beginning, and responds promptly to the report of a packet loss or      |  | 
|     mark.  However, in the absence of feedback from the receiver, the       |  | 
|     sender can maintain its old sending rate for up to four round-trip      |  | 
|     times.  One possibility would be that for an initial window of eight    |  | 
|     small packets, the initial nofeedback timer would be set to two         |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                                Section A.  [Page 36]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     round-trip times instead of four, so that the sending rate would be     |  | 
|     reduced after two round-trips without feedback.                         |  | 
|                                                                             |  | 
|     Research and engineering will be needed to investigate the pros and     |  | 
|     cons of modifying these limitations in order to allow larger initial    |  | 
|     sending rates, to send fewer acknowledgements when the data sending     |  | 
|     rate is low, to allow more abrupt changes in the sending rate, or to    |  | 
|     allow a higher sending rate after an idle period.                       |  | 
|                                                                             |  | 
| 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 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 3168] K.K. Ramakrishnan, S. Floyd, and D. Black. The Addition      |  | 
|         of Explicit Congestion Notification (ECN) to IP. RFC 3168.          |  | 
|         September 2001.                                                     |  | 
|                                                                             |  | 
|     [RFC 3390] M. Allman, S. Floyd, and C. Partridge.  Increasing TCP's     |  | 
|         Initial Window.  RFC 3390.                                          |  | 
|                                                                             |  | 
|     [RFC 3448] M. Handley, S. Floyd, J. Padhye, and J. Widmer, TCP          |  | 
|         Friendly Rate Control (TFRC): Protocol Specification, RFC 3448,     |  | 
|         Proposed Standard, January 2003.                                    |  | 
|                                                                             |  | 
|     [RFC 3692] T. Narten.  Assigning Experimental and Testing Numbers       |  | 
|         Considered Useful.  RFC 3692.                                       |  | 
|                                                                             |  | 
| Informative References                                                      |  | 
|                                                                             |  | 
|     [CCID 2 PROFILE] S. Floyd and E. Kohler. Profile for DCCP Congestion    |  | 
|         Control ID 2: TCP-like Congestion Control, draft-ietf-dccp-         |  | 
|         ccid2-08.txt, work in progress, November 2004.                      |  | 
|                                                                             |  | 
|     [MAF04] A. Medina, M. Allman, and S. Floyd. Measuring Interactions      |  | 
|         Between Transport Protocols and Middleboxes. ACM SIGCOMM/USENIX     |  | 
|         Internet Measurement Conference, Sicily, Italy, October 2004.       |  | 
|         URL "http://www.icir.org/tbit/".                                    |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                                            [Page 37]    |  | 
|                                                                            |  | 
| INTERNET-DRAFT            Expires: 20 June 2005            December 2004    |  | 
|                                                                             |  | 
|                                                                             |  | 
|     [RFC 3540] N. Spring, D. Wetherall, and D. Ely.  Robust Explicit        |  | 
|         Congestion Notification (ECN) Signaling with Nonces.  RFC 3540.     |  | 
|                                                                             |  | 
|     [RFC 3714] S. Floyd and J. Kempf, Editors.  IAB Concerns Regarding      |  | 
|         Congestion Control for Voice Traffic in the Internet.  RFC 3714.    |  | 
|                                                                             |  | 
|     [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                                                                     |  | 
|                                                                             |  | 
|     Jitendra Padhye <padhye@microsoft.com>                                  |  | 
|     Microsoft Research                                                      |  | 
|     One Microsoft Way                                                       |  | 
|     Redmond, WA 98052                                                       |  | 
|     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.       |  | 
|                                                                             |  | 
|     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     |  | 
|                                                                             |  | 
|                                                                             |  | 
|                                                                             |  | 
| Floyd/Kohler/Padhye                                            [Page 38]    |  | 
|                                                                            |  |