<?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.1 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-quic-ack-frequency-06" category="std" consensus="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.2 -->
  <front>
    <title>QUIC Acknowledgement Frequency</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-quic-ack-frequency-06"/>
    <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>
          <t>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.</t>
        </li>
        <li>
          <t>Similarly, receiving and processing UDP packets can also be CPU intensive, and
reducing acknowledgement frequency reduces this cost at a data sender.</t>
        </li>
        <li>
          <t>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"/>.</t>
        </li>
        <li>
          <t>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.</t>
        </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>
          <t>Since the last acknowledgement was sent, the number of received ack-eliciting
packets is greater than the <tt>Ack-Eliciting Threshold</tt>.</t>
        </li>
        <li>
          <t>Since the last acknowledgement was sent, <tt>max_ack_delay</tt> amount of time has
passed.</t>
        </li>
      </ul>
      <t><xref target="out-of-order"/>, <xref target="congestion"/>, and <xref target="batch"/> describe exceptions to this
strategy.</t>
      <section anchor="response-to-long-idle-periods">
        <name>Response to long idle periods</name>
        <t>It is important to receive timely feedback after long idle periods,
e.g. update stale RTT measurements. When no acknowledgement has been sent in
over one smoothed round trip time, receivers are encouraged to send an
acknowledgement soon after receiving an ack-eliciting packet. This is not an
issue specific to this document, but the mechanisms specified herein could
create excessive delays.</t>
      </section>
      <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>Largest Reported:</dt>
          <dd>
            <t>The largest packet number that could be declared lost with the specified
Reordering Threshold, which is Largest Acked - Reordering Threshold + 1.</t>
          </dd>
          <dt>Unreported Missing:</dt>
          <dd>
            <t>Packets with packet numbers between the Largest Unacked and Largest Reported
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 decreases 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>
      <t>When sending PTO packets, one can include an IMMEDIATE_ACK frame to elicit an
immediate acknowledgement. This avoids waiting the ack delay for
acknowledgements of PTO packets, reducing tail latency and allowing the sender
to exclude the peer's 'max_ack_delay' from subsequent PTO calculations.</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
can cause a receiver to send an acknowledgement at least once per round trip
when there are 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>When setting the Request Max Ack Delay as a function of RTT, it is usually
better to use the Smoothed RTT (<xref section="5.3" sectionFormat="of" target="QUIC-RECOVERY"/>) or another
estimate of the typical round trip time, but not Min RTT. This avoids eliciting an
unnecessarily high number of acknowledgements when min_rtt is much smaller than
smoothed_rtt.</t>
        <t>Note that the congestion window and the RTT change over the lifetime of a
connection and 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>
          <t>If there are no inflight packets, no acknowledgements will be received for at least
a round trip when sending resumes. The Max Ack Delay and Ack-Eliciting Threshold
values used by the receiver can further delay acknowledgements.  In this case, the
sender can include an IMMEDIATE_ACK or ACK_FREQUENCY frame in the first
Ack-Eliciting packet to avoid waiting for substantially more than a round trip
for an acknowledgement.</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 anchor="sec-normative-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 anchor="sec-informative-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 613?>

<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:
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

-->

</rfc>
