<?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-ietf-tsvwg-l4s-arch-00" 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 Internet service that could 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,
      interactive remote presence, instant messaging, online gaming, remote
      desktop, cloud-based applications and video-assisted remote control of
      machinery and industrial processes. 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. For instance spikes of hundreds of milliseconds
      are common. During a long-running flow, even with state-of-the-art
      active queue management (AQM), the base speed-of-light path delay
      roughly doubles. 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 from L4S 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 component mechanisms
      in different parts of an Internet path 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.ietf-tsvwg-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.ietf-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 the packet flow rate per round trip (the window) is inversely
          proportional to the level (probability) 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 Internet access
          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 of the following elements.</t>

      <t>Protocols:The L4S architecture encompasses the two protocol changes
      (an unassignment and an assignment) that we describe next: <list
          style="letters">
          <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 needs
          networks and hosts to support two separate meanings for ECN. So the
          standards track <xref target="RFC3168"/> needs to be updated to
          allow L4S 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 experimental changes proposed for L4S. <xref
          target="I-D.ietf-tsvwg-ecn-experimentation"/> also explains why the
          original experimental assignment of the ECT(1) codepoint as an ECN
          nonce <xref target="RFC3540"/> is being reclassified as historic (it
          was never deployed, and it offers no security benefit now that
          deployment is optional).</t>

          <t><xref target="I-D.ietf-tsvwg-ecn-l4s-id"/> recommends ECT(1) is
          used as the identifier to classify L4S packets into a separate
          treatment from Classic packets. This satisfies the requirements for
          identifying an alternative ECN treatment in <xref
          target="RFC4774"/>.</t>
        </list></t>

      <t>Network components:The Dual Queue Coupled AQM has been specified as
      generically as possible <xref
      target="I-D.ietf-tsvwg-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 than Curvy RED over a wide range of conditions, so it has
      been documented in a second appendix of <xref
      target="I-D.ietf-tsvwg-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 Appendix A of <xref
          target="I-D.ietf-tsvwg-ecn-l4s-id"/>). 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 congestion control 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 avoidance 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 an ECN mark is the same as a
              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 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>
    </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, when using ECN 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.ietf-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 them.</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 the use of ECN as the classifier for L4S
                requires no deeper inspection than the IP layer;</t>

                <t>fq isolates the queuing of each flow from the others but
                not from itself so, unlike L4S, it does not support
                applications that need both capacity-seeking behaviour and
                very low latency.<vspace blankLines="1"/>It might seem that
                self-inflicted queuing delay should not count, because if the
                delay wasn't in the network it would just shift to the sender.
                However, modern adaptive applications, e.g. HTTP/2 <xref
                target="RFC7540"/> or the interactive media applications
                described in <xref target="l4sarch_apps"/>, can keep low
                latency objects at the front of their local send queue by
                shuffling priorities of other objects dependent on the
                progress of other transfers. They cannot shuffle packets once
                they have released them into the network.</t>

                <t>fq prevents any one flow from consuming more than 1/N of
                the capacity at any instant, where N is the number of flows.
                This is fine if all flows are elastic, but it does not sit
                well with a variable bit rate real-time multimedia flow, which
                requires wriggle room to sometimes take more and other times
                less than a 1/N share.<vspace blankLines="1"/>It might seem
                that an fq scheduler offers the benefit that it prevents
                individual flows from hogging all the bandwidth. However, L4S
                has been deliberately designed so that policing of individual
                flows can be added as a policy choice, rather than requiring
                one specific policy choice as the mechanism itself. A
                scheduler (like fq) 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.ietf-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 (to allow for other, non-ABE, flows).</t>
          </list></t>
      </section>
    </section>

    <section anchor="l4sarch_apps" title="Applicability">
      <section title="Applications">
        <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 - all sharing the same
        bottleneck queue simultaneously <xref target="L4Sdemo16"/>. For the
        former, a panoramic video of a football stadium could be swiped and
        pinched so that, on the fly, a proxy in the cloud could generate a
        sub-window of the match video under the finger-gesture control of each
        user. For the latter, a virtual reality headset displayed a viewport
        taken from a 360 degree camera in a racing car. The user's head
        movements controlled the viewport extracted by a cloud-based proxy. In
        both cases, with 7 ms end-to-end base delay, the additional queuing
        delay of roughly 1 ms was so low that it seemed the video was
        generated locally.</t>

        <t>Using a swiping finger gesture or head movement to pan a video are
        extremely latency-demanding actions&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 sensed by the balance system in the inner ear
        (the vestibular system).</t>

        <t>Without the low queuing delay of L4S, cloud-based applications like
        these would not be credible without significantly more access
        bandwidth (to deliver all possible video that might be viewed) and
        more local processing, which would increase the weight and power
        consumption of head-mounted displays. When all interactive processing
        can be done in the cloud, only the data to be rendered for the end
        user needs to be sent.</t>

        <t>Other low latency high bandwidth applications such as:<list
            style="symbols">
            <t>Interactive remote presence;</t>

            <t>Video-assisted remote control of machinery or industrial
            processes.</t>
          </list>are not credible at all without very low queuing delay. No
        amount of extra access bandwidth or local processing can make up for
        lost time.</t>
      </section>

      <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, satellite) 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>

            <!--{ToDo:} 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.
