<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.11 (Ruby 3.2.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-seemann-quic-accurate-ack-ecn-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.21.0 -->
  <front>
    <title abbrev="QUIC Accurate ECN Acknowledgements">QUIC Accurate ECN Acknowledgements</title>
    <seriesInfo name="Internet-Draft" value="draft-seemann-quic-accurate-ack-ecn-01"/>
    <author fullname="Marten Seemann">
      <organization/>
      <address>
        <email>martenseemann@gmail.com</email>
      </address>
    </author>
    <author fullname="Vidhi Goel">
      <organization>Apple Inc.</organization>
      <address>
        <email>vidhi_goel@apple.com</email>
      </address>
    </author>
    <date year="2024" month="May" day="24"/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <keyword>QUIC</keyword>
    <keyword>ECN</keyword>
    <abstract>
      <?line 39?>

<t>QUIC defines a variant of the ACK frame that carries cumulative count for
each of the three ECN codepoints (ECT(1), ECT(0) and CE). From this information,
the recipient of the ACK frame cannot deduce which ECN marking the individual
packets were received with.</t>
      <t>This document defines an alternative ACK frame that encodes enough information
to indicate which ECN mark each individual packet was received with. This
information is essential for accurately performing adjustments to congestion
window and sending rate of the sender.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://marten-seemann.github.io/draft-seemann-quic-accurate-ack-ecn/draft-seemann-quic-accurate-ack-ecn.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-seemann-quic-accurate-ack-ecn/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        QUIC Working Group mailing list (<eref target="mailto:quic@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/quic/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/quic/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/marten-seemann/draft-seemann-quic-accurate-ack-ecn"/>.</t>
    </note>
  </front>
  <middle>
    <?line 51?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Some congestion control algorithms would benefit from not only knowing
that some packets were marked with Congestion Experienced (CE) bit,
but exactly which ones. In the general case,
this is not possible with the standard <xref target="RFC9000"/> ACK frame, since it only
contains cumulative ECN counts. This information is helpful to congestion
control algorithms in following ways:</t>
      <ol spacing="normal" type="1"><li>
          <t>To perform additive increase and multiplicative decrease accurately, it is
important to know the exact sequence of CE marked and non-CE marked packets, as
the sequence determines how the congestion was experienced at the bottleneck.</t>
        </li>
        <li>
          <t>Some congestion control algorithms (for example L4S congestion controllers, see
<xref target="RFC9330"/>) would benefit from knowing exactly which packets were not
CE-marked. These algorithms apply an additive increase for non-CE marked packets
even if some other packets were CE marked in the same round trip.</t>
        </li>
      </ol>
      <t>This document defines an alternative ACK frame, the ACCURATE_ACK_ECN frame,
which encodes the corresponding ECN codepoint alongside the ACK range.
This encoding comes at a cost: In the presence of ECN markings, this will lead
to ACCURATE_ACK_ECN frames containing more ACK ranges compared to a regular
ACK frame. However, this is not expected to significantly inflate the size of
ACCURATE_ACK_ECN frames.
For example, in the steady state, L4S <xref target="RFC9331"/> applies the CE marking to two
packets per roundtrip. In the absence of packet loss, two of the
ACCURATE_ACK_ECN frames sent during that RTT would contain two ACK ranges
instead of one.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="accurateackecn-frame">
      <name>ACCURATE_ACK_ECN Frame</name>
      <t>The ACCURATE_ACK_ECN frame looks similar to an <xref target="RFC9000"/> ACK frame. It uses a
different encoding for ACK ranges (see <xref target="first-ack-range"/> and <xref target="ack-ranges"/>).</t>
      <artwork><![CDATA[
ACCURATE_ACK_ECN Frame {
  Type (i) = 0x2051a5fa,
  Largest Acknowledged (i),
  ACK Delay (i),
  ACK Range Count (i),
  First ACK Range (..),
  ACK Range (..) ...,
}
]]></artwork>
      <t>Except for the two ACK Range fields, all the fields are the same as defined in
<xref section="19.3" sectionFormat="of" target="RFC9000"/>.</t>
      <t>All packets within an ACK range <bcp14>MUST</bcp14> have been received with the same ECN code point.
If a range of packets with contiguous packet numbers, but different ECN markings
is received, this <bcp14>MUST</bcp14> be reported using multiple ACK ranges.</t>
      <t>Similar to regular ACK frames, ACCURATE_ACK_ECN frames are not ack-eliciting
(see <xref section="13.2" sectionFormat="of" target="RFC9000"/>), nor are they congestion-controlled.</t>
      <section anchor="first-ack-range">
        <name>First ACK Range</name>
        <artwork><![CDATA[
First ACK Range {
  ACK Range Length (i),
  ECN Marking (8),
}
]]></artwork>
        <dl>
          <dt>ACK Range Length:</dt>
          <dd>
            <t>A variable-length integer indicating the number of contiguous packets
preceding the Largest Acknowledged that are being acknowledged with the same
ECN code point. That is, the smallest packet acknowledged in the range
with the same ECN code point is determined by subtracting the First ACK Range
Length value from the Largest Acknowledged field.</t>
          </dd>
          <dt>ECN Marking:</dt>
          <dd>
            <t>The ECN code point all packets in this range were received with: Non-ECT is
encoded as 0, ECT(1) as 1, ECT(0) as 2 and CE as 3. Values larger than or equal
to 4 are invalid, and the receiver <bcp14>MUST</bcp14> close the connection with a
FRAME_ENCODING_ERROR if it receives an ACK range with an invalid ECN marking value.</t>
          </dd>
        </dl>
      </section>
      <section anchor="ack-ranges">
        <name>ACK Ranges</name>
        <t>Each ACK Range consists of alternating Gap, ACK Range Length and ECN Marking
values in descending packet number order. ACK Ranges can be repeated. The number
of ranges is determined by the ACK Range Count field; one of each value is
present for each value in the ACK Range Count field.</t>
        <t>ACK Ranges are structured as shown in <xref target="ack-range-format"/>.</t>
        <figure anchor="ack-range-format">
          <name>ACK Ranges</name>
          <artwork><![CDATA[
ACK Range {
  Gap (i),
  ACK Range Length (i),
  ECN Marking (8),
}
]]></artwork>
        </figure>
        <t>The fields that form each ACK Range are:</t>
        <dl>
          <dt>Gap:</dt>
          <dd>
            <t>A variable-length integer indicating the number of contiguous unacknowledged
packets preceding the packet number given by the smallest in the preceding ACK
Range. Note that this definition differs by one from the Gap definition of
the standard QUIC ACK frame in <xref section="19.3.1" sectionFormat="of" target="RFC9000"/>. This is
necessary to allow encoding of contiguous ranges of packet numbers that were
received with different ECN markings.</t>
          </dd>
          <dt>ACK Range Length:</dt>
          <dd>
            <t>A variable-length integer indicating the number of contiguous acknowledged
packets preceding the largest packet number, as determined by the
preceding Gap.</t>
          </dd>
          <dt>ECN Marking:</dt>
          <dd>
            <t>The ECN code point all packets in this range were received with, as defined in
<xref target="first-ack-range"/>.</t>
          </dd>
        </dl>
        <t>As described in <xref section="19.3.1" sectionFormat="of" target="RFC9000"/>, given a largest packet number for
an ACK range, the smallest value is determined by:</t>
        <artwork><![CDATA[
smallest = largest - ack_range
]]></artwork>
        <t>To calculate the largest value for a subsequent ACK Range, the formula differs
from the standard QUIC ACK frame which can be calculated using:</t>
        <artwork><![CDATA[
largest = previous_smallest - gap - 1
]]></artwork>
        <t>If any computed packet number is negative, an endpoint <bcp14>MUST</bcp14> generate a connection
error of type FRAME_ENCODING_ERROR.</t>
      </section>
      <section anchor="example">
        <name>Example</name>
        <t>Consider a scenario where 10 packets (from packet number 1 to 10) were sent with
ECT(1) but receiver received a total of 9 packets where packet number 8 was lost
and packet number 6 and 9 were CE marked. The ACCURATE_ACK_ECN frame would look
like below.</t>
        <artwork><![CDATA[
ACCURATE_ACK_ECN Frame {
  Type (i) = 0x2051a5fa,
  Largest Acknowledged (10),
  ACK Delay (i),
  ACK Range Count (4),
  First ACK Range {
    ACK Range Length (0),
    ECN Marking (1),
  },
  ACK Range {
    Gap (0),
    ACK Range Length (0),
    ECN Marking (3),
  }
  ACK Range {
    Gap (1),
    ACK Range Length (0),
    ECN Marking (1),
  }
  ACK Range {
    Gap (0),
    ACK Range Length (0),
    ECN Marking (3),
  }
  ACK Range {
    Gap (0),
    ACK Range Length (4),
    ECN Marking (1),
  }
}
]]></artwork>
      </section>
    </section>
    <section anchor="negotiate-extension">
      <name>Negotiating Extension Use</name>
      <t>Endpoints advertise their support of the extension by sending the
accurate_ack_ecn (0x2051a5fa8648af) transport parameter (<xref section="7.4" sectionFormat="of" target="RFC9000"/>) with an empty value. Implementations that understand this transport
parameter <bcp14>MUST</bcp14> treat the receipt of a non-empty value as a connection error of
type TRANSPORT_PARAMETER_ERROR.</t>
      <t>After negotiating this extension, endpoints <bcp14>MUST</bcp14> report received packets using
the ACCURATE_ACK_ECN frame. This only applies to the application data packet
number space. Initial and Handshake packets are acknowledged using the regular
ACK frame.</t>
      <t>It is invalid to send regular ACK frames in the application data packet number
space after negotiating this extension. Endpoints <bcp14>MUST</bcp14> close the connection
using a PROTOCOL_VIOLATION error when they receive an ACK frame in the
application data packet number space after this extension was negotiated.</t>
      <t>When using 0-RTT, both endpoints <bcp14>MUST</bcp14> remember the value of this transport
parameter. This allows acknowledging 0-RTT packets using ACCURATE_ACK_ECN
frames. If 0-RTT data is accepted by the server, the server <bcp14>MUST NOT</bcp14> disable
this extension on the resumed connection.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The sender of an ACCURATE_ACK_ECN frame might be able to burden its peer by
encoding a large number of ACK ranges. With the ACK frame defined in <xref target="RFC9000"/>
it is not possible to split a contiguous sequence of packet numbers into
multiple ranges, which becomes possible when using the ACCURATE_ACK_ECN frame.
The number of ACK ranges is implicitely by the requirement that each frame fits
into a QUIC packet. Receivers <bcp14>SHOULD</bcp14> make sure that they can process an
ACCURATE_ACK_ECN frame containing a few hundred ACK ranges efficiently.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>TODO consider IANA</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC9000">
        <front>
          <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
          <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
          <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
          <date month="May" year="2021"/>
          <abstract>
            <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9000"/>
        <seriesInfo name="DOI" value="10.17487/RFC9000"/>
      </reference>
      <reference anchor="RFC9330">
        <front>
          <title>Low Latency, Low Loss, and Scalable Throughput (L4S) Internet Service: Architecture</title>
          <author fullname="B. Briscoe" initials="B." role="editor" surname="Briscoe"/>
          <author fullname="K. De Schepper" initials="K." surname="De Schepper"/>
          <author fullname="M. Bagnulo" initials="M." surname="Bagnulo"/>
          <author fullname="G. White" initials="G." surname="White"/>
          <date month="January" year="2023"/>
          <abstract>
            <t>This document describes the L4S architecture, which enables Internet applications to achieve low queuing latency, low congestion loss, and scalable throughput control. L4S is based on the insight that the root cause of queuing delay is in the capacity-seeking congestion controllers of senders, not in the queue itself. With the L4S architecture, all Internet applications could (but do not have to) transition away from congestion control algorithms that cause substantial queuing delay and instead adopt a new class of congestion controls that can seek capacity with very little queuing. These are aided by a modified form of Explicit Congestion Notification (ECN) from the network. With this new architecture, applications can have both low latency and high throughput.</t>
            <t>The architecture primarily concerns incremental deployment. It defines mechanisms that allow the new class of L4S congestion controls to coexist with 'Classic' congestion controls in a shared network. The aim is for L4S latency and throughput to be usually much better (and rarely worse) while typically not impacting Classic performance.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9330"/>
        <seriesInfo name="DOI" value="10.17487/RFC9330"/>
      </reference>
      <reference anchor="RFC9331">
        <front>
          <title>The Explicit Congestion Notification (ECN) Protocol for Low Latency, Low Loss, and Scalable Throughput (L4S)</title>
          <author fullname="K. De Schepper" initials="K." surname="De Schepper"/>
          <author fullname="B. Briscoe" initials="B." role="editor" surname="Briscoe"/>
          <date month="January" year="2023"/>
          <abstract>
            <t>This specification defines the protocol to be used for a new network service called Low Latency, Low Loss, and Scalable throughput (L4S). L4S uses an Explicit Congestion Notification (ECN) scheme at the IP layer that is similar to the original (or 'Classic') ECN approach, except as specified within. L4S uses 'Scalable' congestion control, which induces much more frequent control signals from the network, and it responds to them with much more fine-grained adjustments so that very low (typically sub-millisecond on average) and consistently low queuing delay becomes possible for L4S traffic without compromising link utilization. Thus, even capacity-seeking (TCP-like) traffic can have high bandwidth and very low delay at the same time, even during periods of high traffic load.</t>
            <t>The L4S identifier defined in this document distinguishes L4S from 'Classic' (e.g., TCP-Reno-friendly) traffic. Then, network bottlenecks can be incrementally modified to distinguish and isolate existing traffic that still follows the Classic behaviour, to prevent it from degrading the low queuing delay and low loss of L4S traffic. This Experimental specification defines the rules that L4S transports and network elements need to follow, with the intention that L4S flows neither harm each other's performance nor that of Classic traffic. It also suggests open questions to be investigated during experimentation. Examples of new Active Queue Management (AQM) marking algorithms and new transports (whether TCP-like or real time) are specified separately.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9331"/>
        <seriesInfo name="DOI" value="10.17487/RFC9331"/>
      </reference>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
    </references>
    <?line 288?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
uD2MJQAA

-->

</rfc>
