<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
    which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs), 
    please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
    (Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space 
    (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="info" docName="draft-briscoe-tsvwg-l4s-arch-02"
     ipr="trust200902" obsoletes="">
  <!-- category values: std, bcp, info, exp, and historic
    ipr values: trust200902, noModificationTrust200902, noDerivativesTrust200902,
       or pre5378Trust200902
    you can add the attributes updates="NNNN" and obsoletes="NNNN" 
    they will automatically be output with "(if approved)" -->

  <!-- ***** FRONT MATTER ***** -->

  <front>
    <!-- The abbreviated title is used in the page header - it is only necessary if the 
       full title is longer than 39 characters -->

    <title abbrev="L4S Architecture">Low Latency, Low Loss, Scalable
    Throughput (L4S) Internet Service: Architecture</title>

    <author fullname="Bob Briscoe" initials="B." role="editor"
            surname="Briscoe">
      <organization>Simula Research Lab</organization>

      <address>
        <postal>
          <street/>
        </postal>

        <email>ietf@bobbriscoe.net</email>

        <uri>http://bobbriscoe.net/</uri>
      </address>
    </author>

    <author fullname="Koen De Schepper" initials="K." surname="De Schepper">
      <organization>Nokia Bell Labs</organization>

      <address>
        <postal>
          <street/>

          <city>Antwerp</city>

          <country>Belgium</country>
        </postal>

        <email>koen.de_schepper@nokia.com</email>

        <uri>https://www.bell-labs.com/usr/koen.de_schepper</uri>
      </address>
    </author>

    <author fullname="Marcelo Bagnulo" initials="M." surname="Bagnulo Braun">
      <organization>Universidad Carlos III de Madrid</organization>

      <address>
        <postal>
          <street>Av. Universidad 30</street>

          <city>Leganes, Madrid 28911</city>

          <country>Spain</country>
        </postal>

        <phone>34 91 6249500</phone>

        <email>marcelo@it.uc3m.es</email>

        <uri>http://www.it.uc3m.es</uri>
      </address>
    </author>

    <date day="" month="" year="2017"/>

    <area>Transport</area>

    <workgroup>Transport Area Working Group</workgroup>

    <keyword>Internet-Draft</keyword>

    <keyword>I-D</keyword>

    <abstract>
      <t>This document describes the L4S architecture for the provision of a
      new service that the Internet could provide to eventually replace best
      efforts for all traffic: Low Latency, Low Loss, Scalable throughput
      (L4S). It is becoming common for <spanx style="emph">all</spanx> (or
      most) applications being run by a user at any one time to require low
      latency. However, the only solution the IETF can offer for ultra-low
      queuing delay is Diffserv, which only favours a minority of packets at
      the expense of others. In extensive testing the new L4S service keeps
      average queuing delay under a millisecond for <spanx style="emph">all</spanx>
      applications even under very heavy load, without sacrificing
      utilization; and it keeps congestion loss to zero. It is becoming widely
      recognized that adding more access capacity gives diminishing returns,
      because latency is becoming the critical problem. Even with a high
      capacity broadband access, the reduced latency of L4S remarkably and
      consistently improves performance under load for applications such as
      interactive video, conversational video, voice, Web, gaming, instant
      messaging, remote desktop and cloud-based apps (even when all being used
      at once over the same access link). The insight is that the root cause
      of queuing delay is in TCP, not in the queue. By fixing the sending TCP
      (and other transports) queuing latency becomes so much better than today
      that operators will want to deploy the network part of L4S to enable new
      products and services. Further, the network part is simple to deploy -
      incrementally with zero-config. Both parts, sender and network, ensure
      coexistence with other legacy traffic. At the same time L4S solves the
      long-recognized problem with the future scalability of TCP
      throughput.</t>

      <t>This document describes the L4S architecture, briefly describing the
      different components and how the work together to provide the
      aforementioned enhanced Internet service.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="l4sps_intro" title="Introduction">
      <t>It is increasingly common for <spanx style="emph">all</spanx> of a
      user's applications at any one time to require low delay: interactive
      Web, Web services, voice, conversational video, interactive video,
      instant messaging, online gaming, remote desktop and cloud-based
      applications. In the last decade or so, much has been done to reduce
      propagation delay by placing caches or servers closer to users. However,
      queuing remains a major, albeit intermittent, component of latency. When
      present it typically doubles the path delay from that due to the base
      speed-of-light. Low loss is also important because, for interactive
      applications, losses translate into even longer retransmission
      delays.</t>

      <t>It has been demonstrated that, once access network bit rates reach
      levels now common in the developed world, increasing capacity offers
      diminishing returns if latency (delay) is not addressed. Differentiated
      services (Diffserv) offers Expedited Forwarding <xref target="RFC3246"/>
      for some packets at the expense of others, but this is not applicable
      when all (or most) of a user's applications require low latency.</t>

      <t>Therefore, the goal is an Internet service with ultra-Low queueing
      Latency, ultra-Low Loss and Scalable throughput (L4S) - for <spanx
      style="emph">all</spanx> traffic. A service for all traffic will need
      none of the configuration or management baggage (traffic policing,
      traffic contracts) associated with favouring some packets over others.
      This document describes the L4S architecture for achieving that
      goal.</t>

      <t>It must be said that queuing delay only degrades performance
      infrequently <xref target="Hohlfeld14"/>. It only occurs when a large
      enough capacity-seeking (e.g. TCP) flow is running alongside the user's
      traffic in the bottleneck link, which is typically in the access
      network. Or when the low latency application is itself a large
      capacity-seeking flow (e.g. interactive video). At these times, the
      performance improvement must be so remarkable that network operators
      will be motivated to deploy it.</t>

      <t>Active Queue Management (AQM) is part of the solution to queuing
      under load. AQM improves performance for all traffic, but there is a
      limit to how much queuing delay can be reduced by solely changing the
      network; without addressing the root of the problem.</t>

      <t>The root of the problem is the presence of standard TCP congestion
      control (Reno <xref target="RFC5681"/>) or compatible variants (e.g. TCP
      Cubic <xref target="I-D.ietf-tcpm-cubic"/>). We shall call this family
      of congestion controls 'Classic' TCP. It has been demonstrated that if
      the sending host replaces Classic TCP with a 'Scalable' alternative,
      when a suitable AQM is deployed in the network the performance under
      load of all the above interactive applications can be stunningly
      improved. For instance, queuing delay under heavy load with the example
      DCTCP/DualQ solution cited below is roughly 1 millisecond (1 ms) at the
      99th percentile without losing link utilization. This compares with 5 to
      20 ms on <spanx style="emph">average</spanx> with a Classic TCP and
      current state-of-the-art AQMs such as fq_CoDel&nbsp;<xref
      target="I-D.ietf-aqm-fq-codel"/> or PIE&nbsp;<xref target="RFC8033"/>.
      Also, with a Classic TCP, 5 ms of queuing is usually only possible by
      losing some utilization.</t>

      <t>It has been convincingly demonstrated <xref target="DCttH15"/> that
      it is possible to deploy such an L4S service alongside the existing best
      efforts service so that all of a user's applications can shift to it
      when their stack is updated. Access networks are typically designed with
      one link as the bottleneck for each site (which might be a home, small
      enterprise or mobile device), so deployment at a single node should give
      nearly all the benefit. The L4S approach requires a number of mechanisms
      in different parts of the Internet to fulfill its goal. This document
      presents the L4S architecture, by describing the different components
      and how they interact to provide the scalable low-latency, low-loss,
      Internet service.</t>
    </section>

    <section title="L4S architecture overview">
      <t>There are three main components to the L4S architecture (illustrated
      in <xref target="l4sps_fig_components"/>):<list style="hanging">
          <t hangText="1) Network:">The L4S service traffic needs to be
          isolated from the queuing latency of the Classic service traffic.
          However, the two should be able to freely share a common pool of
          capacity. This is because there is no way to predict how many flows
          at any one time might use each service and capacity in access
          networks is too scarce to partition into two. So a 'semi-permeable'
          membrane is needed that partitions latency but not bandwidth. The
          Dual Queue Coupled AQM <xref
          target="I-D.briscoe-aqm-dualq-coupled"/> is an example of such a
          semi-permeable membrane.<vspace blankLines="1"/>Per-flow queuing
          such as in <xref target="I-D.ietf-aqm-fq-codel"/> could be used, but
          it partitions both latency and bandwidth between every end-to-end
          flow. So it is rather overkill, which brings disadvantages (see
          <xref target="l4sps_why-not"/>), not least that thousands of queues
          are needed when two are sufficient.</t>

          <t hangText="2) Protocol:">A host needs to distinguish L4S and
          Classic packets with an identifier so that the network can classify
          them into their separate treatments. <xref
          target="I-D.briscoe-tsvwg-ecn-l4s-id"/> considers various
          alternative identifiers, and concludes that all alternatives involve
          compromises, but the ECT(1) codepoint of the ECN field is a workable
          solution.</t>

          <t hangText="3) Host:">Scalable congestion controls already exist.
          They solve the scaling problem with TCP first pointed out in <xref
          target="RFC3649"/>. The one used most widely (in controlled
          environments) is Data Centre TCP (DCTCP <xref
          target="I-D.ietf-tcpm-dctcp"/>), which has been implemented and
          deployed in Windows Server Editions (since 2012), in Linux and in
          FreeBSD. Although DCTCP as-is 'works' well over the public Internet,
          most implementations lack certain safety features that will be
          necessary once it is used outside controlled environments like data
          centres (see later). A similar scalable congestion control will also
          need to be transplanted into protocols other than TCP (SCTP,
          RTP/RTCP, RMCAT, etc.)</t>
        </list></t>

      <figure align="center" anchor="l4sps_fig_components"
              title="Components of an L4S Solution: 1) Isolation in separate network queues; 2) Packet Identification Protocol; and 3) Scalable Sending Host">
        <artwork align="center"><![CDATA[                     (2)                     (1)
              .-------^------. .--------------^-------------------.
 ,-(3)-----.                                  ______
; ________  :            L4S   --------.     |      |
:|Scalable| :               _\        ||___\_| mark |
:| sender | :  __________  / /        ||   / |______|\   _________
:|________|\; |          |/    --------'         ^    \1|         |
 `---------'\_|  IP-ECN  |              Coupling :     \|priority |_\
  ________  / |Classifier|                       :     /|scheduler| /
 |Classic |/  |__________|\    --------.      ___:__  / |_________|
 | sender |                \_\  || | |||___\_| mark/|/
 |________|                  /  || | |||   / | drop |
                      Classic  --------'     |______|

]]></artwork>
      </figure>
    </section>

    <section anchor="l4sps_Terminology" 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"/>.
      In this document, these words will appear with that interpretation only
      when in ALL CAPS. Lower case uses of these words are not to be
      interpreted as carrying RFC-2119 significance. COMMENT: Since this will
      be an information document, This should be removed.</t>

      <t><list style="hanging">
          <t hangText="Classic service:">The 'Classic' service is intended for
          all the congestion control behaviours that currently co-exist with
          TCP Reno (e.g. TCP Cubic, Compound, SCTP, etc).</t>

          <t hangText="Low-Latency, Low-Loss and Scalable (L4S) service:">The
          'L4S' service is intended for traffic from scalable TCP algorithms
          such as Data Centre TCP. But it is also more general&mdash;it will
          allow a set of congestion controls with similar scaling properties
          to DCTCP (e.g. Relentless&nbsp;<xref target="Mathis09"/>) to
          evolve.<vspace blankLines="1"/>Both Classic and L4S services can
          cope with a proportion of unresponsive or less-responsive traffic as
          well (e.g. DNS, VoIP, etc).</t>

          <t hangText="Scalable Congestion Control:">A congestion control
          where flow rate is inversely proportional to the level of congestion
          signals. Then, as flow rate scales, the number of congestion signals
          per round trip remains invariant, maintaining the same degree of
          control. For instance, DCTCP averages 2 congestion signals per
          round-trip whatever the flow rate.</t>

          <t hangText="Classic Congestion Control:">A congestion control with
          a flow rate compatible with standard TCP Reno <xref
          target="RFC5681"/>. With Classic congestion controls, as capacity
          increases enabling higher flow rates, the number of round trips
          between congestion signals (losses or ECN marks) rises in proportion
          to the flow rate. So control of queuing and/or utilization becomes
          very slack. For instance, with 1500 B packets and an RTT of 18 ms,
          as TCP Reno flow rate increases from 2 to 100 Mb/s the number of
          round trips between congestion signals rises proportionately, from 2
          to 100. <vspace blankLines="1"/>The default congestion control in
          Linux (TCP Cubic) is Reno-compatible for most scenarios expected for
          some years. For instance, with a typical domestic round-trip time
          (RTT) of 18ms, TCP Cubic only switches out of Reno-compatibility
          mode once the flow rate approaches 1 Gb/s. For a typical data centre
          RTT of 1 ms, the switch-over point is theoretically 1.3 Tb/s.
          However, with a less common transcontinental RTT of 100 ms, it only
          remains Reno-compatible up to 13 Mb/s. All examples assume 1,500 B
          packets.</t>

          <t hangText="Classic ECN:">The original proposed standard Explicit
          Congestion Notification (ECN) protocol <xref target="RFC3168"/>,
          which requires ECN signals to be treated the same as drops, both
          when generated in the network and when responded to by the
          sender.</t>

          <t hangText="Site:">A home, mobile device, small enterprise or
          campus, where the network bottleneck is typically the access link to
          the site. Not all network arrangements fit this model but it is a
          useful, widely applicable generalisation.</t>
        </list></t>
    </section>

    <section title="L4S architecture components">
      <t>The L4S architecture is composed by the following elements.</t>

      <t>Protocols:The L4S architecture encompass the two protocol changes
      that we describe next: <list style="letters">
          <t><xref target="I-D.briscoe-tsvwg-ecn-l4s-id"/> recommends ECT(1)
          is used as the identifier to classify L4S and Classic packets into
          their separate treatments, as required by <xref
          target="RFC4774"/>.</t>

          <t>An essential aspect of a scalable congestion control is the use
          of explicit congestion signals rather than losses, because the
          signals need to be sent immediately and frequently&mdash;too often
          to use drops. 'Classic' ECN <xref target="RFC3168"/> requires an ECN
          signal to be treated the same as a drop, both when it is generated
          in the network and when it is responded to by hosts. L4S allows
          networks and hosts to support two separate meanings for ECN. So the
          standards track <xref target="RFC3168"/> will need to be updated to
          allow ECT(1) packets to depart from the 'same as drop'
          constraint.<vspace blankLines="1"/><xref
          target="I-D.ietf-tsvwg-ecn-experimentation"/> has been prepared as a
          standards track update to relax specific requirements in RFC 3168
          (and certain other standards track RFCs), which clears the way for
          the above experimental changes proposed for L4S. <xref
          target="I-D.ietf-tsvwg-ecn-experimentation"/> also obsoletes the
          original experimental assignment of the ECT(1) codepoint as an ECN
          nonce <xref target="RFC3540"/> (it was never deployed, and it offers
          no security benefit now that deployment is optional).</t>
        </list></t>

      <t>Network components:The Dual Queue Coupled AQM has been specified as
      generically as possible <xref target="I-D.briscoe-aqm-dualq-coupled"/>
      as a 'semi-permeable' membrane without specifying the particular AQMs to
      use in the two queues. An informational appendix of the draft is
      provided for pseudocode examples of different possible AQM approaches.
      Initially a zero-config variant of RED called Curvy RED was implemented,
      tested and documented. The aim is for designers to be free to implement
      diverse ideas. So the brief normative body of the draft only specifies
      the minimum constraints an AQM needs to comply with to ensure that the
      L4S and Classic services will coexist. For instance, a variant of PIE
      called Dual PI Squared <xref target="PI2"/> has been implemented and
      found to perform better over a wide range of conditions, so it has been
      documented in a second appendix of <xref
      target="I-D.briscoe-aqm-dualq-coupled"/>.</t>

      <t>Host mechanisms: The L4S architecture includes a number of mechanisms
      in the end host that we enumerate next:<list style="letters">
          <t>Data Centre TCP is the most widely used example of a scalable
          congestion control. It is being documented in the TCPM WG as an
          informational record of the protocol currently in use <xref
          target="I-D.ietf-tcpm-dctcp"/>. It will be necessary to define a
          number of safety features for a variant usable on the public
          Internet. A draft list of these, known as the TCP Prague
          requirements, has been drawn up (see <xref
          target="l4sps_tcp-prague-reqs"/>). The list also includes some
          optional performance improvements.</t>

          <t>Transport protocols other than TCP use various congestion
          controls designed to be friendly with Classic TCP. Before they can
          use the L4S service, it will be necessary to implement scalable
          variants of each of these transport behaviours. The following
          standards track RFCs currently define these protocols: ECN in TCP
          <xref target="RFC3168"/>, in SCTP <xref target="RFC4960"/>, in RTP
          <xref target="RFC6679"/>, and in DCCP <xref target="RFC4340"/>. Not
          all are in widespread use, but those that are will eventually need
          to be updated to allow a different congestion response, which they
          will have to indicate by using the ECT(1) codepoint. Scalable
          variants are under consideration for some new transport protocols
          that are themselves under development, e.g. QUIC <xref
          target="I-D.johansson-quic-ecn"/> and certain real-time media
          congestion avoidandance techniques (RMCAT) protocols.</t>

          <t>ECN feedback is sufficient for L4S in some transport protocols
          (RTCP, DCCP) but not others:<list style="symbols">
              <t>For the case of TCP, the feedback protocol for ECN embeds the
              assumption from Classic ECN that it is the same as drop, making
              it unusable for a scalable TCP. Therefore, the implementation of
              TCP receivers will have to be upgraded <xref target="RFC7560"/>.
              Work to standardize more accurate ECN feedback for TCP (AccECN
              <xref target="I-D.ietf-tcpm-accurate-ecn"/>) is already in
              progress.</t>

              <t>ECN feedback is only roughly sketched in an appendix of the
              SCTP specification. A fuller specification has been proposed
              <xref target="I-D.stewart-tsvwg-sctpecn"/>, which would need to
              be implemented and deployed before SCTCP could support L4S.</t>
            </list></t>
        </list></t>

      <!--        <t>Currently, the new specification of the ECN protocol <xref
        target="I-D.briscoe-tsvwg-ecn-l4s-id"/> has been written for the
        experimental track. Perhaps a better approach would be to make this a
        standards track protocol draft that updates the definition of ECT(1)
        in all the above standards track RFCs and obsoletes its experimental
        use for the ECN nonce. Then experimental specifications of example
        network (AQM) and host (congestion control) algorithms can be
        written.</t> -->
    </section>

    <section title="Rationale">
      <t/>

      <section title="Why These Primary Components?">
        <t><list style="hanging">
            <t hangText="Explicit congestion signalling (protocol):">Explicit
            congestion signalling is a key part of the L4S approach. In
            contrast, use of drop as a congestion signal creates a tension
            because drop is both a useful signal (more would reduce delay) and
            an impairment (less would reduce delay). Explicit congestion
            signals can be used many times per round trip, to keep tight
            control, without any impairment. Under heavy load, even more
            explicit signals can be applied so the queue can be kept short
            whatever the load. Whereas state-of-the-art AQMs have to introduce
            very high packet drop at high load to keep the queue short.
            Further, TCP's sawtooth reduction can be smaller, and therefore
            return to the operating point more often, without worrying that
            this causes more signals (one at the top of each smaller
            sawtooth). The consequent smaller amplitude sawteeth fit between a
            very shallow marking threshold and an empty queue, so delay
            variation can be very low, without risk of under-utilization.
            <vspace blankLines="1"/>All the above makes it clear that explicit
            congestion signalling is only advantageous for latency if it does
            not have to be considered 'the same as' drop (as required with
            Classic ECN <xref target="RFC3168"/>). Therefore, in a DualQ AQM,
            the L4S queue uses a new L4S variant of ECN that is not equivalent
            to drop <xref target="I-D.briscoe-tsvwg-ecn-l4s-id"/>, while the
            Classic queue uses either classic ECN <xref target="RFC3168"/> or
            drop, which are equivalent.<vspace blankLines="1"/>Before Classic
            ECN was standardized, there were various proposals to give an ECN
            mark a different meaning from drop. However, there was no
            particular reason to agree on any one of the alternative meanings,
            so 'the same as drop' was the only compromise that could be
            reached. RFC 3168 contains a statement that:<list style="empty">
                <t>"An environment where all end nodes were ECN-Capable could
                allow new criteria to be developed for setting the CE
                codepoint, and new congestion control mechanisms for end-node
                reaction to CE packets. However, this is a research issue, and
                as such is not addressed in this document."</t>
              </list></t>

            <t
            hangText="Latency isolation with coupled congestion notification (network):">Using
            just two queues is not essential to L4S (more would be possible),
            but it is the simplest way to isolate all the L4S traffic that
            keeps latency low from all the legacy Classic traffic that does
            not.<vspace blankLines="1"/>Similarly, coupling the congestion
            notification between the queues is not necessarily essential, but
            it is a clever and simple way to allow senders to determine their
            rate, packet-by-packet, rather than be overridden by a network
            scheduler. Because otherwise a network scheduler would have to
            inspect at least transport layer headers, and it would have to
            continually assign a rate to each flow without any easy way to
            understand application intent.</t>

            <t hangText="L4S packet identifier (protocol):">Once there are at
            least two separate treatments in the network, hosts need an
            identifier at the IP layer to distinguish which treatment they
            intend to use.</t>

            <t hangText="Scalable congestion notification (host):">A scalable
            congestion control keeps the signalling frequency high so that
            rate variations can be small when signalling is stable, and rate
            can track variations in available capacity as rapidly as possible
            otherwise.</t>
          </list></t>
      </section>

      <section anchor="l4sps_why-not" title="Why Not Alternative Approaches?">
        <t>All the following approaches address some part of the same problem
        space as L4S. In each case, it is shown that L4S complements them or
        improves on them, rather than being a mutually exclusive
        alternative:<list style="hanging">
            <t hangText="Diffserv:">Diffserv addresses the problem of
            bandwidth apportionment for important traffic as well as queuing
            latency for delay-sensitive traffic. L4S solely addresses the
            problem of queuing latency (as well as loss and throughput
            scaling). Diffserv will still be necessary where important traffic
            requires priority (e.g. for commercial reasons, or for protection
            of critical infrastructure traffic). Nonetheless, if there are
            Diffserv classes for important traffic, the L4S approach can
            provide low latency for <spanx style="emph">all</spanx> traffic
            within each Diffserv class (including the case where there is only
            one Diffserv class).<vspace blankLines="1"/>Also, as already
            explained, Diffserv only works for a small subset of the traffic
            on a link. It is not applicable when all the applications in use
            at one time at a single site (home, small business or mobile
            device) require low latency. Also, because L4S is for all traffic,
            it needs none of the management baggage (traffic policing, traffic
            contracts) associated with favouring some packets over others.
            This baggage has held Diffserv back from widespread end-to-end
            deployment.</t>

            <t hangText="State-of-the-art AQMs:">AQMs such as PIE and fq_CoDel
            give a significant reduction in queuing delay relative to no AQM
            at all. The L4S work is intended to complement these AQMs, and we
            definitely do not want to distract from the need to deploy them as
            widely as possible. Nonetheless, without addressing the large
            saw-toothing rate variations of Classic congestion controls, AQMs
            alone cannot reduce queuing delay too far without significantly
            reducing link utilization. The L4S approach resolves this tension
            by ensuring hosts can minimize the size of their sawteeth without
            appearing so aggressive to legacy flows that they starve.</t>

            <t hangText="Per-flow queuing:">Similarly per-flow queuing is not
            incompatible with the L4S approach. However, one queue for every
            flow can be thought of as overkill compared to the minimum of two
            queues for all traffic needed for the L4S approach. The overkill
            of per-flow queuing has side-effects:<list style="letters">
                <t>fq makes high performance networking equipment costly
                (processing and memory) - in contrast dual queue code can be
                very simple;</t>

                <t>fq requires packet inspection into the end-to-end transport
                layer, which doesn't sit well alongside encryption for privacy
                - in contrast a dual queue only operates at the IP layer;</t>

                <t>fq isolates the queuing of each flow from the others and it
                prevents any one flow from consuming more than 1/N of the
                capacity. In contrast, all L4S flows are expected to keep the
                queue shallow, and policing of individual flows to enforce
                this may be applied separately, as a policy choice. <vspace
                blankLines="1"/>An fq scheduler has to decide packet-by-packet
                which flow to schedule without knowing application intent.
                Whereas a separate policing function can be configured less
                strictly, so that senders can still control the instantaneous
                rate of each flow dependent on the needs of each application
                (e.g. variable rate video), giving more wriggle-room before a
                flow is deemed non-compliant. Also policing of queuing and of
                flow-rates can be applied independently.</t>
              </list></t>

            <t hangText="Alternative Back-off ECN (ABE):">Yet again, L4S is
            not an alternative to ABE but a complement that introduces much
            lower queuing delay. ABE <xref
            target="I-D.khademi-tcpm-alternativebackoff-ecn"/> alters the host
            behaviour in response to ECN marking to utilize a link better and
            give ECN flows a faster throughput, but it assumes the network
            still treats ECN and drop the same. Therefore ABE exploits any
            lower queuing delay that AQMs can provide. But as explained above,
            AQMs still cannot reduce queuing delay too far without losing link
            utilization (for other non-ABE flows).</t>
          </list></t>
      </section>
    </section>

    <section title="Applicability">
      <t>A transport layer that solves the current latency issues will provide
      new service, product and application opportunities.</t>

      <t>With the L4S approach, the following existing applications will
      immediately experience significantly better quality of experience under
      load in the best effort class: <list style="symbols">
          <t>Gaming</t>

          <t>VoIP</t>

          <t>Video conferencing</t>

          <t>Web browsing</t>

          <t>(Adaptive) video streaming</t>

          <t>Instant messaging</t>
        </list></t>

      <t>The significantly lower queuing latency also enables some interactive
      application functions to be offloaded to the cloud that would hardly
      even be usable today: <list style="symbols">
          <t>Cloud based interactive video</t>

          <t>Cloud based virtual and augmented reality</t>
        </list></t>

      <t>The above two applications have been successfully demonstrated with
      L4S, both running together over a 40 Mb/s broadband access link loaded
      up with the numerous other latency sensitive applications in the
      previous list as well as numerous downloads. A panoramic video of a
      football stadium can be swiped and pinched so that on the fly a proxy in
      the cloud generates a sub-window of the match video under the
      finger-gesture control of each user. At the same time, a virtual reality
      headset fed from a 360 degree camera in a racing car has been
      demonstrated, where the user's head movements control the scene
      generated in the cloud. In both cases, with 7 ms end-to-end base delay,
      the additional queuing delay of roughly 1 ms is so low that it seems the
      video is generated locally. See https://riteproject.eu/dctth/ for videos
      of these demonstrations.</t>

      <t>Using a swiping finger gesture or head movement to pan a video are
      extremely demanding applications&mdash;far more demanding than VoIP.
      Because human vision can detect extremely low delays of the order of
      single milliseconds when delay is translated into a visual lag between a
      video and a reference point (the finger or the orientation of the
      head).</t>

      <t>If low network delay is not available, all fine interaction has to be
      done locally and therefore much more redundant data has to be
      downloaded. When all interactive processing can be done in the cloud,
      only the data to be rendered for the end user needs to be sent. Whereas,
      once applications can rely on minimal queues in the network, they can
      focus on reducing their own latency by only minimizing the application
      send queue.</t>

      <!--{ToDo: This para needs to be explained better} Also lower network layers can finally be further optimized for low latency and stable throughput. Today it is not cost efficient, as the largest part of the traffic (classic best effort) needs to allow "big" queues anyway (up to several 100s of milliseconds) to make classic congestion control work correctly. While technology is known and feasible to support low latency with reliable throughput (even mobile), it is today not considered as economically relevant, as best effort can absorb any burst, delay or throughput variations without end-users experiencing any difference from the normal tay-to-day operation due to congestion control limitations.-->

      <section title="Use Cases">
        <t>The following use-cases for L4S are being considered by various
        interested parties:<list style="symbols">
            <t>Where the bottleneck is one of various types of access network:
            DSL, cable, mobile, satellite<list style="symbols">
                <t>Radio links (cellular, WiFi) that are distant from the
                source are particularly challenging. The radio link capacity
                can vary rapidly by orders of magnitude, so it is often
                desirable to hold a buffer to utilise sudden increases of
                capacity;</t>

                <t>cellular networks are further complicated by a perceived
                need to buffer in order to make hand-overs imperceptible;</t>

                <t>Satellite networks generally have a very large base RTT, so
                even with minimal queuing, overall delay can never be
                extremely low;</t>

                <t>Nonetheless, it is certainly desirable not to hold a buffer
                purely because of the sawteeth of Classic TCP, when it is more
                than is needed for all the above reasons.</t>
              </list></t>

            <t>Private networks of heterogeneous data centres, where there is
            no single administrator that can arrange for all the simultaneous
            changes to senders, receivers and network needed to deploy
            DCTCP:<list style="symbols">
                <t>a set of private data centres interconnected over a wide
                area with separate administrations, but within the same
                company</t>

                <t>a set of data centres operated by separate companies
                interconnected by a community of interest network (e.g. for
                the finance sector)</t>

                <t>multi-tenant (cloud) data centres where tenants choose
                their operating system stack (Infrastructure as a Service -
                IaaS)</t>
              </list></t>

            <t>Different types of transport (or application) congestion
            control:<list>
                <t>elastic (TCP/SCTP);</t>

                <t>real-time (RTP, RMCAT);</t>

                <t>query (DNS/LDAP).</t>
              </list></t>

            <t>Where low delay quality of service is required, but without
            inspecting or intervening above the IP layer <xref
            target="I-D.you-encrypted-traffic-management"/>:<list>
                <t>mobile and other networks have tended to inspect higher
                layers in order to guess application QoS requirements.
                However, with growing demand for support of privacy and
                encryption, L4S offers an alternative. There is no need to
                select which traffic to favour for queuing, when L4S gives
                favourable queuing to all traffic.</t>
              </list></t>

            <t>If queuing delay is minimized, applications with a fixed delay
            budget can communicate over longer distances, or via a longer
            chain of service functions <xref target="RFC7665"/> or onion
            routers.</t>
          </list></t>
      </section>

      <section title="Deployment Considerations">
        <t>The DualQ is, in itself, an incremental deployment framework for
        L4S AQMs so that L4S traffic can coexist with existing Classic
        "TCP-friendly" traffic. <xref target="l4sarch_deploy_top"/> explains
        why only deploying AQM in one node at each end of the access link will
        realize nearly all the benefit. </t>

        <t>L4S involves both end systems and the network, so <xref
        target="l4s_arch_deploy_seq"/> suggests some typical sequences to
        deploy each part, and why there will be an immediate and significant
        benefit after deploying just one part.</t>

        <t>If an ECN-enabled DualQ AQM has not been deployed at a bottleneck,
        an L4S flow is required to include a fall-back strategy to Classic
        behaviour. <xref target="l4sarch_sec_non-l4s-neck"/> describes how an
        L4S flow detects this, and how to minimize the effect of false
        negative detection.</t>

        <section anchor="l4sarch_deploy_top" title="Deployment Topology">
          <t>Nonetheless, DualQ AQMs will not have to be deployed throughout
          the Internet before L4S will work for anyone. Operators of public
          Internet access networks typically design their networks so that the
          bottleneck will nearly always occur at one known (logical) link.
          This confines the cost of queue management technology to one
          place.</t>

          <t>The case of mesh networks is different and will be discussed
          later. But the known bottleneck case is generally true for Internet
          access to all sorts of different 'sites', where the word 'site'
          includes home networks, small-to-medium sized campus or enterprise
          networks and even cellular devices (<xref
          target="l4sarch_fig_access_topology"/>). Also, this known-bottleneck
          case tends to be true whatever the access link technology; whether
          xDSL, cable, cellular, line-of-sight wireless or satellite.</t>

          <t>Therefore, the full benefit of the L4S service should be
          available in the downstream direction when the DualQ AQM is deployed
          at the ingress to this bottleneck link (or links for multihomed
          sites). And similarly, the full upstream service will be available
          once the DualQ is deployed at the upstream ingress.</t>

          <figure align="center" anchor="l4sarch_fig_access_topology"
                  title="Likely location of DualQ Deployments in common access topologies">
            <artwork><![CDATA[                                         ______
                                        (      )
                      __          __  (          )
                     |DQ\________/DQ|( enterprise )
                 ___ |__/        \__| ( /campus  )
                (   )                   (______)
              (      )                           ___||_
+----+      (          )  __                 __ /      \
| DC |-----(    Core    )|DQ\_______________/DQ|| home |
+----+      (          ) |__/               \__||______|
               (_____) __       
                      |DQ\__/\        __ ,===.
                      |__/    \  ____/DQ||| ||mobile
                               \/    \__|||_||device
                                         | o |
                                         `---'

]]></artwork>
          </figure>

          <t>Deployment in mesh topologies depends on how over-booked the core
          is. If the core is non-blocking, or at least generously provisioned
          so that the edges are nearly always the bottlenecks, it would only
          be necessary to deploy the DualQ AQM at the edge bottlenecks. For
          example, some datacentre networks are designed with the bottleneck
          in the hypervisor or host NICs, while others bottleneck at the
          top-of-rack switch (both the output ports facing hosts and those
          facing the core). </t>

          <t>The DualQ would eventually also need to be deployed at any other
          persistent bottlenecks such as network interconnections, e.g. some
          public Internet exchange points and the ingress and egress to WAN
          links interconnecting datacentres.</t>
        </section>

        <section anchor="l4s_arch_deploy_seq" title="Deployment Sequences">
          <t>For any one L4S flow to work, it requires 3 parts to have been
          deployed. This was the same deployment problem that ECN faced <xref
          target="I-D.iab-protocol-transitions"/> so we have learned from
          this.</t>

          <t>FIrstly, L4S deployment exploits the fact that DCTCP already
          exists on many Internet hosts (Windows, FreeBSD and Linux); both
          servers and clients. Therefore, just deploying DualQ AQM at a
          network bottleneck immediately gives a working deployment of all the
          L4S parts. DCTCP needs some safety concerns to be fixed for general
          use over the public Internet (see <xref
          target="l4sps_tcp-prague-reqs"/>), but DCTCP is not on by default,
          so these issues can be managed within controlled deployments or
          controlled trials.</t>

          <t>Secondly, the performance improvement with L4S is so significant
          that it enables new interactive services and products that were not
          previously possible. It is much easier for companies to initiate new
          work on deployment if there is budget for a new product trial. If,
          in contrast, there were only an incremental performance improvement
          (as with Classic ECN), spending on deployment tends to be much
          harder to justify. </t>

          <t>Thirdly, the L4S identifier is defined so that intially network
          operators can enable L4S exclusively for certain customers or
          certain applications. But this is carefully defined so that it does
          not compromise future evolution towards L4S as an Internet-wide
          service. This is because the L4S identifier is defined not only as
          the end-to-end ECN field, but it can also optionally be combined
          with any other packet header or some status of a customer or their
          access link. Operators could do this anyway, even if it were not
          blessed by the IETF. However, it is best for the IETF to specify
          that they must use their own local identifier in combination with
          the IETF's identifier. Then, if an operator enables the optional
          local-use approach, they only have to remove this extra rule to make
          the service work Internet-wide - it will already traverse
          middleboxes, peerings, etc. </t>

          <figure align="center" anchor="l4s_arch_fig_deploy_seq"
                  title="Example L4S Deployment Sequences">
            <artwork><![CDATA[+-+--------------------+----------------------+---------------------+
| | Servers or proxies |      Access link     |             Clients |
+-+--------------------+----------------------+---------------------+
|1| DCTCP (existing)   |                      |    DCTCP (existing) |
| |                    | DualQ AQM downstream |                     |
| |       WORKS DOWNSTREAM FOR CONTROLLED DEPLOYMENTS/TRIALS        |
+-+--------------------+----------------------+---------------------+
|2| TCP Prague         |                      |  AccECN (already in |
| |                    |                      | progress:DCTCP/BBR) |
| |                 FULLY     WORKS     DOWNSTREAM                  |
+-+--------------------+----------------------+---------------------+
|3|                    |  DualQ AQM upstream  |          TCP Prague |
| |                    |                      |                     |
| |              FULLY WORKS UPSTREAM AND DOWNSTREAM                |
+-+--------------------+----------------------+---------------------+

]]></artwork>
          </figure>

          <t><xref target="l4s_arch_fig_deploy_seq"/> illustrates some example
          sequences in which the parts of L4S might be deployed. It consists
          of the following stages:<list style="numbers">
              <t>Here, the immediate benefit of a single AQM deployment can be
              seen, but limited to a controlled trial or controlled
              deployment. In this example downstream deployment is first, but
              in other scenarios the upstream might be go first. The DualQ AQM
              also greatly improves the downstream Classic service, assuming
              no other AQM has already been deployed.</t>

              <t>In this stage, the name 'TCP Prague' is used to represent a
              variant of DCTCP that is safe to use in a production
              environment. If the application is primarily unidirectional,
              'TCP Prague' is only needed at one end. Accurate ECN feedback
              (AccECN) <xref target="I-D.ietf-tcpm-accurate-ecn"/> is needed
              at the other end, but it is a generic ECN feedback facility that
              is already planned to be deployed for other purposes, e.g.
              DCTCP, BBR <xref target="BBR"/>. The two ends can be deployed in
              either order, because TCP Prague only enables itself if it has
              negotiated the use of AccECN feedback with the other end during
              the connection handshake. Thus, deployment on both ends (and in
              some cases only one) enables L4S trials to move to a production
              service, in one direction. This stage might be further motivated
              by performance improvements between DCTCP and TCP Prague <xref
              target="l4sps_tcp-prague-reqs"/>.</t>

              <t>This is a two-move stage to enable L4S upstream. The DualQ or
              TCP Prague can be deployed in either order as already explained.
              To motivate the first of two independent moves, the deferred
              benefit of enabling new services after the second move has to be
              worth it to cover the first mover's investment risk. As
              explained already, the potential for new services provides this
              motivation. The DualQ AQM also greatly improves the upstream
              Classic service, assuming no other AQM has already been
              deployed.</t>
            </list>Note that other deployment sequences might occur. For
          instance: the upstream might be deployed first; a non-TCP protocol
          might be used end-to-end, e.g. QUIC, RMCAT; a body such as the 3GPP
          might require L4S to be implemented in 5G user equipment, or other
          random acts of kindness.</t>
        </section>

        <section anchor="l4sarch_sec_non-l4s-neck"
                 title="L4S Flow but Non-L4S Bottleneck">
          <t>If L4S is enabled between two hosts but there is no L4S AQM at
          the bottleneck, any drop from the bottleneck will trigger the L4S
          sender to fall back to a 'TCP-Friendly' behaviour (Requirement #4.1
          in <xref target="l4sps_tcp-prague-reqs"/>).</t>

          <t>Unfortunately, as well as protecting legacy traffic, this rule
          degrades the L4S service whenever there is a loss, even if the loss
          was not from a non-DualQ bottleneck (false negative). And
          unfortunately, prevalent drop can be due to other causes, e.g.:<list
              style="symbols">
              <t>congestion loss at other transient bottlenecks, e.g. due to
              bursts in shallower queues;</t>

              <t>transmission errors, e.g. due to electrical interference;</t>

              <t>rate policing.</t>
            </list></t>

          <t>Three complementary approaches are in progress, but they are all
          currently research:<list style="symbols">
              <t>In TCP Prague, use a similar approach to BBR <xref
              target="BBR"/> to ignore selected losses. This could mask any of
              the above types of loss (requires consensus on how to safely
              interoperate with drop-based congestion controls). </t>

              <t>A combination of RACK, reconfigured link retransmission and
              L4S could address transmission errors (no reference yet);</t>

              <t>Hybrid ECN/drop policers (see <xref
              target="l4s_arch_sec_policing"/>).</t>
            </list></t>

          <t>L4S deployment scenarios that minimize these issues (e.g. over
          wireline networks) can proceed in parallel to this research, in the
          expectation that research success will continually widen L4S
          applicability.</t>

          <t>In recent studies there has been no evidence of Classic ECN
          support in AQMs on the Internet. If Classic ECN support does
          materialize, a way to satisfy Requirement #4.2 in <xref
          target="l4sps_tcp-prague-reqs"/> will have to be added to TCP
          Prague.</t>
        </section>

        <section title="Other Potential Deployment Issues">
          <t>An L4S AQM uses the ECN field to signal congestion. So, in common
          with Classic ECN, if the AQM is within a tunnel or at a lower layer,
          correct functioning of ECN signalling requires correct propagation
          of the ECN field up the layers <xref
          target="I-D.ietf-tsvwg-ecn-encap-guidelines"/>.</t>
        </section>
      </section>
    </section>

    <section anchor="l4sps_IANA" title="IANA Considerations">
      <t>This specification contains no IANA considerations.</t>
    </section>

    <section anchor="l4sps_Security_Considerations"
             title="Security Considerations">
      <section title="Traffic (Non-)Policing">
        <t>Because the L4S service can serve all traffic that is using the
        capacity of a link, it should not be necessary to police access to the
        L4S service. In contrast, Diffserv only works if some packets get less
        favourable treatement than others. So it has to use traffic policers
        to limit how much traffic can be favoured, In turn, traffic policers
        require traffic contracts between users and networks as well as
        pairwise between networks. Because L4S will lack all this management
        complexity, it is more likely to work end-to-end.</t>

        <t>During early deployment (and perhaps always), some networks will
        not offer the L4S service. These networks do not need to police or
        re-mark L4S traffic - they just forward it unchanged as best efforts
        traffic, as they would already forward traffic with ECT(1) today. At a
        bottleneck, such networks will introduce some queuing and dropping.
        When a scalable congestion control detects a drop it will have to
        respond as if it is a Classic congestion control (see item 3-1 in
        <xref target="l4sps_tcp-prague-reqs"/>). This will ensure safe
        interworking with other traffic at the 'legacy' bottleneck, but it
        will degrade the L4S service to no better (but never worse) than
        classic best efforts, whenever a legacy (non-L4S) bottleneck is
        encountered on a path.</t>

        <t>Certain network operators might choose to restict access to the L4S
        class, perhaps only to customers who have paid a premium. Their packet
        classifer (item 2 in <xref target="l4sps_fig_components"/>) could
        identify such customers against some other field (e.g. source address
        range) as well as ECN. If only the ECN L4S identifier matched, but not
        the source address (say), the classifier could direct these packets
        (from non-paying customers) into the Classic queue. Allowing operators
        to use an additional local classifier is intended to remove any
        incentive to bleach the L4S identifier. Then at least the L4S ECN
        identifier will be more likely to survive end-to-end even though the
        service may not be supported at every hop. Such arrangements would
        only require simple registered/not-registered packet classification,
        rather than the managed application-specific traffic policing against
        customer-specific traffic contracts that Diffserv requires.</t>
      </section>

      <section title="'Latency Friendliness'">
        <t>The L4S service does rely on self-constraint - not in terms of
        limiting capacity usage, but in terms of limiting burstiness. It is
        hoped that standardisation of dynamic behaviour (cf. TCP slow-start)
        and self-interest will be sufficient to prevent transports from
        sending excessive bursts of L4S traffic, given the application's own
        latency will suffer most from such behaviour.</t>

        <t>Whether burst policing becomes necessary remains to be seen.
        Without it, there will be potential for attacks on the low latency of
        the L4S service. However it may only be necessary to apply such
        policing reactively, e.g. punitively targeted at any deployments of
        new bursty malware.</t>
      </section>

      <section anchor="l4s_arch_sec_policing"
               title="Policing Prioritized L4S Bandwidth">
        <t>As mentioned in <xref target="l4sps_why-not"/>, L4S should remove
        the need for low latency Diffserv classes. However, those Diffserv
        classes that give certain applications or users priority over
        capacity, would still be applicable. Then, within such Diffserv
        classes, L4S would often be applicable to give traffic low latency and
        low loss. WIthin such a class, the bandwidth available to a user or
        application is often limited by a rate policer. Similarly, in the
        default Diffserv class, rate policers are used to partition shared
        capacity.</t>

        <t>A classic rate policer drops any packets exceeding a set rate,
        usually also giving a burst allowance (variant exist where the policer
        re-marks non-compliant traffic to a discard-eligible Diffserv
        codepoint, so they may be dropped elsewhere during contention). In
        networks that deploy L4S and use rate policers, it will be preferable
        to deploy a policer designed to be more friendly to the L4S
        service,</t>

        <t>This is currently a research area. it might be achieved by setting
        a threshold where ECN marking is introduced, such that it is just
        under the policed rate or just under the burst allowance where drop is
        introduced. This could be applied to various types of policer, e.g.
        <xref target="RFC2697"/>, <xref target="RFC2698"/> or the local
        (non-ConEx) variant of the ConEx congestion policer <xref
        target="I-D.briscoe-conex-policing"/>. Otherwise, whenever L4S traffic
        encounters a rate policer, it will experience drops and the source
        will fall back to a Classic congestion control, thus losing all the
        benefits of L4S.</t>

        <t>Further discussion of the applicability of L4S to the various
        Diffserv classes, and the design of suitable L4S rate policers.</t>
      </section>

      <section title="ECN Integrity">
        <t>Receiving hosts can fool a sender into downloading faster by
        suppressing feedback of ECN marks (or of losses if retransmissions are
        not necessary or available otherwise). <xref target="RFC3540"/>
        proposes that a TCP sender could pseudorandomly set either of ECT(0)
        or ECT(1) in each packet of a flow and remember the sequence it had
        set, termed the ECN nonce. If the receiver supports the nonce, it can
        prove that it is not suppressing feedback by reflecting its knowledge
        of the sequence back to the sender. The nonce was proposed on the
        assumption that receivers might be more likely to cheat congestion
        control than senders (although senders also have a motive to
        cheat).</t>

        <t>If L4S uses the ECT(1) codepoint of ECN for packet classification,
        it will have to obsolete the experimental nonce. As far as is known,
        the ECN Nonce has never been deployed, and it was only implemented for
        a couple of testbed evaluations. It would be nearly impossible to
        deploy now, because any misbehaving receiver can simply opt-out, which
        would be unremarkable given all receivers currently opt-out.</t>

        <t>Other ways to protect TCP feedback integrity have since been
        developed. For instance:<list style="symbols">
            <t>the sender can test the integrity of the receiver's feedback by
            occasionally setting the IP-ECN field to a value normally only set
            by the network. Then it can test whether the receiver's feedback
            faithfully reports what it expects <xref
            target="I-D.moncaster-tcpm-rcv-cheat"/>. This method consumes no
            extra codepoints. It works for loss and it will work for ECN
            feedback in any transport protocol suitable for L4S. However, it
            shares the same assumption as the nonce; that the sender is not
            cheating and it is motivated to prevent the receiver cheating;</t>

            <t>A network can enforce a congestion response to its ECN markings
            (or packet losses) by auditing congestion exposure (ConEx) <xref
            target="RFC7713"/>. Whether the receiver or a downstream network
            is suppressing congestion feedback or the sender is unresponsive
            to the feedback, or both, ConEx audit can neutralise any advantage
            that any of these three parties would otherwise gain. ConEx is
            only currently defined for IPv6 and consumes a destination option
            header. It has been implemented, but not deployed as far as is
            known.</t>
          </list></t>
      </section>
    </section>

    <section title="Acknowledgements">
      <t>Thanks to Wes Eddy, Karen Nielsen and David Black for their useful
      review comments.</t>
    </section>
  </middle>

  <!--  *****BACK MATTER ***** -->

  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119" ?>
    </references>

    <references title="Informative References">
      <?rfc include="reference.RFC.3168" ?>

      <?rfc include="reference.RFC.4774" ?>

      <?rfc include="reference.RFC.6679" ?>

      <?rfc include="reference.RFC.3540" ?>

      <?rfc include="reference.RFC.3246" ?>

      <?rfc include="reference.RFC.3649" ?>

      <?rfc include="reference.RFC.4340" ?>

      <?rfc include="reference.RFC.4960" ?>

      <?rfc include="reference.RFC.5681" ?>

      <?rfc include="reference.RFC.7560" ?>

      <?rfc include="reference.RFC.7665" ?>

      <?rfc include="reference.RFC.2697" ?>

      <?rfc include="reference.RFC.2698" ?>

      <?rfc include="reference.I-D.ietf-tcpm-accurate-ecn" ?>

      <?rfc include="reference.RFC.8033" ?>

      <?rfc include="reference.I-D.ietf-aqm-fq-codel" ?>

      <?rfc include="reference.I-D.moncaster-tcpm-rcv-cheat" ?>

      <?rfc include="reference.RFC.7713" ?>

      <?rfc include="reference.I-D.briscoe-aqm-dualq-coupled" ?>

      <?rfc include="reference.I-D.briscoe-conex-policing" ?>

      <?rfc include="reference.I-D.briscoe-tsvwg-ecn-l4s-id" ?>

      <?rfc include="reference.I-D.stewart-tsvwg-sctpecn" ?>

      <?rfc include="reference.I-D.ietf-tcpm-dctcp" ?>

      <?rfc include="reference.I-D.ietf-tcpm-cubic" ?>

      <?rfc include="reference.I-D.khademi-tcpm-alternativebackoff-ecn" ?>

      <?rfc include="reference.I-D.you-encrypted-traffic-management" ?>

      <?rfc include="reference.I-D.ietf-tsvwg-ecn-experimentation" ?>

      <?rfc include="reference.I-D.johansson-quic-ecn" ?>

      <?rfc include="reference.I-D.iab-protocol-transitions" ?>

      <?rfc include="reference.I-D.ietf-tsvwg-ecn-encap-guidelines" ?>

      <reference anchor="Hohlfeld14">
        <front>
          <title>A QoE Perspective on Sizing Network Buffers</title>

          <author fullname="Oliver Hohlfeld" initials="O." surname="Hohlfeld ">
            <organization/>
          </author>

          <author fullname="Enric Pujol" initials="E." surname="Pujol">
            <organization/>

            <address>
              <postal>
                <street/>

                <city/>

                <region/>

                <code/>

                <country/>
              </postal>

              <phone/>

              <facsimile/>

              <email/>

              <uri/>
            </address>
          </author>

          <author fullname="Florin Ciucu" initials="F." surname="Ciucu">
            <organization/>

            <address>
              <postal>
                <street/>

                <city/>

                <region/>

                <code/>

                <country/>
              </postal>

              <phone/>

              <facsimile/>

              <email/>

              <uri/>
            </address>
          </author>

          <author fullname="Anja Feldmann" initials="A." surname="Feldmann">
            <organization/>

            <address>
              <postal>
                <street/>

                <city/>

                <region/>

                <code/>

                <country/>
              </postal>

              <phone/>

              <facsimile/>

              <email/>

              <uri/>
            </address>
          </author>

          <author fullname="Paul Barford" initials="P." surname="Barford">
            <organization/>

            <address>
              <postal>
                <street/>

                <city/>

                <region/>

                <code/>

                <country/>
              </postal>

              <phone/>

              <facsimile/>

              <email/>

              <uri/>
            </address>
          </author>

          <date month="November" year="2014"/>
        </front>

        <seriesInfo name="Proc. ACM Internet Measurement Conf (IMC'14)"
                    value="hmm"/>

        <format target="http://doi.acm.org/10.1145/2663716.2663730" type="PDF"/>
      </reference>

      <reference anchor="Mathis09"
                 target="http://www.hpcc.jp/pfldnet2009/Program_files/1569198525.pdf">
        <front>
          <title>Relentless Congestion Control</title>

          <author fullname="Matt Mathis" initials="M." surname="Mathis">
            <organization>PSC</organization>
          </author>

          <date month="May" year="2009"/>
        </front>

        <seriesInfo name="PFLDNeT'09" value=""/>

        <format target="http://www.hpcc.jp/pfldnet2009/Program_files/1569198525.pdf"
                type="PDF"/>
      </reference>

      <!--{ToDo: DCttH ref will need to be updated, once stable}-->

      <reference anchor="DCttH15"
                 target="http://www.bobbriscoe.net/projects/latency/dctth_preprint.pdf">
        <front>
          <title>'Data Centre to the Home': Ultra-Low Latency for All</title>

          <author fullname="Koen De Schepper" initials="K."
                  surname="De Schepper">
            <organization>Bell Labs</organization>
          </author>

          <author fullname="Olga Bondarenko" initials="O."
                  surname="Bondarenko">
            <organization>Simula Research Lab</organization>
          </author>

          <author fullname="Ing-jyh Tsang" initials="I." surname="Tsang">
            <organization>Bell Labs</organization>
          </author>

          <author fullname="Bob Briscoe" initials="B." surname="Briscoe">
            <organization>BT</organization>
          </author>

          <date year="2015"/>
        </front>

        <annotation>(Under submission)</annotation>
      </reference>

      <reference anchor="PI2"
                 target="http://dl.acm.org/citation.cfm?doid=2999572.2999578">
        <front>
          <title>PI^2 : A Linearized AQM for both Classic and Scalable
          TCP</title>

          <author fullname="Koen De Schepper" initials="K."
                  surname="De Schepper">
            <organization>Bell Labs</organization>
          </author>

          <author fullname="Olga Bondarenko" initials="O."
                  surname="Bondarenko">
            <organization>Simula Research Lab</organization>
          </author>

          <author fullname="Ing-jyh Tsang" initials="I." surname="Tsang">
            <organization>Bell Labs</organization>
          </author>

          <author fullname="Bob Briscoe" initials="B." surname="Briscoe">
            <organization>BT</organization>
          </author>

          <date month="December" year="2016"/>
        </front>

        <seriesInfo name="Proc. ACM CoNEXT 2016" value="pp.105-119"/>

        <format target="http://dl.acm.org/citation.cfm?doid=2999572.2999578"
                type="PDF"/>
      </reference>

      <reference anchor="TCP-sub-mss-w"
                 target="http://www.bobbriscoe.net/projects/latency/sub-mss-w.pdf">
        <front>
          <title>Scaling TCP's Congestion Window for Small Round Trip
          Times</title>

          <author fullname="Bob Briscoe" initials="B." surname="Briscoe">
            <organization>BT</organization>
          </author>

          <author fullname="Koen De Schepper" initials="K."
                  surname="De Schepper">
            <organization>Bell Labs</organization>
          </author>

          <date month="May" year="2015"/>
        </front>

        <seriesInfo name="BT Technical Report" value="TR-TUB8-2015-002"/>

        <format target="http://www.bobbriscoe.net/projects/latency/sub-mss-w.pdf"
                type="PDF"/>
      </reference>

      <reference anchor="TCPPrague">
        <front>
          <title>Notes: DCTCP evolution 'bar BoF': Tue 21 Jul 2015, 17:40,
          Prague</title>

          <author fullname="Bob Briscoe" initials="B." surname="Briscoe">
            <organization>Simula</organization>
          </author>

          <date month="July" year="2015"/>
        </front>

        <seriesInfo name="tcpprague mailing list archive" value=""/>

        <format target="https://mailarchive.ietf.org/arch/msg/tcpprague/mwWncQg3egPd15FItYWiEvRDrvA"
                type="HTML"/>
      </reference>

      <reference anchor="NewCC_Proc">
        <front>
          <title>Experimental Specification of New Congestion Control
          Algorithms</title>

          <author fullname="Lars Eggert" initials="L." surname="Eggert">
            <organization>Nokia Research Centre</organization>
          </author>

          <date month="July" year="2007"/>
        </front>

        <seriesInfo name="IETF Operational Note" value="ion-tsv-alt-cc"/>

        <format target="https://www.ietf.org/iesg/statement/congestion-control.html"
                type="HTML"/>
      </reference>

      <reference anchor="Alizadeh-stability">
        <front>
          <title>Analysis of DCTCP: Stability, Convergence, and
          Fairness</title>

          <author fullname="Mohamed Alizadeh" initials="M." surname="Alizadeh"/>

          <author fullname="Adel Javanmard" initials="A." surname="Javanmard"/>

          <author fullname="Balaji Prabhakar" initials="B."
                  surname="Prabhakar"/>

          <date month="June" year="2011"/>
        </front>

        <seriesInfo name="ACM SIGMETRICS 2011" value=""/>

        <format target="https://people.csail.mit.edu/alizadeh/papers/dctcp_analysis-sigmetrics11.pdf"
                type="PDF"/>
      </reference>

      <reference anchor="BBR">
        <front>
          <title>BBR: Congestion-Based Congestion Control; Measuring
          bottleneck bandwidth and round-trip propagation time</title>

          <author fullname="Neal Cardwell" initials="N." surname="Cardwell">
            <organization>Google</organization>
          </author>

          <author fullname="Yuchung Cheng" initials="Y." surname="Cheng">
            <organization>Google</organization>
          </author>

          <author fullname="C. Stephen Gunn" initials="C.S." surname="Gunn">
            <organization>Google</organization>
          </author>

          <author fullname="Soheil Hassas Yeganeh" initials="S."
                  surname="Yeganeh">
            <organization>Google</organization>
          </author>

          <author fullname="Van Jacobson" initials="V." surname="Jacobson">
            <organization>Google</organization>
          </author>

          <date month="December" year="2016"/>
        </front>

        <seriesInfo name="ACM Queue" value="(14)5"/>

        <format octets="http://queue.acm.org/detail.cfm?id=3022184"
                type="HTML"/>

        <format target="http://dl.acm.org/ft_gateway.cfm?id=3022184&amp;ftid=1818273&amp;dwn=1"
                type="PDF"/>
      </reference>
    </references>

    <section anchor="l4sps_tcp-prague-reqs"
             title="Required features for scalable transport protocols to be safely deployable in the Internet (a.k.a. TCP Prague requirements)">
      <t>This list contains a list of features, mechanisms and modifications
      from currently defined behaviour for scalable Transport protocols so
      that they can be safely deployed over the public Internet. This list of
      requirements was produced at an ad hoc meeting during IETF-94 in Prague
      <xref target="TCPPrague"/>.</t>

      <t>One of such scalable transport protocols is DCTCP, currently
      specified in <xref target="I-D.ietf-tcpm-dctcp"/>. In its current form,
      DCTCP is specified to be deployable in controlled environments and
      deploying it in the public Internet would lead to a number of issues,
      both from the safety and the performance perspective. In this section,
      we describe the modifications and additional mechanisms that are
      required for its deployment over the global Internet. We use DCTCP as a
      base, but it is likely that most of these requirements equally apply to
      other scalable transport protocols.</t>

      <t>We next provide a brief description of each required feature.</t>

      <t>Requirement #4.1: Fall back to Reno/Cubic congestion control on
      packet loss.</t>

      <t>Description: In case of packet loss, the scalable transport MUST
      react as classic TCP (whatever the classic version of TCP is running in
      the host, e.g. Reno, Cubic).</t>

      <t>Motivation: As part of the safety conditions for deploying a scalable
      transport over the public Internet is to make sure that it behaves
      properly when some or all the network devices connecting the two
      endpoints that implement the scalable transport have not been upgraded.
      In particular, it may be the case that some of the switches along the
      path between the two endpoints may only react to congestion by dropping
      packets (i.e. no ECN marking). It is important that in these cases, the
      scalable transport react to the congestion signal in the form of a
      packet drop similarly to classic TCP.</t>

      <t>In the particular case of DCTCP, the current DCTCP specification
      states that "It is RECOMMENDED that an implementation deal with loss
      episodes in the same way as conventional TCP." For safe deployment in
      the public Internet of a scalable transport, the above requirement needs
      to be defined as a MUST.</t>

      <t>Packet loss, while rare, may also occur in the case that the
      bottleneck is L4S capable. In this case, the sender may receive a high
      number of packets marked with the CE bit set and also experience a loss.
      Current DCTCP implementations react differently to this situation. At
      least one implementation reacts only to the drop signal (e.g. by halving
      the CWND) and at least another DCTCP implementation reacts to both
      signals (e.g. by halving the CWND due to the drop and also further
      reducing the CWND based on the proportion of marked packet). We believe
      that further experimentation is needed to understand what is the best
      behaviour for the public Internet, which may or not be one of the
      existent implementations.</t>

      <t>Requirement #4.2: Fall back to Reno/Cubic congestion control on
      classic ECN bottlenecks.</t>

      <t>Description: The scalable transport protocol SHOULD/MAY? behave as
      classic TCP with classic ECN if the path contains a legacy bottleneck
      which marks both ect(0) and ect(1) in the same way as drop (non L4S, but
      ECN capable bottleneck).</t>

      <t>Motivation: Similarly to Requirement #3.1, this requirement is a
      safety condition in case L4S-capable endpoints are communicating over a
      path that contains one or more non-L4S but ECN capable switches and one
      of them happens to be the bottleneck. In this case, the scalable
      transport will attempt to fill in the buffer of the bottleneck switch up
      to the marking threshold and produce a small sawtooth around that
      operation point. The result is that the switch will set its operation
      point with the buffer full and all other non-scalable transports will be
      starved (as they will react reducing their CWND more aggressively than
      the scalable transport).</t>

      <t>Scalable transports then MUST be able to detect the presence of a
      classic ECN bottleneck and fall back to classic TCP/classic ECN
      behaviour in this case.</t>

      <t>Discussion: It is not clear at this point if it is possible to design
      a mechanism that always detect the aforementioned cases. One possibility
      is to base the detection on an increase on top of a minimum RTT, but it
      is not yet clear which value should trigger this. Having a delay based
      fall back response on L4S may as well be beneficial for preserving low
      latency without legacy network nodes. Even if it possible to design such
      a mechanism, it may well be that it would encompass additional
      complexity that implementers may consider unnecessary. The need for this
      mechanism depends on the extent of classic ECN deployment.</t>

      <t>Requirement #4.3: Reduce RTT dependence</t>

      <t>Description: Scalable transport congestion control algorithms MUST
      reduce or eliminate the RTT bias within the range of RTTs available.</t>

      <t>Motivation: Classic TCP's throughput is known to be inversely
      proportional to RTT. One would expect flows over very low RTT paths to
      nearly starve flows over larger RTTs. However, because Classic TCP
      induces a large queue, it has never allowed a very low RTT path to
      exist, so far. For instance, consider two paths with base RTT 1ms and
      100ms. If Classic TCP induces a 20ms queue, it turns these RTTs into
      21ms and 120ms leading to a throughput ratio of about 1:6. Whereas if a
      Scalable TCP induces only a 1ms queue, the ratio is 2:101. Therefore,
      with small queues, long RTT flows will essentially starve.</t>

      <t>Scalable transport protocol MUST then accommodate flows across the
      range of RTTs enabled by the deployment of L4S service over the public
      Internet.</t>

      <t>Requirement #4.4: Scaling down the congestion window.</t>

      <t>Description: Scalable transports MUST be responsive to congestion
      when RTTs are significantly smaller than in the current public
      Internet.</t>

      <t>Motivation: As currently specified, the minimum CWND of TCP (and the
      scalable extensions such as DCTCP), is set to 2 MSS. Once this minimum
      CWND is reached, the transport protocol ceases to react to congestion
      signals (the CWND is not further reduced beyond this minimum size).</t>

      <t>L4S mechanisms reduce significantly the queueing delay, achieving
      smaller RTTs over the Internet. For the same CWND, smaller RTTs imply
      higher transmission rates. The result is that when scalable transport
      are used and small RTTs are achieved, the minimum value of the CWND
      currently defined in 2 MSS may still result in a high transmission rate
      for a large number of common scenarios. For example, as described in
      <xref target="TCP-sub-mss-w"/>, consider a residential setting with an
      broadband Internet access of 40Mbps. Suppose now a number of equal TCP
      flows running in parallel with the Internet access link being the
      bottleneck. Suppose that for these flows, the RTT is 6ms and the MSS is
      1500B. The minimum transmission rate supported by TCP in this scenario
      is when CWND is set to 2 MSS, which results in 4Mbps for each flow. This
      means that in this scenario, if the number of flows is higher than 10,
      the congestion control ceases to be responsive and starts to build up a
      queue in the network.</t>

      <t>In order to address this issue, the congestion control mechanism for
      scalable transports MUST be responsive for the new range of RTT
      resulting from the decrease of the queueing delay.</t>

      <t>There are several ways how this can be achieved. One possible sub-MSS
      window mechanism is described in <xref target="TCP-sub-mss-w"/>.</t>

      <!--			Requirement #3.5: Smoothing ECN feedback

			Description: The ratio of marked packets CE marks received by the scalable transport sender are averaged 
-->

      <t>In addition to the safety requirements described before, there are
      some optimizations that while not required for the safe deployment of
      scalable transports over the public Internet, would results in an
      optimized performance. We describe them next.</t>

      <t>Optimization #5.1: Setting ECT in SYN, SYN/ACK and pure ACK
      packets.</t>

      <t>Description: Scalable transport SHOULD set the ECT bit in SYN,
      SYN/ACK and pure ACK packets.</t>

      <t>Motivation: Failing to set the ECT bit in SYN, SYN/ACK or ACK packets
      results in these packets being more likely dropped during congestion
      events. Dropping SYN and SYN/ACK packets is particularly bad for
      performance as the retransmission timers for these packets are large.
      <xref target="RFC3168"/> prevents from marking these packets due to
      security reasons. The arguments provided should be revisited in the the
      context of L4S and evaluate if avoiding marking these packets is still
      the best approach.</t>

      <t>Optimization #5.2: Faster than additive increase.</t>

      <t>Description: Scalable transport MAY support faster than additive
      increase in the congestion avoidance phase.</t>

      <t>Motivation: As currently defined, DCTCP supports additive increase in
      congestion avoidance phase. It would be beneficial for performance to
      update the congestion control algorithm to increase the CWND more than 1
      MSS per RTT during the congestion avoidance phase. In the context of L4S
      such mechanism, must also provide fairness with other classes of
      traffic, including classic TCP and possibly scalable TCP that uses
      additive increase.</t>

      <t>Optimization #5.3: Faster convergence to fairness.</t>

      <t>Description: Scalable transport SHOULD converge to a fair share
      allocation of the available capacity as fast as classic TCP or
      faster.</t>

      <t>Motivation: The time required for a new flow to obtain its fair share
      of the capacity of the bottleneck when the there are already ongoing
      flows using up all the bottleneck capacity is higher in the case of
      DCTCP than in the case of classic TCP (about a factor of 1,5 and 2
      larger according to <xref target="Alizadeh-stability"/>). This is
      detrimental in general, but it is very harmful for short flows, which
      performance can be worse than the one obtained with classic TCP. for
      this reason it is desirable that scalable transport provide convergence
      times no larger than classic TCP.</t>
    </section>

    <section title="Standardization items">
      <t>The following table includes all the itmes that should be
      standardized to provide a full L4S architecture.</t>

      <t>The table is too wide for the ASCII draft format, so it has been
      split into two, with a common column of row index numbers on the
      left.</t>

      <t>The columns in the second part of the table have the following
      meanings:<list style="hanging">
          <t hangText="WG:">The IETF WG most relevant to this requirement. The
          "tcpm/iccrg" combination refers to the procedure typically used for
          congestion control changes, where tcpm owns the approval decision,
          but uses the iccrg for expert review <xref
          target="NewCC_Proc"/>;</t>

          <t hangText="TCP:">Applicable to all forms of TCP congestion
          control;</t>

          <t hangText="DCTCP:">Applicable to Data Centre TCP as currently used
          (in controlled environments);</t>

          <t hangText="DCTCP bis:">Applicable to an future Data Centre TCP
          congestion control intended for controlled environments;</t>

          <t hangText="XXX Prague:">Applicable to a Scalable variant of XXX
          (TCP/SCTP/RMCAT) congestion control.</t>
        </list></t>

      <texttable>
        <ttcol>Req #</ttcol>

        <ttcol>Requirement</ttcol>

        <ttcol>Reference</ttcol>

        <c>0</c>

        <c>ARCHITECTURE</c>

        <c/>

        <c>1</c>

        <c>L4S IDENTIFIER</c>

        <c><xref target="I-D.briscoe-tsvwg-ecn-l4s-id"/></c>

        <c>2</c>

        <c>DUAL QUEUE AQM</c>

        <c><xref target="I-D.briscoe-aqm-dualq-coupled"/></c>

        <c>3</c>

        <c>Suitable ECN Feedback</c>

        <c><xref target="I-D.ietf-tcpm-accurate-ecn"/>, <xref
        target="I-D.stewart-tsvwg-sctpecn"/>.</c>

        <c/>

        <c/>

        <c/>

        <c/>

        <c>SCALABLE TRANSPORT - SAFETY ADDITIONS</c>

        <c/>

        <c>4-1</c>

        <c>Fall back to Reno/Cubic on loss</c>

        <c><xref target="I-D.ietf-tcpm-dctcp"/></c>

        <c>4-2</c>

        <c>Fall back to Reno/Cubic if classic ECN bottleneck detected</c>

        <c/>

        <c/>

        <c/>

        <c/>

        <c>4-3</c>

        <c>Reduce RTT-dependence</c>

        <c/>

        <c/>

        <c/>

        <c/>

        <c>4-4</c>

        <c>Scaling TCP's Congestion Window for Small Round Trip Times</c>

        <c><xref target="TCP-sub-mss-w"/></c>

        <!--        <c>4-6</c>

        <c>Smooth ECN feedback over own RTT</c>

        <c/>
-->

        <c/>

        <c>SCALABLE TRANSPORT - PERFORMANCE ENHANCEMENTS</c>

        <c/>

        <c>5-1</c>

        <c>Setting ECT in SYN, SYN/ACK and pure ACK packets</c>

        <c>draft-bagnulo-tsvwg-generalized-ECN</c>

        <c>5-2</c>

        <c>Faster-than-additive increase</c>

        <c/>

        <c>5-3</c>

        <c>Less drastic exit from slow-start</c>

        <c/>
      </texttable>

      <texttable>
        <ttcol>#</ttcol>

        <ttcol>WG</ttcol>

        <ttcol>TCP</ttcol>

        <ttcol>DCTCP</ttcol>

        <ttcol>DCTCP-bis</ttcol>

        <ttcol>TCP Prague</ttcol>

        <ttcol>SCTP Prague</ttcol>

        <ttcol>RMCAT Prague</ttcol>

        <c>0</c>

        <c>tsvwg?</c>

        <c>Y</c>

        <c>Y</c>

        <c>Y</c>

        <c>Y</c>

        <c>Y</c>

        <c>Y</c>

        <c>1</c>

        <c>tsvwg?</c>

        <c/>

        <c/>

        <c>Y</c>

        <c>Y</c>

        <c>Y</c>

        <c>Y</c>

        <c>2</c>

        <c>aqm?</c>

        <c>n/a</c>

        <c>n/a</c>

        <c>n/a</c>

        <c>n/a</c>

        <c>n/a</c>

        <c>n/a</c>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c>3</c>

        <c>tcpm</c>

        <c>Y</c>

        <c>Y</c>

        <c>Y</c>

        <c>Y</c>

        <c>n/a</c>

        <c>n/a</c>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c>4-1</c>

        <c>tcpm</c>

        <c/>

        <c>Y</c>

        <c>Y</c>

        <c>Y</c>

        <c>Y</c>

        <c>Y</c>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c>4-2</c>

        <c>tcpm/ iccrg?</c>

        <c/>

        <c/>

        <c/>

        <c>Y</c>

        <c>Y</c>

        <c>?</c>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c>4-3</c>

        <c>tcpm/ iccrg?</c>

        <c/>

        <c/>

        <c>Y</c>

        <c>Y</c>

        <c>Y</c>

        <c>?</c>

        <c>4-4</c>

        <c>tcpm</c>

        <c>Y</c>

        <c>Y</c>

        <c>Y</c>

        <c>Y</c>

        <c>Y</c>

        <c>?</c>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <!--
        <c>3-6</c>

        <c>tcpm/ iccrg?</c>

        <c/>

        <c>?</c>

        <c>Y</c>

        <c>Y</c>

        <c>Y</c>

        <c>?</c>

-->

        <c>5-1</c>

        <c>tsvwg</c>

        <c>Y</c>

        <c>Y</c>

        <c>Y</c>

        <c>Y</c>

        <c>n/a</c>

        <c>n/a</c>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c/>

        <c>5-2</c>

        <c>tcpm/ iccrg?</c>

        <c/>

        <c/>

        <c>Y</c>

        <c>Y</c>

        <c>Y</c>

        <c>?</c>

        <c>5-3</c>

        <c>tcpm/ iccrg?</c>

        <c/>

        <c/>

        <c>Y</c>

        <c>Y</c>

        <c>Y</c>

        <c>?</c>
      </texttable>
    </section>

    <!--    <section title="Change Log (to be Deleted before Publication)">
      <t>A detailed version history can be accessed at
      &lt;http://datatracker.ietf.org/doc/draft-briscoe-aqm-ecn-roadmap/history/&gt;</t>

      <t><list style="hanging">
          <t hangText="From briscoe-...-00 to briscoe-...-01:">Technical
          changes:<list style="symbols">
              <t/>
            </list>Editorial changes:<list style="symbols">
              <t/>
            </list></t>
        </list></t>
    </section>
-->
  </back>
</rfc>
