<?xml version="1.0" encoding="US-ASCII"?>
<!-- update by Michael to facilitate compilation
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> -->
<!DOCTYPE rfc>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<?rfc strict="yes" ?>
<?rfc toc="yes"?>
<?rfc tocdepth="4"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>

<rfc
    xmlns:xi="http://www.w3.org/2001/XInclude"
    category="bcp"
    docName="draft-fairhurst-ccwg-cc-01"
    ipr="trust200902"
    updates=""
    obsoletes=""
    consensus="true"
    submissionType="IETF"
    tocInclude="true"
    tocDepth="4"
    symRefs="true"
    sortRefs="true"
    version="3">
    
<front>
        
<title abbrev="CC Guidelines">Guidelines for Internet Congestion Control at Endpoints</title>
<seriesInfo name="Internet-Draft" value="draft-ietf-xml2rfc-template-06"/>

<author fullname="Godred Fairhurst" initials="G" surname="Fairhurst">
    <organization>University of Aberdeen</organization>
    <address>
        <postal>
            <street>School of Engineering</street>
            <street>Fraser Noble Building</street>
            <city>Aberdeen</city>
            <region></region>
            <code>AB24 3UE</code>
            <country>UK</country>
        </postal>
        <email>gorry@erg.abdn.ac.uk</email>
    </address>
</author>
    
<author fullname="Michael Welzl" initials="M" surname="Welzl">
    <organization>University of Oslo</organization>
    <address>
        <postal>
            <street></street>
            <city>Oslo</city>
            <region></region>
            <code></code>
            <country>Norway</country>
        </postal>
        <email>michawe@ifi.uio.no</email>
    </address>        
</author>

        
<abstract>
      <t>When published as an RFC, this document provides guidance on
      the design of methods to avoid congestion collapse and how an
      endpoint needs to react to congestion.
      Based on these, and Internet engineering experience, the
      document provides best current practice for the design of
      new congestion control methods
      in Internet protocols.</t>
      <t>When published, the document will update or replace the Best Current Practice in
          BCP 41, which currently includes "Congestion Control Principles"
          provided in RFC2914.</t>
</abstract>
</front>

<middle>
    
<section title="Introduction">
        <t>This document has two purposes. It first identifices changes in practice and network design that
        have occurred since the publications of IETF BCPs on the topic of congestion control and
        identifies current issues in congestion ocontrol.
        Second, it updates the guidance on the use of Congestion Control (CC) mechanisms.
        It also provides background information for the design of new mechanisms.
        A related document provides guidance on the evaluation of these new methods.
        </t>     
            <t>The IETF has specified a set of Internet transports (e.g., TCP <xref
            target="RFC9293"></xref>, UDP <xref
                target="RFC0768"></xref>, UDP-Lite <xref target="RFC3828"></xref>, SCTP
            <xref target="RFC4960"></xref>, and DCCP <xref target="RFC4340"></xref>)
            as well as protocols layered on top of these transports (e.g., RTP <xref
                target="RFC3550"></xref>, QUIC <xref
                    target="RFC9000"></xref> <xref
                        target="RFC9002"></xref>, SCTP/UDP <xref
                        target="RFC6951"></xref>, DCCP/UDP <xref target="RFC6773"></xref>) and
                    transports that work directly over the IP network layer. These
                    transports are implemented in endpoints (either Internet hosts or
                    routers acting as endpoints), and can be designed to detect and react to
                    network congestion. TCP was the first transport to provide this,
                    although the specifications found in RFC 793 <xref target="RFC793"></xref> predate the inclusion
                    of CC and did not contain any discussion of using or
             managing a congestion window (cwnd). RFC 9293 <xref
            target="RFC9293"></xref> has addressed this.</t>

           <t>Section 3 of <xref target="RFC2914"></xref>
            states
            "The equitable sharing of bandwidth among flows depends on the fact that
            all flows are running compatible congestion control algorithms".
            Internet transports therefore need to react to avoid congestion that could impact
            other flows sharing a path. <xref target="RFC1122">The Requirements for
            Internet Hosts</xref> formally mandates that endpoints perform
            CC. "Because congestion control is critical to the
            stable operation of the Internet, applications and other protocols that
            choose to use UDP as an Internet transport must employ mechanisms to
            prevent congestion collapse and to establish some degree of fairness
            with concurrent flows <xref target="RFC8085"></xref>.</t>
        
            <t>The popularity of the Internet has led to the deployment
            of many implementations: Some
            use standard CC mechanisms,
            some have chosen to adopt approaches that differ
            from present standards. Guidance is needed to ensure safe evolution of
            the CC methods used by transport protocols.</t>

          <t> There are several reasons to think that things have
           changed since the original best current practice was published:
            At one time, it was common that the serialisation delay of a packet at the bottleneck
            formed a large proportion of the round trip time (RTT) of a path, motivating a need for
            conservative loss recovery. This is not often the case for today's
            higher capacity links.
            The increase in the link speed often means that for many users,
            current traffic often does not
            normally experience persistent congestion, and under-load 
            (inability to achieve the bottleneck rate)
            is often as common as over-load (exceeding the bottleneck rate)
            That is, a current challenge is that conservative methods
            lead to under-utilisation of the path, and safe scalable methods need to be found.</t>
 
                <t>There also have been changes in the way that protocol mechanisms
                    are deployed in Internet endpoints: </t>
                
                <t>On the one hand, techniques have evolved that allow incremental deployment
                    and testing of new methods which can enable the rapid development of
                    methods to detect and react to congestion. This allows new mechanisms
                    to be tested to ensure the majority users see benefit in the networks
                    they use. There has been considerable progress in developing new loss
                    recovery and congestion responses that have been evaluated in this way.</t>
                
                <t>On the other hand, the Internet continues to be heterogenous, some endpoints experience
                    very different network path characteristics and some endpoints generate very
                    different patterns of traffic. There is still a need to avoid harm to other flows
                    (stravation of capacity, unecessary increase of latency, congestion collapse). </t>

                <t> This
                    document has a focus on unicast point-to-point transports, this includes
                    migration from using one path to another path. Some recommendations
                    <xref target="RFC5783"></xref> and requirements
                    will apply to point-to-multipoint transports (e.g.,
                    multicast), however this is beyond the current document's
                    scope. <xref target="RFC2914"></xref> provides additional guidance on
                    the use of multicast.</t>

        <t>Finally, experience has shown that successful protocols developed in a
            specific context, or for a particular application tend to also become
            used in a wider range of contexts. Therefore, IETF specifications 
            ought to target deployment on the general Internet, or be specified
            for use only within a controlled environment.</t>

        <section title="Incipient and Persistent Congestion">

        <t>Internet paths experience congestion (loss or delay)
        when there is excess load at a bottleneck that they traverse.
        This document differentiates two levels of congestion:</t>
        
        <ul><li>
            Incipient congestion: This is a consequential side effect of the
            statistical multiplexing of packet flows.
            There will be times when packets need to be buffered or dropped at the bottleneck(s) on a path,
            irrespective of the long-term average load.</li>
        
        <li> Persistent congestion: This occurs when the pattern of arriving traffic results
            in over-consumption of a path's resources. Typically this results in
            packet loss. The effects of persistent congestion might impact the flow
            that induces the congestion, but could adversely impact other flows,
            e.g., starving them of resources or reducing the efficiency
            of the path (e.g., congestion collapse).</li>
        </ul>
        <t> Flows need to react when they encounter either form congestion to reduce their
            contribution to the load. For persistent congestion, the reaction needs to be
            sufficient to avoid excessive harm to other flows.</t>
