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   
                                                                           
                                                                           
Abstract                                                                   
                                                                           
    This document contains the profile for Congestion Control Identifier   
    3, TCP-Friendly Rate Control (TFRC), in the Datagram Congestion        
    Control Protocol (DCCP).  CCID 3 should be used by senders that want   
    a TCP-friendly sending rate, possibly with Explicit Congestion         
    Notification (ECN), while minimizing abrupt rate changes.              
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
Floyd/Kohler/Padhye                                             [Page 2]   
                                                                          
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   
                                                                           
                                                                           
    * Added a separate section on "The Use of Ack Vectors".  This          
    section says that Ack-of-acks must be used when the Ack Vector is      
    used.                                                                  
                                                                           
    * Renamed the "ECN Nonce Option" to the "Loss Intervals" option, and   
    extended this option to include up to eight loss intervals.  This is   
    to enable more precise verification by the sender of the receiver's    
    feedback.                                                              
                                                                           
    * Added a section about "When should Ack Vector or Loss Intervals be   
    used?"  In progress.                                                   
                                                                           
    * Added a section about using the ECN Nonce to verify the receiver's   
    feedback.                                                              
                                                                           
    * Said that the ECN-Nonce feedback must be returned in every           
    required acknowledgement.                                              
                                                                           
    * Added a sentence saying that the TFRC spec "separately specifies     
    the minimum sending rate from rate reductions during an idle           
    period."                                                               
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
Floyd/Kohler/Padhye                                             [Page 6]   
                                                                          
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   
                                                                           
                                                                           
    Intellectual Property. . . . . . . . . . . . . . . . . . . . . .  38 
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
Floyd/Kohler/Padhye                                             [Page 8]   
                                                                          
INTERNET-DRAFT            Expires: 20 June 2005            December 2004   
                                                                           
                                                                           
                               List of Tables                              
                                                                           
    Table 1: DCCP CCID 3 Options . . . . . . . . . . . . . . . . . .  21 
    Table 1: DCCP CCID 3 Options . . . . . . . . . . . . . . . . . .  19
    Table 2: DCCP CCID 3 Feature Numbers . . . . . . . . . . . . . .  22 
    Table 2: DCCP CCID 3 Feature Numbers . . . . . . . . . . . . . .  19
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
Floyd/Kohler/Padhye                                             [Page 9]   
                                                                          
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]   
                                                                          
INTERNET-DRAFT            Expires: 20 June 2005            December 2004   
                                                                           
                                                                           
    in this document or the extent to which any license under such         
    rights might or might not be available; nor does it represent that     
    it has made any independent effort to identify any such rights.        
    Information on the procedures with respect to rights in RFC            
    documents can be found in BCP 78 and BCP 79.                           
                                                                           
    Copies of IPR disclosures made to the IETF Secretariat and any         
    assurances of licenses to be made available, or the result of an       
    attempt made to obtain a general license or permission for the use     
    of such proprietary rights by implementers or users of this            
    specification can be obtained from the IETF on-line IPR repository     
    at http://www.ietf.org/ipr.                                            
                                                                           
    The IETF invites any interested party to bring to its attention any    
    copyrights, patents or patent applications, or other proprietary       
    rights that may cover technology that may be required to implement     
    this standard.  Please address the information to the IETF at ietf-    
    ipr@ietf.org.                                                          
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           
Floyd/Kohler/Padhye                                            [Page 39]