<?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.6.36 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-quic-ack-frequency-05" category="std" consensus="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.4 -->
  <front>
    <title>QUIC Acknowledgement Frequency</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-quic-ack-frequency-05"/>
    <author initials="J." surname="Iyengar" fullname="Jana Iyengar">
      <organization>Fastly</organization>
      <address>
        <email>jri.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="I." surname="Swett" fullname="Ian Swett">
      <organization>Google</organization>
      <address>
        <email>ianswett@google.com</email>
      </address>
    </author>
    <author initials="M." surname="Kühlewind" fullname="Mirja Kühlewind">
      <organization>Ericsson</organization>
      <address>
        <email>mirja.kuehlewind@ericsson.com</email>
      </address>
    </author>
    <date/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <abstract>
      <?line 87?>

<t>This document describes a QUIC extension for an endpoint to control its peer's
delaying of acknowledgements.</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <?line 92?>

<t>Discussion of this draft takes place on the QUIC working group mailing list
(quic@ietf.org), which is archived at
<eref target="https://mailarchive.ietf.org/arch/search/?email_list=quic"/>. Source
code and issues list for this draft can be found at
<eref target="https://github.com/quicwg/ack-frequency"/>.</t>
      <t>Working Group information can be found at <eref target="https://github.com/quicwg"/>.</t>
    </note>
  </front>
  <middle>
    <?line 102?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document describes a QUIC extension for an endpoint to control its peer's
delaying of acknowledgements.</t>
      <section anchor="terms-and-definitions">
        <name>Terms and Definitions</name>
        <t>The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" 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>
        <t>In the rest of this document, "sender" refers to a QUIC data sender (and
acknowledgement receiver). Similarly, "receiver" refers to a QUIC data receiver
(and acknowledgement sender).</t>
        <t>An "acknowledgement packet" refers to a QUIC packet that contains only an ACK
frame.</t>
        <t>This document uses terms, definitions, and notational conventions described in
Section <xref target="QUIC-TRANSPORT" section="1.2" sectionFormat="bare"/> and Section <xref target="QUIC-TRANSPORT" section="1.3" sectionFormat="bare"/> of <xref target="QUIC-TRANSPORT"/>.</t>
      </section>
    </section>
    <section anchor="motivation">
      <name>Motivation</name>
      <t>A receiver acknowledges received packets, but it can delay sending these
acknowledgements. Delaying acknowledgements can impact connection
throughput, loss detection and congestion controller performance at a data
sender, and CPU utilization at both a data sender and a data receiver.</t>
      <t>Reducing the frequency of acknowledgements can improve connection and
endpoint performance in the following ways:</t>
      <ul spacing="normal">
        <li>Sending UDP packets can be very CPU intensive on some platforms. Reducing
the number of packets that only contain acknowledgements reduces the CPU
consumed at a data receiver. Experience shows that this reduction can be
critical for high bandwidth connections.</li>
        <li>Similarly, receiving and processing UDP packets can also be CPU intensive, and
reducing acknowledgement frequency reduces this cost at a data sender.</li>
        <li>For asymmetric link technologies, such as DOCSIS, LTE, and satellite,
connection throughput in the forward path can become constrained
when the reverse path is filled by acknowledgment packets <xref target="RFC3449"/>.
When traversing such links, reducing the number of acknowledgments can achieve
higher connection throughput, lower the impact on other flows or optimise the
overall use of transmission resources <xref target="Cus22"/>.</li>
        <li>The rate of acknowledgment packets can reduce link efficiency, including
transmission opportunities or battery life, as well as transmission
opportunities available to other flows sharing the same link.</li>
      </ul>
      <t>As discussed in <xref target="implementation"/> however, there can be undesirable consequences
to congestion control and loss recovery if a receiver unilitaerally reduces the
acknowledgment frequency. A sender's constraints on the acknowledgement
frequency need to be taken into account to maximize congestion controller and
loss recovery performance.</t>
      <t><xref target="QUIC-TRANSPORT"/> specifies a simple delayed acknowledgement mechanism that a
receiver can use: send an acknowledgement for every other packet, and for every
packet that is received out of order (Section 13.2.1 of <xref target="QUIC-TRANSPORT"/>).
This does not allow a sender to signal its preferences or constraints. This
extension provides a mechanism to solve this problem.</t>
    </section>
    <section anchor="nego">
      <name>Negotiating Extension Use</name>
      <t>Endpoints advertise their support of the extension described in this document by
sending the following transport parameter (<xref section="7.2" sectionFormat="of" target="QUIC-TRANSPORT"/>):</t>
      <dl>
        <dt>min_ack_delay (0xff04de1a):</dt>
        <dd>
          <t>A variable-length integer representing the minimum amount of time in
microseconds by which the endpoint that is sending this value is able to
delay an acknowledgement. This limit could be based on the receiver's clock
or timer granularity. 'min_ack_delay' is used by the peer to avoid requesting
too small a value in the Request Max Ack Delay field of the ACK_FREQUENCY
frame.</t>
        </dd>
      </dl>
      <t>An endpoint's min_ack_delay MUST NOT be greater than its max_ack_delay.
Endpoints that support this extension MUST treat receipt of a min_ack_delay that
is greater than the received max_ack_delay as a connection error of type
TRANSPORT_PARAMETER_ERROR. Note that while the endpoint's max_ack_delay
transport parameter is in milliseconds (<xref section="18.2" sectionFormat="of" target="QUIC-TRANSPORT"/>),
min_ack_delay is specified in microseconds.</t>
      <t>The min_ack_delay transport parameter is a unilateral indication of support for