</section> <!-- End of Two types of Congestion -->
    
<section anchor="Need-incipient" title="The Need to Mitigate the Effects of Incipient Congestion">

        <t>Incipient congestion results during normal operation of the Internet.
            Buffering (which causes an increase in latency) or congestion loss (discard of a
            packet) arises when the traffic arriving at a bottleneck exceeds
            the resources available.  A network device
            uses will drop excess packets when its
            queue(s) becomes full. This can be managed using
            Active Queue Management (AQM) <xref target="RFC7567"></xref>,
            which can
            be combined with Explicit Congestion Notification (ECN) signalling
            <xref target="RFC3168"></xref> to mitigate incipient congestion
            <xref target="RFC8087"></xref>.</t>
            
             <t>Buffers can be divided into pools and traffic
            can be associated with a specific pool (e.g., using local
            configuration, or coordinated using the Differentiated
            Services <xref target="RFC2475"></xref> architecture).
            A schedular can  <xref target="RFC7806"></xref>
            isolate the queuing of packets
            for different flows, or aggregates of flows, and
            reduce the impact of flow multiplexing on other flows
            (e.g., flow scheduling <xref target="RFC7567"></xref>). This could
            equally distribute resources between sharing
            flows, but this equality is explicitly not a requirement
            <xref target="Flow-Rate-Fairness"></xref>.</t>
            <t>Even when a path is expected
            to support such methods, an endpoint MUST NOT rely on the
            presence and correct configuration of these methods, and therefore
            needs to employ CC methods that work end-to-end, or employ
            in-network control, such as a circuit-breaker.</t>

        <t>In some controlled environments, Internet transports can use mechanisms to
            reserve capacity.
            Most Internet paths do not support this.
            In the absence of such a reservation, endpoints
            are unable to determine a safe rate at which to start a new
            transmission. The use of an Internet path therefore requires 
            end-to-end CC mechanisms to detect and respond to congestion.</t>

        <t>Section 3.3 of <xref target="RFC2914"></xref> notes that a flow can use
            CC to
            "optimize its own performance regarding throughput, delay, and loss. In
            some circumstances, for example in environments with high statistical
            multiplexing, the delay and loss rate experienced by a flow are largely
            independent of its own sending rate."
            and continues: "in environments with lower
            levels of statistical multiplexing or with per-flow scheduling, the
            delay and loss rate experienced by a flow is in part a function of the
            flow's own sending rate. Thus, a flow can use end-to-end congestion
            control to limit the delay or loss experienced by its own packets."</t>
        
</section> <!--- End of Incipient Congestion -->
    
<section anchor="Need-persistent" title="The Need to Avoid the Effects of Persistent Congestion">

        <t>Early RFCs recognised that a poorly designed transport
            can lead to significant congestion, which could result in severe service degradation or
            "Internet meltdown". One effect is called "Congestion Collapse",
            where an increase in the network load results in a decrease in
            the useful work done by the network.
            <xref target="RFC0896"></xref> <xref target="RFC0970"></xref>. 
            <xref target="RFC2914"></xref>. This was first observed in the mid 1980s
            At that time, this was aggrevated by connections thjat did not use CC and
            which unnecessarily retransmitted packets that were either in
            transit or had already been received, resulting in
            a stable persistent congestion <xref target="RFC0896"></xref>.</t>
        
        <t><xref target="RFC2914"></xref> also notes that it is even
            more destructive when applications increase their
            sending rate in response to an increase in the packet loss rate (e.g.,
            automatically using an increased level of FEC (Forward Error
            Correction)).</t>
        <t>
            The problems of
            congestion collapse have generally been corrected by
            improvements to the loss recovery and congestion control mechanisms in
            transport protocols <xref target="Jac88"></xref>, designed to avoid
            starving other flows of capacity (e.g.,
            <xref target="RFC7567"></xref>).  Section
            3.1 describes preventing congestion collapse.
            <xref target="RFC2309"></xref> adds that
            "all UDP-based streaming applications should incorporate
            effective congestion avoidance mechanisms."
            <xref target="RFC7567"></xref> and <xref target="RFC8085"></xref> both
            reaffirm the continued need to provide methods to prevent
            starvation.</t>
                           