-->

            <!--{Commented out, because reducing Qdelay to 1ms would not drive much more delay from L2 than reducing Qdelay to 5ms, 
so this argument applies to AQM in general (e.g. FQ_CoDel) not just L4S.}-->
          </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 a DualQ AQM <xref
        target="I-D.ietf-tsvwg-aqm-dualq-coupled"/> in one node at each end of
        the access link will realize nearly all the benefit of L4S.</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>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 (DQ) 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 Section 2.3 of <xref
          target="I-D.ietf-tsvwg-ecn-l4s-id"/>), 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 <xref target="I-D.ietf-tsvwg-ecn-l4s-id"/>. 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 deployed first. If no
              AQM at all was previously deployed for the downstream access,
              the DualQ AQM greatly improves the Classic service (as well as
              adding the L4S service). If an AQM was already deployed, the
              Classic service will be unchanged (and L4S will still be
              added).</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' at one end will provide all the benefit needed.
              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 of TCP Prague on a server enables
              L4S trials to move to a production service in one direction,
              wherever AccECN is deployed at the other end. This stage might
              be further motivated by performance improvements between DCTCP
              and TCP Prague (see Appendix A.2 of <xref
              target="I-D.ietf-tsvwg-ecn-l4s-id"/>).</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 interactive 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 classic ('TCP-Friendly') behaviour (see
          Appendix A.1.3 of <xref target="I-D.ietf-tsvwg-ecn-l4s-id"/>).</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 to address this
          issue, but they are all currently research:<list style="symbols">
              <t>In TCP Prague, ignore certain losses deemed unlikely to be
              due to congestion (using some ideas from BBR <xref
              target="BBR"/> but with no need to ignore nearly all 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>Classic ECN support is starting to materialize (in the upstream
          of some home routers as of early 2017), so an L4S sender will have
          to fall back to a classic ('TCP-Friendly') behaviour if it detects
          that ECN marking is accompanied by greater queuing delay or greater
          delay variation than would be expected with L4S (see Appendix A.1.4
          of <xref target="I-D.ietf-tsvwg-ecn-l4s-id"/>).</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 treatment than others. So Diffserv 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 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 (as required in
        Section 2.3 of <xref target="I-D.ietf-tsvwg-ecn-l4s-id"/>). 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 restrict access to the
        L4S class, perhaps only to customers who have paid a premium. Their
        packet classifier (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 (variants 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 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 will
        require a separate dedicated document.</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). Various ways to protect TCP
        feedback integrity have 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 the congestion
            experienced (CE) codepoint, which is normally only set by a
            congested link. Then the sender can test whether the receiver's
            feedback faithfully reports what it expects <xref
            target="I-D.moncaster-tcpm-rcv-cheat"/>. </t>

            <t>A network can enforce a congestion response to its ECN markings
            (or packet losses) by auditing congestion exposure (ConEx) <xref
            target="RFC7713"/>. </t>

            <t>The TCP authentication option (TCP-AO <xref target="RFC5925"/>)
            can be used to detect tampering with TCP congestion feedback.</t>

            <t>The ECN Nonce <xref target="RFC3540"/> was proposed to detect
            tampering with congestion feedback, but it is being reclassified
            as historic.</t>
          </list></t>

        <t>Appendix C.1 of <xref target="I-D.ietf-tsvwg-ecn-l4s-id"/> gives
        more details of these techniques including their applicability and
        pros and cons.</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.5925" ?>

      <?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.RFC.7540" ?>

      <reference anchor="I-D.ietf-tsvwg-aqm-dualq-coupled">
        <front>
          <title>DualQ Coupled AQM for Low Latency, Low Loss and Scalable
          Throughput</title>

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

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

          <author fullname="Olga Bondarenko" initials="O" surname="Bondarenko">
            <organization/>
          </author>

          <author fullname="Ing Tsang" initials="I" surname="Tsang">
            <organization/>
          </author>

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

          <abstract>
            <t>Data Centre TCP (DCTCP) was designed to provide predictably low
            queuing latency, near-zero loss, and throughput scalability using
            explicit congestion notification (ECN) and an extremely simple
            marking behaviour on switches. However, DCTCP does not co-exist
            with existing TCP traffic---throughput starves. So, until now,
            DCTCP could only be deployed where a clean-slate environment could
            be arranged, such as in private data centres. This specification
            defines `DualQ Coupled Active Queue Management (AQM)' to allow
            scalable congestion controls like DCTCP to safely co-exist with
            classic Internet traffic. The Coupled AQM ensures that a flow runs
            at about the same rate whether it uses DCTCP or TCP Reno/Cubic,
            but without inspecting transport layer flow identifiers. When
            tested in a residential broadband setting, DCTCP achieved
            sub-millisecond average queuing delay and zero congestion loss
            under a wide range of mixes of DCTCP and `Classic' broadband
            Internet traffic, without compromising the performance of the
            Classic traffic. The solution also reduces network complexity and
            eliminates network configuration.</t>
          </abstract>
        </front>

        <seriesInfo name="Internet-Draft"
                    value="draft-ietf-tsvwg-aqm-dualq-coupled-00"/>

        <format target="http://www.ietf.org/internet-drafts/draft-ietf-tsvwg-aqm-dualq-coupled-00.txt"
                type="TXT"/>
      </reference>

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

      <reference anchor="I-D.ietf-tsvwg-ecn-l4s-id">
        <front>
          <title>Identifying Modified Explicit Congestion Notification (ECN)
          Semantics for Ultra-Low Queuing Delay</title>

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

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

          <author fullname="Ing Tsang" initials="I" surname="Tsang">
            <organization/>
          </author>

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

          <abstract>
            <t>This specification defines the identifier to be used on IP
            packets for a new network service called low latency, low loss and
            scalable throughput (L4S). It is similar to the original (or
            'Classic') Explicit Congestion Notification (ECN). 'Classic' ECN
            marking was required to be equivalent to a drop, both when applied
            in the network and when responded to by a transport. Unlike
            'Classic' ECN marking, for packets carrying the L4S identifier,
            the network applies marking more immediately and more aggressively
            than drop, and the transport response to each mark is reduced and
            smoothed relative to that for drop. The two changes counterbalance
            each other so that the throughput of an L4S flow will be roughly
            the same as a 'Classic' flow under the same conditions. However,
            the much more frequent control signals and the finer responses to
            them result in ultra-low queuing delay without compromising link
            utilization, even during high load. Examples of new active queue
            management (AQM) marking algorithms and examples of new transports
            (whether TCP-like or real- time) are specified separately. The new
            L4S identifier is the key piece that enables them to interwork and
            distinguishes them from 'Classic' traffic. It gives an incremental
            migration path so that existing 'Classic' TCP traffic will be no
            worse off, but it can be prevented from degrading the ultra-low
            delay and loss of the new scalable transports.</t>
          </abstract>
        </front>

        <seriesInfo name="Internet-Draft"
                    value="draft-ietf-tsvwg-ecn-l4s-id-00"/>

        <format target="http://www.ietf.org/internet-drafts/draft-ietf-tsvwg-ecn-l4s-id-00.txt"
                type="TXT"/>
      </reference>

      <?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.ietf-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" ?>

      <?rfc include="reference.I-D.bagnulo-tcpm-generalized-ecn" ?>

      <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="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="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>

      <reference anchor="L4Sdemo16"
                 target="http://dl.acm.org/citation.cfm?doid=2910017.2910633 (videos of demos: https://riteproject.eu/dctth/#1511dispatchwg )">
        <front>
          <title>Ultra-Low Delay for All: Live Experience, Live
          Analysis</title>

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

          <author fullname="Koen De Schepper" initials="K."
                  surname="De Schepper">
            <organization>Bell Labs</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="May" year="2016"/>
        </front>

        <seriesInfo name="Proc. MMSYS'16" value="pp33:1--33:4"/>

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

    <section anchor="l4sarch_sec_standards" title="Standardization items">
      <t>The following table includes all the items that will need to 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.ietf-tsvwg-ecn-l4s-id"/></c>

        <c>2</c>

        <c>DUAL QUEUE AQM</c>

        <c><xref target="I-D.ietf-tsvwg-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-tsvwg-ecn-l4s-id"/> S.2.3, <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><xref target="I-D.ietf-tsvwg-ecn-l4s-id"/> S.2.3</c>

        <c/>

        <c/>

        <c/>

        <c>4-3</c>

        <c>Reduce RTT-dependence</c>

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

        <c/>

        <c/>

        <c/>

        <c>4-4</c>

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

        <c><xref target="I-D.ietf-tsvwg-ecn-l4s-id"/> S.2.3, <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 TCP Control Packets and Retransmissions</c>

        <c><xref target="I-D.bagnulo-tcpm-generalized-ecn"/></c>

        <c>5-2</c>

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

        <c><xref target="I-D.ietf-tsvwg-ecn-l4s-id"/> (Appx A.2.2)</c>

        <c>5-3</c>

        <c>Faster Convergence at Flow Start</c>

        <c><xref target="I-D.ietf-tsvwg-ecn-l4s-id"/> (Appx A.2.2)</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>tsvwg</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>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>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>