receiving ACK_FREQUENCY frames.  If an endpoint sends the transport parameter,
the peer is allowed to send ACK_FREQUENCY frames independent of whether it also
sends the min_ack_delay transport parameter or not.</t>
      <t>Receiving a min_ack_delay transport parameter indicates that the peer might send
ACK_FREQUENCY frames in the future. Until an ACK_FREQUENCY frame is received,
receiving this transport parameter does not cause the endpoint to
change its acknowledgement behavior.</t>
      <t>Endpoints MUST NOT remember the value of the min_ack_delay transport parameter
they received for use in a subsequent connection. Consequently, ACK_FREQUENCY
frames cannot be sent in 0-RTT packets, as per <xref section="7.4.1" sectionFormat="of" target="QUIC-TRANSPORT"/>.</t>
      <t>This Transport Parameter is encoded as per <xref section="18" sectionFormat="of" target="QUIC-TRANSPORT"/>.</t>
    </section>
    <section anchor="ack-frequency-frame">
      <name>ACK_FREQUENCY Frame</name>
      <t>Delaying acknowledgements as much as possible reduces both work done by the
endpoints and network load. An endpoint's loss detection and congestion control
mechanisms however need to be tolerant of this delay at the peer. An endpoint
signals the frequency it wants to receive ACK frames to its peer using an
ACK_FREQUENCY frame, shown below:</t>
      <artwork><![CDATA[
ACK_FREQUENCY Frame {
  Type (i) = 0xaf,
  Sequence Number (i),
  Ack-Eliciting Threshold (i),
  Request Max Ack Delay (i),
  Reordering Threshold (i)
}
]]></artwork>
      <t>Following the common frame format described in <xref section="12.4" sectionFormat="of" target="QUIC-TRANSPORT"/>, ACK_FREQUENCY frames have a type of 0xaf, and contain the
following fields:</t>
      <dl>
        <dt>Sequence Number:</dt>
        <dd>
          <t>A variable-length integer representing the sequence number assigned to the
ACK_FREQUENCY frame by the sender to allow receivers to ignore obsolete
frames.</t>
        </dd>
        <dt>Ack-Eliciting Threshold:</dt>
        <dd>
          <t>A variable-length integer representing the maximum number of ack-eliciting
packets the recipient of this frame receives before sending an acknowledgment.
A receiving endpoint SHOULD send at least one ACK frame when more than this
number of ack-eliciting packets have been received. A value of 0 results in
a receiver immediately acknowledging every ack-eliciting packet. By default, an
endpoint sends an ACK frame for every other ack-eliciting packet, as specified in
<xref section="13.2.2" sectionFormat="of" target="QUIC-TRANSPORT"/>, which corresponds to a value of 1.</t>
        </dd>
        <dt>Request Max Ack Delay:</dt>
        <dd>
          <t>A variable-length integer representing the value to which the endpoint
requests the peer update its <tt>max_ack_delay</tt>
(<xref section="18.2" sectionFormat="of" target="QUIC-TRANSPORT"/>). The value of this field is in
microseconds, unlike the 'max_ack_delay' transport parameter, which is in
milliseconds. Sending a value smaller than the <tt>min_ack_delay</tt> advertised
by the peer is invalid. Receipt of an invalid value MUST be treated as a
connection error of type TRANSPORT_PARAMETER_ERROR. On receiving a valid value in
this field, the endpoint MUST update its <tt>max_ack_delay</tt> to the value provided
by the peer.</t>
        </dd>
        <dt>Reordering Threshold:</dt>
        <dd>
          <t>A variable-length integer that indicates the maximum packet
