<?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.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-quic-ack-frequency-07" 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-07"/>
    <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 (0xff04de1b):</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) = 0x1f,
}
]]></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>
      <section anchor="quic-transport-parameter">
        <name>QUIC Transport Parameter</name>
        <t>The following entry in <xref target="transport-parameters"/> has been requested to be provisionally 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">0xff04de1b</td>
              <td align="left">min_ack_delay</td>
              <td align="left">
                <xref target="nego"/></td>
            </tr>
          </tbody>
        </table>
        <t>When this document is approved, IANA is requested to assign a permanent allocation
of a codepoint in the 0-63 range to replace the provisional codepoint described above.</t>
      </section>
      <section anchor="quic-frame-types">
        <name>QUIC Frame Types</name>
        <t>The following frame types have requested to be provisionally 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">0x1f</td>
              <td align="left">IMMEDIATE_ACK</td>
              <td align="left">
                <xref target="immediate-ack-frame"/></td>
            </tr>
          </tbody>
        </table>
        <t>When this document is approved, IANA is requested to change the registration to
a permanent allocation of these frame types with the values described above.</t>
      </section>
    </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 621?>

<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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
QgNy/R/Y7kUSJ2oAAA==

-->

</rfc>