</section>  <!-- End of Persistent Congestion -->
    
<section title="New Congestion Control Methods">
            <t>CC is an evolving subject, responding to changes in protocol
                design, operation of applications using the network and understanding of the
                network operation under load.
                The IETF has provided guidance <xref target="RFC5033"></xref> for
                considering and evaluating alternate CC algorithms.</t>
            
            <t>The IRTF has described a set of metrics and related trade-off
                between metrics to compare, contrast, and evaluate
                CC algorithms <xref target="RFC5166"></xref>. <xref
                    target="RFC5783"> </xref> provided a snapshot of CC
                research in 2008. <xref
                    target="RFC6077"> </xref> discussed open issues in CC research in 2011.</t>
           
            <t> In contrast to considering the fairness in distributing capacity between flows, 
                a different approach is to analyse
                persistent congestion effects to understand the harm to other flows
                (collateral impact of loss, starvation, collapse, etc).
                Such an analysis of the suitability of a new mechanism can evaluate how 
                changes impact other flows sharing a bottleneck, and consider the 
                impact on the flows that have outliers in performance (e.g., the last 5%, 1%)
                For example, the performance often does not
                provide an indication that a new method could starve
                other applications that share the bottleneck,
                or when patterns of packets (e.g., bursts) are sent that
                disrupt the packet timing needed by another application flow.</t>
</section> <!-- End of Evaluation -->

<section title="Current Challenges">

    <t>Recommendations and requirements on CC control are distributed across
        many documents in the RFC series. This section
        gathers and consolidates these recommendations. These,
        and Internet engineering experience are used to derive the best current
        practice in the design of Internet CC methods.</t>
    
    <t>Standardization of new CC algorithms can avoid
        an "arms race" among competing protocols <xref
            target="RFC2914"></xref>. That is, avoid 
        competition for Internet resource in a way that significantly reduces
        the ability of other flows to use the Internet.</t>
    
    <t>The general recommendation in the UDP Guidelines <xref
        target="RFC8085"></xref> is that applications SHOULD leverage existing
        CC techniques, such as those defined for TCP <xref
        target="RFC9293"></xref>, TCP-Friendly Rate Control (TFRC) <xref
            target="RFC5348"></xref>, SCTP <xref target="RFC4960"></xref>, and other
        IETF-defined transports. This is because there are many trade offs and
        details that can have a serious impact on the performance of a CC
         mechanism and upon other traffic that seeks to
        share a bottlneck.</t>
    </section>
</section> <!-- End of Into -->

<section title="Terminology">
    
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
            "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
            document are to be interpreted as described in <xref
                target="RFC2119"></xref>.</t>
        
        <t>The path between endpoints (sometimes called "Internet Hosts" for IPv4 and
            called "source nodes" and "destination nodes" in IPv6) consists of the endpoint
            protocol stack at the sender and the receiver (which together implement
            the transport service), and a succession of links and network devices
            (routers or middleboxes) forming the network path.
            The set of network devices forming the path is not usually fixed, and it
            should generally be assumed that this set can change over arbitrary
            lengths of time.</t>
        
        <t><xref target="RFC5783"></xref> defines CC as "the
            feedback-based adjustment of the rate at which data is sent into the
            network. Congestion control is an indispensable set of principles and
            mechanisms for maintaining the stability of the Internet."</t>
        
        <t>The document draws on language used in the specifications of TCP and
            other IETF transports. For example, a protocol timer is generally needed
            to detect persistent congestion, and this document uses the term
            Retransmission Timeout (RTO) to refer to the operation of this timer.
            Similarly, it refers to a congestion window (cwnd) as a variable
            that controls the rate of transmission by the CC.
            Each new transport needs
            to make its own design decisions about how to meet the recommendations
            and requirements for CC. The
            use of these terms does not imply that endpoints need to implement
            functions in the current way used by TCP. </t>
        
        <t>Other terminology is directly copied from the cited RFCs.</t>
</section> <!--End of Terminology -->
    