reordering before eliciting an immediate ACK, as specified in {#out-of-order}.
If no ACK_FREQUENCY frames have been received, the endpoint immediately
acknowledges any subsequent packets that are received out-of-order, as specified
in <xref section="13.2" sectionFormat="of" target="QUIC-TRANSPORT"/>, corresponding to a default value of 1.
A value of 0 indicates out-of-order packets do not elicit an immediate ACK.</t>
        </dd>
      </dl>
      <t>ACK_FREQUENCY frames are ack-eliciting. When an ACK_FREQUENCY frame is lost,
the sender is encouraged to send another ACK_FREQUENCY frame, unless an
ACK_FREQUENCY frame with a larger Sequence Number value has already been sent.
However, it is not forbidden to retransmit the lost frame (see Section 13.3 of
<xref target="QUIC-TRANSPORT"/>), because the receiver will ignore duplicate or out-of-order
ACK_FREQUENCY frames based on the Sequence Number.</t>
      <t>An endpoint can send multiple ACK_FREQUENCY frames with different values within a
connection. A sending endpoint MUST send monotonically increasing values in the
Sequence Number field, since this field allows ACK_FREQUENCY frames to be processed
out of order. A receiving endpoint MUST ignore a received ACK_FREQUENCY frame if the
Sequence Number value in the frame is smaller than the largest currently processed value.</t>
    </section>
    <section anchor="immediate-ack-frame">
      <name>IMMEDIATE_ACK Frame</name>
      <t>A sender can use an ACK_FREQUENCY frame to reduce the number of acknowledgements
sent by a receiver, but doing so increases the likelihood that time-sensitive
feedback is delayed as well. For example, as described in <xref target="loss"/>, delaying
acknowledgements can increase the time it takes for a sender to detect packet
loss. Sending an IMMEDIATE_ACK frame can help mitigate this problem.</t>
      <t>An IMMEDIATE_ACK frame can be useful in other situations as well. For example,
if a sender wants an immediate RTT measurement or if a sender wants to establish
receiver liveness as quickly as possible. PING frames
(<xref section="19.2" sectionFormat="of" target="QUIC-TRANSPORT"/>) are ack-eliciting, but if a PING frame is
sent without an IMMEDIATE_ACK frame, the receiver might not immediately send
an ACK based on its local ACK strategy.</t>
      <t>By definition IMMEDIATE_ACK frames are ack-eliciting.
An endpoint SHOULD send a packet containing an ACK frame immediately upon
receiving an IMMEDIATE_ACK frame. An endpoint MAY delay sending an ACK frame
despite receiving an IMMEDIATE_ACK frame. For example, an endpoint might do this
if a large number of received packets contain an IMMEDIATE_ACK or if the
endpoint is under heavy load.</t>
      <artwork><![CDATA[
IMMEDIATE_ACK Frame {
  Type (i) = 0xac,
}
]]></artwork>
    </section>
    <section anchor="sending">
      <name>Sending Acknowledgments</name>
      <t>Prior to receiving an ACK_FREQUENCY frame, endpoints send acknowledgements as
specified in <xref section="13.2.1" sectionFormat="of" target="QUIC-TRANSPORT"/>.</t>
      <t>On receiving an ACK_FREQUENCY frame and updating its <tt>max_ack_delay</tt>
and <tt>Ack-Eliciting Threshold</tt> values (<xref target="ack-frequency-frame"/>), the endpoint sends an
acknowledgement when one of the following conditions are met:</t>
      <ul spacing="normal">
        <li>Since the last acknowledgement was sent, the number of received ack-eliciting
packets is greater than the <tt>Ack-Eliciting Threshold</tt>.</li>
        <li>Since the last acknowledgement was sent, <tt>max_ack_delay</tt> amount of time has
passed.</li>
      </ul>
      <t><xref target="out-of-order"/>, <xref target="congestion"/>, and <xref target="batch"/> describe exceptions to this
strategy.</t>
      <section anchor="out-of-order">
        <name>Response to Out-of-Order Packets</name>
        <t>As specified in <xref section="13.2.1" sectionFormat="of" target="QUIC-TRANSPORT"/>, endpoints are expected to
send an acknowledgement immediately on receiving a reordered ack-eliciting
packet. This extension modifies that behavior when an ACK_FREQUENCY frame with
a Reordering Threshold value other than 1 has been received.</t>
        <t>If the most recent ACK_FREQUENCY frame received from the peer has a <tt>Reordering
Threshold</tt> value of 0, the endpoint SHOULD NOT send an immediate
acknowledgement in response to packets received out of order, and instead
rely on the peer's <tt>Ack-Eliciting Threshold</tt> and <tt>max_ack_delay</tt> thresholds
for sending acknowledgements.</t>
        <t>If the most recent ACK_FREQUENCY frame received from the peer has a <tt>Reordering
Threshold</tt> value larger than 1, the endpoint tests the amount of reordering
before deciding to send an acknowledgement. The specification uses the following
definitions:</t>
        <dl>
          <dt>Largest Unacked:</dt>
          <dd>
            <t>The largest packet number among all received ack-eliciting packets.</t>
          </dd>
          <dt>Largest Acked:</dt>
          <dd>
            <t>The Largest Acknowledged value sent in an ACK frame.</t>
          </dd>
          <dt>Unreported Missing:</dt>
          <dd>
            <t>Packets with packet numbers between the Largest Unacked and Largest Acked that
have not yet been received.</t>
          </dd>
        </dl>
        <t>An endpoint that receives an ACK_FREQUENCY frame with a non-zero Reordering
Threshold value SHOULD send an immediate ACK when the gap
between the smallest Unreported Missing packet and the Largest Unacked is greater
than or equal to the Reordering Threshold value. Sending this additional ACK will
reset the <tt>max_ack_delay</tt> timer and <tt>Ack-Eliciting Threshold</tt> counter (as any ACK
would do).</t>
        <t>See <xref target="examples"/> for examples explaining this behavior. See <xref target="set-threshold"/>
for guidance on how to choose the reordering threshold value when sending
ACK_FREQUENCY frames.</t>
        <section anchor="examples">
          <name>Examples</name>
          <t>When the reordering threshold is 1, any time a packet is received
and there is a missing packet, an immediate ACK is sent.</t>
          <t>If the reordering theshold is 3 and ACKs are only sent due to reordering:</t>
          <artwork><![CDATA[
  Receive 1
  Receive 3 -> 2 Missing
  Receive 4 -> 2 Missing
  Receive 5 -> Send ACK because of 2
  Receive 8 -> 6,7 Missing
  Receive 9 -> Send ACK because of 6, 7 Missing
  Receive 10 -> Send ACK because of 7
]]></artwork>
          <t>If the reordering threshold is 5 and ACKs are only sent due to reordering:</t>
          <artwork><![CDATA[
  Receive 1
  Receive 3 -> 2 Missing
  Receive 5 -> 2 Missing, 4 Missing
  Receive 6 -> 2 Missing, 4 Missing
  Receive 7 -> Send ACK because of 2, 4 Missing
  Receive 8 -> 4 Missing
  Receive 9 -> Send ACK because of 4
]]></artwork>
        </section>
      </section>
      <section anchor="set-threshold">
        <name>Setting the Reordering Threshold value</name>
        <t>To ensure timely loss detection, it is optimal to send a Reordering
Threshold value of 1 less than the packet threshold used by the data sender for
loss detection. If the threshold is smaller, an ACK_FRAME is sent before the
packet can be declared lost based on the packet threshold. If the value is
larger, it causes unnecessary delays. (<xref section="18.2" sectionFormat="of" target="QUIC-RECOVERY"/>)
recommends a default packet threshold for loss detection of 3, equivalent to
a Reordering Threshold of 2.</t>
      </section>
      <section anchor="congestion">
        <name>Expediting Explicit Congestion Notification (ECN) Signals</name>
        <t>An endpoint SHOULD send an immediate acknowledgement when a packet marked
with the ECN Congestion Experienced (CE) <xref target="RFC3168"/> codepoint in the IP
header is received and the previously received packet was not marked CE.</t>
        <t>Doing this maintains the peer's response time to congestion events, while also
reducing the ACK rate compared to <xref section="13.2.1" sectionFormat="of" target="QUIC-TRANSPORT"/> during
extreme congestion or when peers are using DCTCP <xref target="RFC8257"/> or other
congestion controllers (e.g. <xref target="I-D.ietf-tsvwg-aqm-dualq-coupled"/>) that mark
more frequently than classic ECN <xref target="RFC3168"/>.</t>
      </section>
      <section anchor="batch">
        <name>Batch Processing of Packets</name>
        <t>To avoid sending multiple acknowledgements in rapid succession, an endpoint can
process all packets in a batch before determining whether to send an ACK frame
in response, as stated in <xref section="13.2.2" sectionFormat="of" target="QUIC-TRANSPORT"/>.</t>
      </section>
    </section>
    <section anchor="computation-of-probe-timeout-period">
      <name>Computation of Probe Timeout Period</name>
      <t>On sending an update to the peer's <tt>max_ack_delay</tt>, an endpoint can use this new
value in later computations of its Probe Timeout (PTO) period; see <xref section="5.2.1" sectionFormat="of" target="QUIC-RECOVERY"/>.</t>
      <t>Until the packet carrying this frame is acknowledged, the endpoint MUST use the
greater of the current <tt>max_ack_delay</tt> and the value that is in flight when
computing the PTO period. Doing so avoids spurious PTOs that can be caused by an
update that increases the peer's <tt>max_ack_delay</tt>.</t>
      <t>While it is expected that endpoints will have only one ACK_FREQUENCY frame in
flight at any given time, this extension does not prohibit having more than one
in flight. When using <tt>max_ack_delay</tt> for PTO computations, endpoints MUST use
the maximum of the current value and all those in flight.</t>
      <t>When the number of in-flight ack-eliciting packets is larger than the
ACK-Eliciting Threshold, an endpoint can expect that the peer will not need to
wait for its <tt>max_ack_delay</tt> period before sending an acknowledgement. In such
cases, the endpoint MAY therefore exclude the peer's 'max_ack_delay' from its PTO
calculation.  When Ignore Order is enabled and loss causes the peer to not
receive enough packets to trigger an immediate acknowledgement, the receiver
will wait 'max_ack_delay', increasing the chances of a premature PTO.
Therefore, if Ignore Order is enabled, the PTO MUST be larger than the peer's
'max_ack_delay'.</t>
    </section>
    <section anchor="implementation">
      <name>Determining Acknowledgement Frequency</name>
      <t>This section provides some guidance on a sender's choice of acknowledgment
frequency and discusses some additional considerations. Implementers can select
an appropriate strategy to meet the needs of their applications and congestion
controllers.</t>
      <section anchor="congestion-control">
        <name>Congestion Control</name>
        <t>A sender needs to be responsive to notifications of congestion, such as
a packet loss or an ECN CE marking. Decreasing the acknowledgement frequency
can delay a sender's response to network congestion or cause it to underutilize
the available bandwidth.</t>
        <t>To limit the consequences of reduced acknowledgement frequency, a sender
SHOULD cause a receiver to send an acknowledgement at least once per RTT if
there are unacknowledged ack-eliciting packets in flight.</t>
        <t>A sender can accomplish this by setting the Request Max Ack
Delay value to no more than the estimated round trip time.
The sender can also improve feedback and robustness to
variation in the path RTT by setting the Ack-Eliciting Threshold
to a value no larger than the current congestion window. Alternatively,
a sender can accomplish this by sending an IMMEDIATE_ACK frame once each
round trip time, although if the packet containing an IMMEDIATE_ACK is lost,
detection of that loss will be delayed by the reordering threshold or requested
max ack delay.</t>
        <t>Note that the congestion window and the RTT are changing over the lifetime of a
connectionand therefore might require sending frequent ACK_FREQUENCY frames to
ensure optimal performance.</t>
        <t>It is possible that the RTT is smaller than the receiver's timer granularity,
as communicated via the 'min_ack_delay' transport parameter, preventing the
receiver from sending an acknowledgment every RTT in time unless packets are
acknowledged immediately.  In these cases, Reordering Threshold values other than 1
can can delay loss detection more than an RTT.</t>
        <section anchor="application-limited-connections">
          <name>Application-Limited Connections</name>
          <t>A congestion controller that is limited by the congestion window relies upon receiving
acknowledgements to send additional data into the network.  An increase in
acknowledgement delay increases the delay in sending data, which can reduce the
achieved throughput.  Congestion window growth can also depend upon receiving
acknowledgements. This can be particularly significant in slow start
(<xref section="7.3.1" sectionFormat="of" target="QUIC-RECOVERY"/>), when delaying acknowledgements can delay
the increase in congestion window and can create larger packet bursts.</t>
          <t>If the sender is application-limited, acknowledgements can be delayed
unnecessarily when entering idle periods. Therefore, if no further data is
buffered to be sent, a sender can send an IMMEDIATE_ACK frame with the last data
packet before an idle period to avoid waiting for the ack delay.</t>
        </section>
      </section>
      <section anchor="burst-mitigation">
        <name>Burst Mitigation</name>
        <t>Receiving an acknowledgement can allow a sender to release new packets into the
network. If a sender is designed to rely on the timing of peer acknowledgments
("ACK clock"), delaying acknowledgments can cause undesirable bursts of data
into the network. In keeping with Section 7.7 of <xref target="QUIC-RECOVERY"/>, a sender
can either employ pacing or limit bursts to the initial congestion window.</t>
      </section>
      <section anchor="loss">
        <name>Loss Detection and Timers</name>
        <t>Acknowledgements are fundamental to reliability in QUIC. Consequently,
delaying or reducing the frequency of acknowledgments can cause loss detection
at the sender to be delayed.</t>
        <t>A QUIC sender detects loss using packet thresholds on receiving an
acknowledgement (Section 6.1.1 of <xref target="QUIC-RECOVERY"/>); delaying the
acknowledgement therefore delays this method of detecting losses.</t>
        <t>Reducing acknowledgement frequency reduces the number of RTT samples that a
sender receives (Section 5 of <xref target="QUIC-RECOVERY"/>), making a sender's RTT estimate
less responsive to changes in the path's RTT. As a result, any mechanisms that
rely on an accurate RTT estimate, such as time-threshold loss detection (Section
6.1.2 of <xref target="QUIC-RECOVERY"/>) or Probe Timeout (Section 6.2 of <xref target="QUIC-RECOVERY"/>),
will be less responsive to changes in the path's RTT, resulting in either
delayed or unnecessary packet transmissions.</t>
        <t>A sender might use timers to detect loss of PMTU probe packets
(<xref section="14" sectionFormat="of" target="QUIC-TRANSPORT"/>). A sender MAY
bundle an IMMEDIATE_ACK frame with any PMTU probes to avoid triggering such
timers.</t>
      </section>
      <section anchor="migration">
        <name>Connection Migration</name>
        <t>To avoid additional delays to connection migration confirmation when using this
extension, a client can bundle an IMMEDIATE_ACK frame with the first non-probing
frame (<xref section="9.2" sectionFormat="of" target="QUIC-TRANSPORT"/>) it sends or it can send only an
IMMEDIATE_ACK frame, which is a non-probing frame.</t>
        <t>An endpoint's congestion controller and RTT estimator are reset upon
confirmation of migration (Section 9.4 of <xref target="QUIC-TRANSPORT"/>);
this changes the pattern of acknowledgements received after migration.</t>
        <t>Therefore, an endpoint that has sent an ACK_FREQUENCY frame earlier in the
connection ought to send a new ACK_FREQUENCY frame upon confirmation of
connection migration with updated information, e.g. to consider the new RTT estimate.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>An improperly configured or malicious data sender could cause a
data receiver to acknowledge more frequently than its available resources
permit. However, there are two limits that make such an attack largely
inconsequential. First, the acknowledgement rate is bounded by the rate at which
data is received. Second, ACK_FREQUENCY and IMMEDIATE_ACK frames can only request
an increase in the acknowledgment rate, but cannot force it.</t>
      <t>In general, with this extension, a sender cannot force a receiver to acknowledge
more frequently than the receiver considers safe based on its resource constraints.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document defines a new transport parameter to advertise support of the
extension described in this document and two new frame types to registered
by IANQ in the respective "QUIC Protocol" registries under
<eref target="https://www.iana.org/assignments/quic/quic.xhtml">https://www.iana.org/assignments/quic/quic.xhtml</eref>.</t>
      <t>The following entry in <xref target="transport-parameters"/> should be added to
the "QUIC Transport Parameters" registry under the "QUIC Protocol" heading.</t>
      <table anchor="transport-parameters">
        <name>Addition to QUIC Transport Parameters Entries</name>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">Parameter Name.</th>
            <th align="left">Specification</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">0xff04de1a</td>
            <td align="left">min_ack_delay</td>
            <td align="left">
              <xref target="nego"/></td>
          </tr>
        </tbody>
      </table>
      <t>The following frame types should be added to the "QUIC Frame Types"
registry under the "QUIC Protocol" heading.</t>
      <table anchor="frame-types">
        <name>Addition to QUIC Frame Types Entries</name>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">Frame Name</th>
            <th align="left">Specification</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">0xaf</td>
            <td align="left">ACK_FREQUENCY</td>
            <td align="left">
              <xref target="ack-frequency-frame"/></td>
          </tr>
          <tr>
            <td align="left">0xac</td>
            <td align="left">IMMEDIATE_ACK</td>
            <td align="left">
              <xref target="immediate-ack-frame"/></td>
          </tr>
        </tbody>
      </table>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="QUIC-TRANSPORT">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author initials="J." surname="Iyengar" fullname="Jana Iyengar" role="editor">
              <organization>Fastly</organization>
            </author>
            <author initials="M." surname="Thomson" fullname="Martin Thomson" role="editor">
              <organization>Mozilla</organization>
            </author>
            <date year="2021" month="May"/>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="QUIC-RECOVERY">
          <front>
            <title>QUIC Loss Detection and Congestion Control</title>
            <author initials="J." surname="Iyengar" fullname="Jana Iyengar" role="editor">
              <organization>Fastly</organization>
            </author>
            <author initials="I." surname="Swett" fullname="Ian Swett" role="editor">
              <organization>Google</organization>
            </author>
            <date year="2021" month="May"/>
          </front>
          <seriesInfo name="RFC" value="9002"/>
          <seriesInfo name="DOI" value="10.17487/RFC9002"/>
        </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>
      <references>
        <name>Informative References</name>
        <reference anchor="Cus22">
          <front>
            <title>Reducing the acknowledgement frequency in IETF QUIC</title>
            <author initials="A." surname="Custura" fullname="A. Custura">
              <organization>University of Aberdeen</organization>
            </author>
            <author initials="R." surname="Secchi" fullname="R. Secchi">
              <organization>University of Aberdeen</organization>
            </author>
            <author initials="G." surname="Fairhurst" fullname="G. Fairhurst">
              <organization>University of Aberdeen</organization>
            </author>
            <date year="2022" month="October"/>
          </front>
          <seriesInfo name="DOI" value="10.1002/sat.1466"/>
          <seriesInfo name="name" value="IJSCN"/>
        </reference>
        <reference anchor="RFC3449">
          <front>
            <title>TCP Performance Implications of Network Path Asymmetry</title>
            <author fullname="H. Balakrishnan" initials="H." surname="Balakrishnan"/>
            <author fullname="V. Padmanabhan" initials="V." surname="Padmanabhan"/>
            <author fullname="G. Fairhurst" initials="G." surname="Fairhurst"/>
            <author fullname="M. Sooriyabandara" initials="M." surname="Sooriyabandara"/>
            <date month="December" year="2002"/>
            <abstract>
              <t>This document describes TCP performance problems that arise because of asymmetric effects. These problems arise in several access networks, including bandwidth-asymmetric networks and packet radio subnetworks, for different underlying reasons. However, the end result on TCP performance is the same in both cases: performance often degrades significantly because of imperfection and variability in the ACK feedback from the receiver to the sender. The document details several mitigations to these effects, which have either been proposed or evaluated in the literature, or are currently deployed in networks. These solutions use a combination of local link- layer techniques, subnetwork, and end-to-end mechanisms, consisting of: (i) techniques to manage the channel used for the upstream bottleneck link carrying the ACKs, typically using header compression or reducing the frequency of TCP ACKs, (ii) techniques to handle this reduced ACK frequency to retain the TCP sender's acknowledgment-triggered self- clocking and (iii) techniques to schedule the data and ACK packets in the reverse direction to improve performance in the presence of two-way traffic. Each technique is described, together with known issues, and recommendations for use. A summary of the recommendations is provided at the end of the document. 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="69"/>
          <seriesInfo name="RFC" value="3449"/>
          <seriesInfo name="DOI" value="10.17487/RFC3449"/>
        </reference>
        <reference anchor="RFC3168">
          <front>
            <title>The Addition of Explicit Congestion Notification (ECN) to IP</title>
            <author fullname="K. Ramakrishnan" initials="K." surname="Ramakrishnan"/>
            <author fullname="S. Floyd" initials="S." surname="Floyd"/>
            <author fullname="D. Black" initials="D." surname="Black"/>
            <date month="September" year="2001"/>
            <abstract>
              <t>This memo specifies the incorporation of ECN (Explicit Congestion Notification) to TCP and IP, including ECN's use of two bits in the IP header. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3168"/>
          <seriesInfo name="DOI" value="10.17487/RFC3168"/>
        </reference>
        <reference anchor="RFC8257">
          <front>
            <title>Data Center TCP (DCTCP): TCP Congestion Control for Data Centers</title>
            <author fullname="S. Bensley" initials="S." surname="Bensley"/>
            <author fullname="D. Thaler" initials="D." surname="Thaler"/>
            <author fullname="P. Balasubramanian" initials="P." surname="Balasubramanian"/>
            <author fullname="L. Eggert" initials="L." surname="Eggert"/>
            <author fullname="G. Judd" initials="G." surname="Judd"/>
            <date month="October" year="2017"/>
            <abstract>
              <t>This Informational RFC describes Data Center TCP (DCTCP): a TCP congestion control scheme for data-center traffic. DCTCP extends the Explicit Congestion Notification (ECN) processing to estimate the fraction of bytes that encounter congestion rather than simply detecting that some congestion has occurred. DCTCP then scales the TCP congestion window based on this estimate. This method achieves high-burst tolerance, low latency, and high throughput with shallow- buffered switches. This memo also discusses deployment issues related to the coexistence of DCTCP and conventional TCP, discusses the lack of a negotiating mechanism between sender and receiver, and presents some possible mitigations. This memo documents DCTCP as currently implemented by several major operating systems. DCTCP, as described in this specification, is applicable to deployments in controlled environments like data centers, but it must not be deployed over the public Internet without additional measures.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8257"/>
          <seriesInfo name="DOI" value="10.17487/RFC8257"/>
        </reference>
        <reference anchor="I-D.ietf-tsvwg-aqm-dualq-coupled">
          <front>
            <title>Dual-Queue Coupled Active Queue Management (AQM) for Low Latency, Low Loss, and Scalable Throughput (L4S)</title>
            <author fullname="Koen De Schepper" initials="K." surname="De Schepper">
              <organization>Nokia Bell Labs</organization>
            </author>
            <author fullname="Bob Briscoe" initials="B." surname="Briscoe">
              <organization>Independent</organization>
            </author>
            <author fullname="Greg White" initials="G." surname="White">
              <organization>CableLabs</organization>
            </author>
            <date day="29" month="August" year="2022"/>
            <abstract>
              <t>This specification defines a framework for coupling the Active Queue Management (AQM) algorithms in two queues intended for flows with different responses to congestion. This provides a way for the Internet to transition from the scaling problems of standard TCP-Reno-friendly ('Classic') congestion controls to the family of 'Scalable' congestion controls. These are designed for consistently very low queuing latency, very low congestion loss, and scaling of per-flow throughput by using Explicit Congestion Notification (ECN) in a modified way. Until the Coupled Dual Queue (DualQ), these Scalable L4S congestion controls could only be deployed where a clean-slate environment could be arranged, such as in private data centres.

 This specification first explains how a Coupled DualQ works. It then gives the normative requirements that are necessary for it to work well. All this is independent of which two AQMs are used, but pseudocode examples of specific AQMs are given in appendices.
              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tsvwg-aqm-dualq-coupled-25"/>
        </reference>
      </references>
    </references>
    <?line 583?>

<section anchor="change-log">
      <name>Change Log</name>
      <ul empty="true">
        <li>
          <t><strong>RFC Editor's Note:</strong> Please remove this section prior to publication of a
final version of this document.</t>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The following people directly contributed key ideas that shaped this draft:
Bob Briscoe, Kazuho Oku, Marten Seemann.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA81c23Ibx5m+76fopS4kuQCYpGTLZsrZwCRlMxFFhqSScqVS
8hDTADoczMDTM4RghnmyvdsX2//Qx8GMLNVWtlZlSyQw04f/+P2H7vF4LBrd
FOpI7v353dmxnM7uympTqHyhVqps5Ota/dKqcrbdE3k1K7MVPJnX2bwZa9XM
x7+0ejbOZnfjuXtuvP+VyLMGHns4md6cPooZ/LKo6u2RNE0uZlVpVGlacySb
ulVCr2v6yTSH+/vf7h+KrFbZkbyps9Ksq7oRm6q+W9RVuz6SuEAhTJOV+fus
qEqYY6uMEFnbLKv6SEg5hv+l1CWM/seJPNuqcpHV9Bmv/I9ZmSUfV/XiSL7O
TFNs6Xe1ynRxJP9R6wnu7w8L/H0yq1bp4GcTeb1RTRMNfZaV0Wc07g9VtShU
PK6GXeEzf1jQV7sDn0/kn/77v5aF2ugyj0Y/1/U/su5XNMlprWfGVGU8zQqf
nty1yj79B2UfoglFWdWrrNH36kjAW0jV8c3V9O315cXVzRGNE4vEkZzKdyeX
4+8zo3J53haNXhfqA/wMfJDXatbWKvBrj95nATjcPzxAccBPDCxBGV3OK55B
yqvXMPS3+/v79veTi7MjebA/OXj18ptXX8K3/rvAX/wztv/28/kjvO7jN/6p
K9yrynVT1f1zAFdultXKUTliS1Y3utz5kmY5r37VRZH1T+PofnV6fPGX06uf
dsku31TGyBPVqFmjq5KIfVyVC2XoV/ixgRE/n9yHHyH34f8PcifaFWZINcwP
H2nZLpmRArGwH7fm8DAl9pXK25kuF7JZKpl1zJ83a7AyeXZ685rY1qH64fhg
f4DqnspA3C9N1kwOXn79tUh29cfr47cfpTs/N53g4pu2ztLtvythb7XRzVZW
czm9VXWuVDkwyNUEFXa21P+LMX6YAEd1vWxr03zSMGI8Hsvs1jR1NmuEuFlq
I8GXtETgXJlZrW+VkRmRVqoPDfgHFHHgHEi9VGW+rjQ82lRyxlIvdWPkWqn6
qRG5KrItsg+m7HDPTHjusmrU+7f4V1O9v1JZDosU4kSbWWtoJni1oVWhY5NN
dgfLWRfZTEn4EsWCVoaeCCcibyTR0uJvhQYyPEM/+Af0GBOgxPOR3Cz1bClh
yKwGat+jsWzE3/7+bNk0a3P05Zf4tv1q4l77Ej/40ij65z/JlL/H0b/DwZ8D
56q2ninwoLkia6CNaWGh+AjRKtrCDOh2q+DTtuzOvNDNsr1FR/AljruBaWP3
/Rxo9le70R9oo16FgBadceXHxn1uqb/SeQ76KZ7IM2QeKBsO9X8tB0+eyBtV
rwxR7kTNdalxGQbXoeSd2gJ3cyP3zt9d3+yN+F/59oJ+vjqFFV2dnuDP1z9O
37zxP7gnrn+8ePcGvhf2p/Dm8cX5+enbE34ZPpWdj86nP8E/uKi9i8ubs4u3
0zd7aGuQmcJTB0ARbhtIDwRQ9boGtwAMMJ5sOb7z/fGlPHgpHx7+A8z54cHB
t4+P9pdvwMo/PorNUpU8WVUWW8m/gnxvZbZeg9zhIFlRAJvXuskKM8IpzLLa
lHKpagVkPGN9qMELBa2xq4TdALQD5dqD7+egY7hky02wlZnkb+UzWIDoGtpa
zRRaD5RzvULlKLYwoPt4aEj3vcBBd6w3T4iCOC3lXvfbNXygmp6R+QvYHEg4
SloGXokpBmI4Pf6TmNdgCSddEW4NSG+DQjYCvngJY4KDDSIVygoc8h6ex+8S
/omHh2vr7A8mhw5d2d9fILlTqPb4iHINOAO8W8Y6NfUEiWlh3Ke53Rqs6bZt
QHtIoUlziFbWCxrVZY+ZgM5Y/ep+RWPoFYxM1Cp5yaJZgvVYLNctyEWBUCZP
oMwsQBmrzAUseq1qMjYlmF4gfkZMFsxGpuPx5TvZNmB6f2WLBE/dVs3SPupE
jIQhlRCgVeLpg2fvMRhuT3V1r6JN4bjC26F4sZr1Yg7bqDY4xSbbGkAcY2Ah
0xUgtKO+M6Owqi1tCJUabN09+RtTrRR6nwYHB8K7VYOvxSnKdgWOFRftRiM5
JfG0wrq7nRrHQOmEAWBCGArjMBDbPJA5UEqeflgjksGNofbbKUjZaaTIF+BQ
NQj6DAQbDfVSL5byFui00TmwJdCOnHGs2zwdSRRwC0gNCzR9lAJDRKYvoRRJ
A0xeO54OI7eweVj/rALLFfbM8kJLe41uxmxXK9VAtARutbwDbZ4ty6qoFgDr
RtK04NPBIp5cHF+fXY/km5tTFkoAdqoodKNGTFknLkEHgoDUm6xGPUTiEAVn
yG9kB+AjXSrcFBpma2cRUCl+HFY/h4gCeHa7jbYb2TID5v4/wdy/ePnyW7QO
Uv6VRqozwmVAJdoCbs2MAulSsUpHtiwApAJLgQGRv/Bc7yZR0TeqpvGsQUBw
1eAL8wLlCEhcrRuQAdgTfAzjgYLV6HLAeJJDwTgSvibHD16GIA9ui4A7Wbyx
RI9dA8l3V5vIDfOdGanmcz1DiQbB0+WsaHOrUfF81Roj2BbttqK13mZNgzpa
6LkiX7gBNuO/8Wu4ieTF7B7B3W1BLjvevVlmtaO3AQ9CS4MdiSlYR0aj7Mgf
HoB8BckxWTnw46CGKAvkrgEMWAsCMAzijZomo8wKibwygjFSx8KSrJItBt2r
yPpooGDwGbADkOKMOBLrTewPUuWayKnVoacmCHFjHHDuaKUIWlkq2CtjGgTc
Jao2eODZDLAlYbxV9gEE5Vc14CpQ/dO9RPYYiPrw0PWW0qzVTM+JRdIQhdn3
qV3ksALFz0ptVmz6MuFphJQHYT2ibctsx9iSFVS0IOY9iyQbCv+diDGGjhx0
1RKwAjCKSMn7/xeTw8kBfrG7LYA3FofAxgBmIIKrNtL7QiCl0QsEHoSWCe2Q
kKCERyzDHAdgzoC70fvpnKgVkQNGq4p7xdYUHgHRWxEOeasWgERAXkHCT/0g
70CvH56U8N2jEKfWdcKQOVChsWZA12CXSIUYU6oI/CcAN4GbYAVFBFoi39u4
ZBTQHpFag6QM4OoVgKseMPUc3PVKl++BMe8ZEj3b/zCf77/M1UGGX2Ii7B40
GLVtXKhygTYZ/NEChq8VENYgqrOrgZH0ql3JbEXyjPvSK8QJYC5WelZXBsS2
hIjjdmuDRdq3j3GsXIQNwi/3WdEqCirZuMBQvNBdKWRmgoFZIcir2iJHRbul
FF7lfAtLNCpuUc3u0I7VtMoaQtysbMFPQyg/kU8TqjzFBbSGvRCOg/EXgef7
SueS9Ns01rpWIC0rNO+ZWzzPfcVPyfPsA2acGVyCd1OwTisCgLPfv8bI6/Tt
8U8wlsPc0xAJwspThrmgDfe6qFXWkDNCKAciB/YkPDqJZJFo7QSQCB3Ej0Zs
cCim15pYmXXmxREEvJfMGdE4TydHD5LFLlTVdUW+t9mulfAy+f5yejU9P705
vXp/enV1cTWRmMTg9YLMFCqRmaedLYo+NYBFAgsAgxXaCWCkGQffDKjGqKMZ
KJnWmOY8YJDoCYfUHQr1ryUjl4M0Q/MEoj5jVA9rcAwBkykCVEykgmUCDJc8
mycZAtQaBrs9846El1pcARoN9kRk0PsmwJWpNVpT1mSAZ2TZdUPYVITpfnvT
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

-->

</rfc>