<section title="Requirements from the RFC Series">
    
    <section anchor="response" title="The Need to React to Congestion">
        <t>This includes:</t>
            <ul>
            <li>Endpoints MUST perform congestion control <xref
                target="RFC1122"></xref> and SHOULD leverage existing techniques <xref target="RFC8085"></xref>.</li>
            
            <li>If an application or protocol chooses not to use a
                CC, it SHOULD control the
                rate at which it sends datagrams to a destination host,
                to fulfil the requirements of <xref target="RFC2914"></xref>, as
                stated in <xref target="RFC8085"></xref>.</li>
            
            <li> Endpoints
                SHOULD control the aggregate traffic that is sent 
                <xref target="RFC8085"></xref>. An endpoint can become aware of
                congestion by various means (including, delay variation, timeout,
                ECN, packet loss). A signal that indicates congestion SHOULD result in a
                reaction to reduce the sendding rate <xref target="RFC8087"></xref>).</li>
            
            <li>Although network devices can be configured to reduce the impact
                of multiplexing on other flows, endpoints MUST NOT rely
                solely on the presence and correct configuration,
                except in a controlled environment.</li>
            
            <li>A transport that does not target Internet deployment needs to be
                constrained to only operate in a controlled environment (e.g., see
                Section 3.6 of <xref target="RFC8085"></xref>) and provide
                appropriate mechanisms to prevent this traffic from accidentally leaving the
                controlled environment <xref target="RFC8084"></xref>.</li>
        </ul>
    </section> <!-- End of RFC Requirements -->
    
    <section anchor="pathchar"  title="Tolerance to a Diversity of Path Characteristics">
        
        <t>Internet transports need to use a CC method designed for
        Internet paths.</t>
        <ul>
        <li> Path Capacity: The forward path can be congested in terms of the
             number of packets it can support and/or the number of rate of bytes it can transfer.
             The return path (towards the sender) can also be congested.
             Methods need to operate over paths where capacity in the forward and return directions are
             significantly different.</li>
        <li> Path Loss: Paths can experience packet loss for various reasons besides
            experiencing congestion
            (e.g., link corruption <xref target="RFC3819"></xref>), but an
            endpoint cannot usually reliably disambiguate the
            cause of loss.
            Whilst mechanisms below the transport
            layer can mitigate this loss, the only way to surely confirm that a sending
            endpoint has successfully communicated with a remote endpoint is
            to utilise a timer (see <xref target="Timers"></xref>) to detect a
            lack of response that could result from a change in the path or
            the path characteristics. The detection of
            congestion and the resulting reduction in rate MUST NOT solely depend upon
            reception of a signal from the remote endpoint, because congestion
            indications could themselves be lost due to
            congestion.</li>
        <li> Path RTT: The RTT from an endpoint cannot be determined a-priori, and must
             be measured dynamically (see <xref target="Timers"></xref>).</li>
        <li> Path Change: An endpoint MUST assume that path characteristics can change over time
            (i.e. path characteristics and sharing traffic once discovered do not necessarily remain valid in the future).</li>
        <li> Network devices MAY provide mechanisms to mitigate the impact
        of congestion by transport flows (e.g., priority
        forwarding of control information, and starvation detection), and
        ought to mitigate the impact of non-conformant and malicious flows
         <xref target="RFC7567"></xref>). These mechanisms complement, but
        do not replace, the endpoint congestion avoidance mechanisms.</li>
        <li> Security: Internet endpoints need to be protected from intentional disruption of the
            service they provide, and from the exploitation of methods to attack 
            other endpoints or services (see <xref target="Protect"></xref>).</li>
        </ul>

    </section> <!--- End of Path Char -->
   
        <section anchor="Protect" title="Protection of Protocol Mechanisms ">
            <t>An endpoint needs to be protected from attacks on the traffic
                it generates, or attacks that seek to increase the capacity that it
                consumes (impacting other traffic that share a bottleneck).</t>
            
            <t>The following guidance is provided on protection:</t>
            <ul>
                <li> Off-Path Attack:  A design MUST protect from
                    off-path attack to the protocol <xref target="RFC8085"></xref>
                    (i.e., where the attacker is unable to observe
                    packets). This can lead to a Denial of Service (DoS) vulnerability for
                    the flow being controlled and/or other flows that share network
                    resources along the path.</li>
                
                <li> On-Path Attack: A protocol can be designed to
                    protect from on-path attacks (i.e., where an attacker can
                    observe the packets).
                    Protecting from on-path attacks can require more complexity
                    and typically utilises encryption and/or authentication mechanisms (e.g., IPsec
                    <xref target="RFC4301"></xref>, QUIC <xref target="RFC9000"></xref>).</li>
                
                <li> Validation of Signals: To protect from malicious abuse, network signals and
                    control messages (e.g., ICMP <xref target="RFC0792"></xref>) MUST
                    be validated before they are used
                    (see <xref target="Protect"></xref>).
                    Transports MUST at least include protection from off-path attack using
                    signals <xref
                        target="RFC8085"></xref> (e.g., validating the quoted information
                    in an ICMP message enables checksing that this corresponds to the flow, 
                    before utilising the signalling it contains).</li>
            </ul>
        </section>    <!-- End of Protection of Protocol Mechanisms -->
        
</section> <!-- End of Requirements -->

<!-- ================================================================== -->

<section title="Principles of Congestion Control">
        <t>This section summarises the principles for providing CC. It describes principles associated
            with preventing persistent congestion, reacting to
            incipient congestion and utilising additional path information.</t>
    <section title="Initialisation and Using Capacity">

               <section anchor="Path-Capacity" title="Starting to use Path Capacity">
            <t>A sender needs to regulate the maximum
                volume of data in flight over the interval of the current RTT (the cwnd).
                It needs to react to incipient congestion.</t>
            
            <ul>
               <li>Setting an initial cwnd: A TCP sender
                    "SHOULD set the congestion window to no more
                    than the Restart Window (R)" before beginning transmission, if the
                    sender has not sent data in an interval that exceeds the current
                    retransmission timeout, i.e., when an application becomes idle
                    <xref target="RFC9293"></xref>. Congestion Window Validation (CWV)
                    <xref target="RFC7661"></xref> describes how a TCP sender can tentatively
                    maintains a cwnd larger than the path has supported in the
                    last RTT when a flow is application-limited, provided that the endpoint
                     rapidly reduces the cwnd when congestion is detected.</li>
                
                <li>Using the cwnd: A
                    sender that does not use capacity has no understanding whether
                    previously used capacity remains available, or whether that
                    capacity has disappeared (e.g., a change in the path that causes a
                    flow to experience a smaller bottleneck, or when more traffic
                    emerges that consumes previously available capacity resulting in a
                    new bottleneck). For this reason, a transport that is limited by
                    the volume of data available to send, MUST NOT continue to grow its
                    cwnd when the current cwnd is more than
                    twice the volume of data acknowledged in the last RTT. 
                    The reduction needs to be commensurate with the increase that preceded it.
                    This factor of 2 decrease corresponds to an increase factor of 2 
                    in slow start.</li>
             
                <li>Collateral Damage: Even in the absence of
                    congestion, statistical multiplexing can result in
                    transient effects for flows sharing common resources. A sender
                     SHOULD avoid persistently inducing excessive congestion to other
                    flows (collateral damage that could result in flow starvation). For example,
                    avoid a sudden surge in sending rate that lasts for more than one RTT.</li>
                
                <li>Burst Mitigation: While an endpoint
                    ought to limit its sending rate at the granularity of the current RTT, this
                    can be insufficient to satisfy the need to mitigate collateral damage.
                    Endpoints SHOULD provide mechanisms to regulate the bursts
                    of transmission that the application/protocol sends
                    (section 3.1.6 of <xref target="RFC8085"></xref>). ACK-Clocking
                    <xref target="RFC9293"></xref> can help mitigate bursts when they
                    receive continuous feedback of reception (such as
                    TCP). Sender pacing can also mitigate this <xref
                        target="RFC8085"></xref>, (described in Section 4.6 of <xref
                            target="RFC3449"></xref>), and has been recommended for TCP in
                        conditions where ACK-Clocking is not effective, (e.g., <xref
                            target="RFC3742"></xref>, <xref target="RFC7661"></xref>). SCTP
                        <xref target="RFC4960"></xref> defines a maximum burst length
                        (Max.Burst) with a recommended value of 4 segments to limit the
                    SCTP burst size. QUIC recommends that a sender paces 
                    all in-flight packets based on input from the CC <xref
                            target="RFC9002"></xref>.
                </li>
            </ul>
        </section>      <!-- End of Starting: Starting to use Path Capacity -->
        
        <section title="Using More Capacity">
            <t>
                When the CC is increasing the cwnd,
                it transmits faster than the last confirmed safe
                rate. Such an increase needs to be
                regarded as tentative and a sender needs to reduce its rate below the
                last confirmed safe rate when congestion is detected.</t>
            
            <ul>
                <li>Increasing the cwnd:
                    In the absence of congestion, an endpoint MAY increase the sending rate or cwnd.
                    This limit should only be increased 
                    when there is additional data available to send
                    (i.e., the sender will utilise the additional capacity in the
                    next RTT).</li>
                <li>A sender MUST NOT
                    increase the sending rate for a time longer than one RTT period after
                    congestion is first detected. This helps manage incipient congestion.</li>
                
                <li>Avoiding Overshoot: Overshoot of the cwnd
                    beyond the point of congestion can significantly impact
                    other flows sharing resources along a path, and can
                    impact the performance of the flow itself.
                    As endpoints experience more paths with a large Bandwidth Delay Product (BDP) and
                    a wider range of potential path RTTs, variability or changes
                    in the path can significantly impact the appropriate
                    dynamics for increasing the cwnd (see also burst
                    mitigation, <xref target="Path-Capacity"></xref>). Methods such as
                    HyStart are designed to avoid overshoot <xref target="RFC9406"></xref>.</li>
                
                <li>Response to Detected Congestion: The sending rate MUST
                    be below the previously
                    confirmed safe rate for multiple RTT periods after a
                    congestion event. In TCP Reno <xref target="RFC9293"></xref>,
                    this is performed by using a conservative (linear)
                    increase from a slow start threshold that is re-initialised each time
                    congestion is experienced.</li>
            
            </ul>
        </section> <!-- Starting: End of Using More Capacity -->
        
    </section> <!-- End of Starting -->
            <section anchor="Timers" title="Robustness: Timers and Retransmission">
            
            <t>An endpoint can utilise timers to implement transport mechanisms, e.g.,
             to recover from loss, to trigger pre-emptive retransmission
            and other protocol functions. 
            An endpoint that does utilise timers needs to follow the rules 
            in section 3.3 of <xref target="RFC8085"></xref>.</t>
        
            <t>Principles include:</t>

            <ul>
                <li> Initial RTO Interval: When a flow sends the first
                    packet(s), it has no way to know the RTT of the
                    path. An initial timer value is needed to detect any
                    lack of responsiveness from the remote endpoint. In TCP, this is
                    the starting value of the RTO. A safe initial
                    value is important for
                    overall Internet stability <xref target="RFC6298"></xref> <xref
                        target="RFC8085"></xref>. In the absence of any knowledge about
                    the latency of a path (including the initial value), senders SHOULD
                    conservatively set the RTO to no less than 1 second.
                    (Although Linux TCP has deployed a smaller
                    initial RTO value, the appendix of
                    <xref target="RFC6298"></xref> confirms that values shorter
                    than 1 second can be problematic.)</li>
                
                <li> Initial RTO Expiry: If the RTO timer expires while
                    awaiting completion of a connection setup, or handshake (e.g., the
                    ACK of a SYN segment in the three-way handshake in TCP), and the
                    implementation is using an RTO of less than 3 seconds, the local
                    endpoint can resend the connection setup.
                
                    The RTO MUST then be re-initialized to increase it
                    to 3 seconds once data transmission begins (i.e., after the
                    handshake completes) <xref target="RFC6298"></xref> <xref
                        target="RFC8085"></xref>. This conservative increase is necessary
                    to avoid congestion collapse when many flows retransmit across a
                    shared bottleneck with restricted capacity.</li>
                
                <li> Initial Measured RTO: Once an RTT measurement is
                    available (e.g., through reception of an acknowledgement), the
                    timeout value must be adjusted. This adjustment MUST take into
                    account the RTT variance. For the first sample, this variance
                    cannot be determined, and a local endpoint MUST therefore
                    initialise the variance to RTT/2 (see equation 2.2 of <xref
                        target="RFC6298"></xref> and related text for UDP in section 3.1.1
                    of <xref target="RFC8085"></xref>).</li>
                
            <li>Updating the Path RTT: Once an endpoint has started
                communicating with its peer, the RTT MUST be adjusted by measuring
                the actual path RTT. This adjustment MUST include adapting to the
                measured RTT variance (see equation 2.3 of <xref
                    target="RFC6298"></xref>). An RTO interval SHOULD be set based on
                recent RTT observations (including the RTT variance)
                (e.g., Section 3.1.1 of <xref target="RFC8085"></xref>).</li>

                <li>Persistent Lack of Feedback:
                Persistent lack of feedback (e.g.,
                detected by an RTO expiry, or other means) MUST be treated as persistent congestion.
                A failure to receive
                any specific response could be a
                result of a RTT change, change of path, excessive loss, or even
                congestion collapse. If there is no response within the RTO
                interval, TCP collapses the cwnd to one segment <xref
                    target="RFC9293"></xref>. Other transports MUST similarly respond
                when they fail to receive confirmation of feedback.
                
                An endpoint MUST exponentially backoff the RTO
                interval <xref target="RFC8085"></xref> each time
                persistent congestion is detected <xref target="RFC1122"></xref>,
                until the path characteristics can again be confirmed 
                <xref target="RFC6298"></xref> <xref target="RFC8085"></xref>.</li>
            
            <li>Maximum RTO: A maximum value MAY be placed on the
                RTO interval. This maximum RTO interval MUST NOT be
                less than 60 seconds <xref target="RFC6298"></xref>.</li>
            
            <li> [[Author Note: Re-check RTO-Consider. ]]</li>
        </ul>
  </section>
  <section title="Detecting and Reacting to Incipient Congestion">

          <t>This section describes the principles related to mitigation of incipient congestion (see <xref target="Need-incipient"></xref>).</t>
        <section title="Congestion Control Initialization">
            <t>When a connection to a new destination is first established, the
                endpoints have little information about the characteristics of the
                network path they will use. The safety and responsiveness of new CC proposals
                needs to be evaluated
                <xref target="RFC5166"></xref>.</t>
            
            <ul>
                <li> Flow Start: A new flow between two endpoints needs
                    to initialise a CC for the path.
                    The TCP slow-start algorithm is an accepted standard for
                    flow startup <xref target="RFC9293"></xref>. This uses the notion
                    of an Initial coingestion Window (IW) <xref target="RFC3390"></xref>, updated
                    by <xref target="RFC6928"></xref>). The IW is not the smallest burst size,
                    nor the smallest cwnd. It t is a safe starting point
                    for a path that is not suffering persistent congestion, and is
                    applicable until feedback about the path is received.</li>
                
                <li> Utilised Capacity: A CC MAY assume
                    that the recently used capacity between a pair of endpoints is an
                    indication of future capacity that might be available in the near future between
                    the same endpoints (<xref target="Signals"></xref>).
                    The CC MUST reduce its rate if this is not
                    subsequently confirmed to be true. [[Author note: we likely need to bound
                    this reaction in time or size]].</li>
                </ul>
        </section> <!-- End of Incipient Congestion -->
           
        <section anchor="Detection" title="Loss-Based Congestion Detection and Retransmission">
            <t>This section describes mechanisms to detect loss and provide
                retransmission, and to protect the network in the absence of timely
                feedback.</t>
            
            <ul>
                <li>Congestion Detection: Loss is typically detected when a sender
                    cannot confirm delivery within an expected
                    period (e.g., by observing the time-ordering of the
                    reception of ACKs, as in TCP DupACK) or by utilising a timer to
                    detect loss (e.g., a transmission timer with a period less than
                    the RTO, <xref target="RFC8085"></xref> <xref
                        target="RFC8985"></xref>) or a combination of the two. 
                    A transport is usually unable
                    to reliably detect whether
                    a loss is a result of congestion. For this reason,
                    loss needs to be treated as incipient congestion, at least until
                    the cause of loss can be reliably determined.
                </li>
                
                <li>Retransmission: When loss is detected,
                    the sender can choose to retransmit the lost data, ignore the
                    loss, or send other data (e.g., <xref target="RFC8085"></xref>
                    <xref target="RFC9002"></xref>), depending on the
                    reliability provided by the transport service. All
                    transmissions consume network capacity, therefore retransmissions
                    MUST NOT increase the network load in response to congestion loss
                    (which worsens that congestion) <xref target="RFC8085"></xref>.
                    Any method that sends additional data following loss is therefore
                    responsible for CC of the retransmissions (and any
                    other packets sent, including FEC information) as well as the
                    original traffic.</li>
                
            </ul>
        </section> <!-- End of detection -->
      
        <section title="Responding to Incipient Congestion">
            <t>In determining an appropriate
                congestion response to incipient congestion, designs could consider
                the size of the packets that experience congestion <xref
                    target="RFC4828"></xref>.</t>
            
            <ul>
                <li> Congestion Response: An endpoint MUST promptly
                    reduce the sending rate when there is an
                    indication of congestion (e.g., loss) <xref
                        target="RFC2914"></xref>.
                
                TCP Reno established a method that relies on
                    multiplicative-decrease to halve the sending rate while congestion
                    is detected. This response to congestion indications is
                    sufficient for safe Internet operation, but other decrease factors
                    have also been published in the RFC Series <xref
                        target="RFC9438"></xref>.</li>
                
                <li> ECN Detection: ECN can help determine an appropriate
                        cwnd to enable early indication of
                        incipient congestion when it is supported by routers on the path <xref
                    target="RFC7567"></xref>.
                    An early detection of incipient congestion
                    allows a different reaction to an explicit congestion signal
                    compared to the reaction to a detected packet loss <xref
                        target="RFC8311"></xref> <xref target="RFC8087"></xref>.
                     Congestion control design should
                    provide the necessary mechanisms to support ECN
                    <xref target="RFC3168"></xref> <xref
                        target="RFC6679"></xref>, as described in section 3.1.7 of <xref
                            target="RFC8085"></xref>. </li>
                  <li> Response to ECN Congestion Marking:
                    Simple
                    feedback of received Congestion Experienced (CE) marks <xref
                        target="RFC3168"></xref> relies only on an indication that
                    congestion has been experienced within the last RTT. This
                    response is appropriate when a flow uses ECT(0) <xref
                        target="RFC3168"></xref>.
                    ABE modified this reaction to ECN <xref
                        target="RFC8511"></xref>. Extended RTP feedback and accurate TCP receiver
                    feedback more detail about the
                    CE-marking  <xref target="I-D.ietf-tcpm-accurate-ecn"></xref>, supporting a
                    finer granularity of congestion response.
                    The L4S architecture
                    <xref target="RFC9330"></xref> allows routers to use
                    a different marking
                system that can provide early reaction to incipient congestion
                <xref target="RFC9332"></xref> and
                      defines a reaction for this feedback
                    when packets are marked with ECT(1).</li>
                <li>
                 <xref target="RFC8085"></xref> provides guidelines
                    for a sender that does not, or is unable to, adapt the cwnd.</li>
            </ul>
        </section> <!-- End of section on Responding to Incipient Congestion -->
                
        <section anchor="Signals" title="Utilising Additional Path Information">
            <t>Path information can be cached.
                In TCP, this was previously called TCP Control Block (TCB)
                sharing, and is now called TCP Control Block Interdependence,
                 <xref target="RFC9040"></xref>.
                A CC can also utilise signals from the network to help determine
                how to regulate the traffic it sends. </t>
            
            <ul>
                <li> Utilising Cached Path Information:  A transport
                    connection between a pair of endpoints can share CC parameters with other
                    connections that share
                    the same path. A CC that recently
                    used a specific path could allow another flow to
                    take-over the previously consumed capacity.
                    Information used to accelerate the growth of the cwnd MUST
                    be viewed as tentative until it is confirmed that the flow
                    was able to utilise the capacity (i.e., the new flow needs to either
                    "use or loose" the
                    capacity). A sender MUST
                    reduce its rate if the capacity is not confirmed within the
                    current RTO interval.</li>
                
                    <li><xref
                     target="RFC8085"></xref> adds "An application that forks multiple
                    worker processes or otherwise uses multiple sockets to generate UDP
                    datagrams SHOULD perform congestion control over the aggregate
                    traffic."</li>
                
               <!-- <li> Receiving Network Signals: Mechanisms MUST NOT solely rely on
                    transport messages or specific signalling messages to perform
                    safely. (Section 5.2 of <xref target="RFC8085"></xref>
                    describes use of ICMP messages). Mechanisms need to
                    safely operate when path characteristics can change at any time.
                    Mechanisms MUST be robust to potential loss of any
                    signals.  Loss or modification of
                    packets can occur after a path changes, even when a signal was successfully first
                    used by a flow, see <xref target="pathchar"></xref>).</li> -->
                    
                    <li>Utilising Network Signals: A mechanism that utilises signals originating in
                    the network (e.g., RSVP, NSIS, Quick-Start, ECN), MUST assume that
                    the set of network devices on the path can change. This motivates
                    use of soft-state for protocols <xref
                        target="RFC9049"></xref> (e.g., ECN) and includes
                    context-sensitive treatment of "soft" signals provided
                    to the endpoint <xref target="RFC5164"></xref>.
                    Endpoints MUST assume the set of routers and links forming the path
                    can change and that network devices can be reconfigured or reset. 
                    A changing set of on-path devices can also affect which types of packets traverse a path
                    (e.g. whether IP options are supported, or a specific treatment applies.)</li>
            </ul>

        </section> <!-- End of Utilising Additional Path Information-->
    </section> <!-- End of section on reacting to incipient congestion -->
    
    <section title="Avoiding Persistent Congestion">

         <t>All endpoints are required to implement mechanisms that avoid
         persistent congestion and can demonstrate that they do not induce
         starvation and congestion collapse (see <xref target="Need-persistent"></xref>).</t>
        <t>Principles include:</t>
        <ul>
        <li>Persistent congestion can
            result in congestion collapse, which MUST be aggressively avoided
            <xref target="RFC2914"></xref>. Endpoints that experience
            persistent congestion and have already reduced their
            cwnd to the loss window (e.g., one packet) MUST
            further reduce the rate if the RTO timer continues to expire. For
            example, TFRC <xref target="RFC5348"></xref> continues to reduce
            its sending rate under persistent congestion to one packet per RTT,
            and then exponentially backs-off the time between single packet
            transmissions if a congestion event continues to persist
            <xref target="RFC2914"></xref>. QUIC <xref target="RFC9002"></xref>
            does not directly specify a period, but does specify a probe to detect tail loss.
            The Tail Loss Probe (TLP) mechanism <xref target="RFC8985"></xref>
            determines that persisent congestion is experienced
            after a loss for a duration of 2 TLP probes plus the RTO.</li>
        </ul>
        
        <section title="Avoiding Congestion Collapse and Flow Starvation">
            <t>Principles include:</t>
            
            <ul>
                <li>Transports MUST avoid inducing flow starving flows
                    that share resources along the path.</li>
                <li>Endpoints MUST treat a loss of all feedback (e.g., RTO expiry)
                    as an indication of persistent
                    congestion. </li>
                <li>When an endpoint detects persistent congestion, it MUST reduce
                    the maximum rate/cwnd.</li>
            </ul>
        </section>
    </section>
    <!-- end section on preventing persistent congestion -->
    <section title="Additional Considerations">
              <t>Many designs place the responsibility of rate-adaption
                for CC at the
                sender (source) endpoint, utilising feedback information provided by
                the remote endpoint (receiver). CC can also be
                implemented by determining an appropriate rate limit at a receiver
                and using this limit to control the maximum transport rate (e.g.,
                using methods such as <xref target="RFC5348"></xref> and <xref
                    target="RFC4828"></xref>).</t>
 

            <t>Applications at an endpoint can send more than one flow. "The specific issue of a
                browser opening multiple connections to the same destination has been
                addressed by <xref target="RFC2616"></xref>. Section 8.1.4 states that
                "Clients that use persistent connections SHOULD limit the number of
                simultaneous connections that they maintain to a given server. A
                single-user client SHOULD NOT maintain more than 2 connections with
                any server or proxy." <xref target="RFC9040"></xref>.</t>
            
        </section>
</section>  <!-- End of Principles -->

<section anchor="Acknowledgements" title="Acknowledgements">
        <t>This document owes much to the insight offered by Sally Floyd, both
            at the time of writing of RFC2914 and her help and review in the many
            years that followed this.</t>
        
        <t>Nicholas Kuhn helped develop the first draft of these guidelines. Tom
            Jones and Ana Custura reviewed the first version of this draft. Many discussions
            with Michael Welzl and others have provided immeasurable help to get this far. The
            University of Aberdeen received funding to support this work from the
            European Space Agency.</t>
</section>
<!-- End of Acknowledgements -->
    
<section anchor="IANA" title="IANA Considerations">
        <t>This memo includes no request to IANA.</t>
        
        <t>RFC Editor Note: If there are no requirements for IANA, the section
            will be removed during conversion into an RFC by the RFC Editor.</t>
</section>
    
<!-- End of IANA Considerations -->
    
<section anchor="Security" title="Security Considerations">
        <t>This document introduces no new security considerations. Each RFC
            listed in this document discusses the security considerations of the
            specification it contains. The security considerations for the use of
            transports are provided in the references section of the cited RFCs.
            Security guidance for applications using UDP is provided in the UDP
            Usage Guidelines <xref target="RFC8085"></xref>.</t>
        
        <t><xref target="Protect"></xref> describes general requirements
            relating to the design of safe protocols and their protection from on
            and off path attack.</t>
        
        <t><xref target="Signals"></xref> follows current best practice to
            validate ICMP messages prior to use.</t>
</section>
<!-- End of Sev Considerations -->

</middle>

<back>

    <references>
        <name>Normative References</name>
        
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.1122.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2914.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3168.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3390.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5348.xml"/>
<!--        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5681.xml"/> -->
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6298.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7567.xml"/>
        <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8085.xml"/>

    </references>

    <references>
        <name>Informative References</name>
<!-- avoiding down REFs -->
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.793.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3742.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7661.xml"/>
<!-- Other Info REFs -->
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.0768.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.0792.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.0896.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.0970.xml"/>

<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2309.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2475.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2525.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2616.xml"/>
        
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3449.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3550.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3819.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3828.xml"/>

<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4301.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4340.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4828.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4960.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5033.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5164.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5783.xml"/>


<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5166.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6077.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6363.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6679.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6773.xml"/>

<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6928.xml"/>

<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7806.xml"/>

<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6951.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8084.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8087.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8311.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.9438.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8511.xml"/>

<!--- draft-ietf-tcpm-rack has been published as RFC 8985 -->
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8985.xml"/>

<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.9000.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.9002.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.9040.xml"/>

<!-- irtf-panrg-what-not-to-do -->
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.9049.xml"/>
<xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.9293.xml"/>
<!-- <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.9293.xml"/> -->
 <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-tcpm-accurate-ecn.xml"/>
 <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.9330.xml"/>
 <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.9332.xml"/>
 <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.9406.xml"/>

<!-- update by Michael to facilitate compilation
 <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml3/reference.I-D.nishida-tcpm-standard-cc-analysis.xml"/> --> 
 
      <reference anchor="Flow-Rate-Fairness">
        <front>
          <title>Flow Rate Fairness: Dismantling a Religion, ACM Computer
          Communication Review 37(2):63-74</title>

          <author fullname="Bob Briscoe" initials="Bob " surname="Briscoe">
            <organization>ACM SIGCOMM Computer Communication Review</organization>
          </author>
          <date month="April" year="2007" />
        </front>
      </reference>
      
      <reference anchor="Jac88" target="ftp://ftp.ee.lbl.gov/papers/congavoid.ps.Z.">
        <front>
          <title>Congestion Avoidance and Control</title>
          <author initials="V." surname="Jacobson">
            <organization/>
          </author>
          <date year="1988" month="August"/>
        </front>
        <seriesInfo name="Computer Communication Review, vol. 18, no. 4, pp. 314-329" value=""/>
      </reference>

      
    </references>

    <section title="Revision Notes">
        <t>Note to RFC-Editor: please remove this entire section prior to
            publication.</t>
        
        <t>Previous versions of the document were presented and discsussed in tsvwg, and eveolved through several versions. This version is a refocus towards the newly formed CC Working Group where it is offered as a candidate for progression.</t>
        <t>Individual draft -00:</t>
        <ul>
            <li>First draft contributed to CC WG targeting publication as BCP.</li>
            <li>Reduced overlap</li>
        </ul>
        
    </section>
  </back>
</rfc>

