<?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.26 (Ruby 3.1.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-quic-ack-frequency-04" category="std" consensus="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.0 -->
  <front>
    <title>QUIC Acknowledgement Frequency</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-quic-ack-frequency-04"/>
    <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>
      <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>
      <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>
    <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 impact 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 uniltaerally 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 PROTOCOL_VIOLATION. 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. 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 ACKs.</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"/>), as 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 processed thus far.</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 chances 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. The IMMEDIATE_ACK frame helps 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>
        <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>In order 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>
        <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>
        <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:
<tt>
  Receive 1
  Receive 3 -&gt; 2 Missing
  Receive 4 -&gt; 2 Missing
  Receive 5 -&gt; Send ACK because of 2
  Receive 8 -&gt; 6,7 Missing
  Receive 9 -&gt; Send ACK because of 6, 7 Missing
  Receive 10 -&gt; Send ACK because of 7
</tt></t>
          <t>If the reordering threshold is 5 and ACKs are only sent due to reordering:
<tt>
  Receive 1
  Receive 3 -&gt; 2 Missing
  Receive 5 -&gt; 2 Missing, 4 Missing
  Receive 6 -&gt; 2 Missing, 4 Missing
  Receive 7 -&gt; Send ACK because of 2, 4 Missing
  Receive 8 -&gt; 4 Missing
  Receive 9 -&gt; Send ACK because of 4
</tt></t>
        </section>
      </section>
      <section anchor="congestion">
        <name>Expediting Congestion 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 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. To enable a sender to respond to potential
network congestion in a timely fashion, usually at least one acknowledgement
per round trip is needed if there are unacknowledged ack-eliciting packets
in flight. A sender can accomplish this by setting the Ack-Eliciting Threshold
to a value no larger than the current congestion window or the Request Max Ack
Delay value to no more than the estimated round trip. Note that the congestion
window particularly but also the RTT are dynamic and therefore might require
frequent updates if the selected value are close to these limits. Alternatively,
a sender can accomplish this by sending an IMMEDIATE_ACK frame once per
round trip, though 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 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.  In these cases,
Reordering Threshold values other than 1 can be harmful, because it delays fast
loss detection.</t>
        <t>A congestion controller that is congestion window limited 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 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>To limit these 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. A sender can
accomplish this by sending an IMMEDIATE_ACK frame once per round-trip time
(RTT), or it can set the Ack-Eliciting Threshold and Request Max Ack Delay
values to be no more than a congestion window and an estimated RTT,
respectively.</t>
        <t>A sender might use timers to detect loss of PMTU probe packets
(<xref section="14" sectionFormat="of" target="QUIC-TRANSPORT"/>). A sender SHOULD
bundle an IMMEDIATE_ACK frame with any PTMU 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 (<xref section="9.4" sectionFormat="of" target="QUIC-TRANSPORT"/>), which can impact
the number of acknowledgements received after migration. An endpoint that has
sent an ACK_FREQUENCY frame earlier in the connection SHOULD update and send a
new ACK_FREQUENCY frame immediately upon confirmation of connection migration.</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">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="V. Padmanabhan" initials="V." surname="Padmanabhan">
              <organization/>
            </author>
            <author fullname="G. Fairhurst" initials="G." surname="Fairhurst">
              <organization/>
            </author>
            <author fullname="M. Sooriyabandara" initials="M." surname="Sooriyabandara">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="S. Floyd" initials="S." surname="Floyd">
              <organization/>
            </author>
            <author fullname="D. Black" initials="D." surname="Black">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="D. Thaler" initials="D." surname="Thaler">
              <organization/>
            </author>
            <author fullname="P. Balasubramanian" initials="P." surname="Balasubramanian">
              <organization/>
            </author>
            <author fullname="L. Eggert" initials="L." surname="Eggert">
              <organization/>
            </author>
            <author fullname="G. Judd" initials="G." surname="Judd">
              <organization/>
            </author>
            <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>
    <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:
H4sIAAAAAAAAA81c23IbN5q+x1Ng5QvbKZKRZCdONJWZMLKcKGNZGkmeqdTU
lg2yQRKjZjfT6DbNaDxPtnf7YvsfgAbQ3XTs3dqtdVUiiezG4T9+/wEYj8ei
NnWuT+TBX16fn8rp/K4ot7nOlnqti1q+qPSvjS7muwORlfNCreHJrFKLemx0
vRj/2pj5WM3vxgv/3PjwqchUDY/dP5/enn0Qc/hjWVa7E2nrTMzLwurCNvZE
1lWjhdlU9Jutjw8Pvz08FqrS6kTeVqqwm7Kqxbas7pZV2WxOJC5QCFurInuj
8rKAOXbaCqGaelVWJ0LKMfwnpSlg9J8n8nyni6Wq6DNe+c+qUMnHZbU8kS+U
rfMd/a3XyuQn8h+VmeD+vl/i35N5uU4HP5/Im62u62joc1VEn9G4P5blMtfx
uAZ2hc98v6Sv+gNfTOSf//M/VrnemiKLRr8w1T9U9yua5Kwyc2vLIp5mjU9P
7hrtnv5eu4doQlGU1VrV5p0+EfAWUnV8ez19dXN1eX17QuPEInEip/L186vx
D8rqTF40eW02uX4PvwMf5I2eN5UO/Dqg91kAjg+Pj8aHX9EnFpagrSkWJc8g
5fULGPrbw8ND9/fzy/MTeXQ4OXr29JtnX8K37XeBv/hv7H4O8/kjvB7iN/6r
StyrzkxdVsNzAFduV+XaUzlii6pqU/S+pFkuyt9MnqvhaTzdr89OL/96dv1L
n+zyZWmtfK5rPa9NWRCxT8tiqS39Cb/WMOLnk/v4I+Q+/v9B7kS7wgyphrXD
R1rWJzNSIBb208YeH6fEvtZZMzfFUtYrLVXH/LVmDVYmz89uXxDbOlQ/Hh8d
7qF6S2Ug7pdW1ZOjp19/LZJd/Xxz+uqjdOfnphNcfN1UKt3+6wL2VllT72S5
kNOZrjKtiz2DXE9QYecr8z8Y48cJcNRUq6ay9ScNI8bjsVQzW1dqXgtxuzJW
gi9piMCZtvPKzLSVikgr9fsa/AOKOHAOpF7qItuUBh6tSzlnqZemtnKjdfXQ
ikznaofsgyk73LMTnrsoa/3mFf6vLt9ca5XBIoV4buy8sTQTvFrTqtCxyVrd
wXI2uZprCV+iWNDK0BPhROSNJFpa/Cs3QIZH6Ae/R48xAUo8HsntysxXEoZU
FVD7HRrLWvz93x+t6npjT778Et92X038a1/iB19aTT/+RKb8DY7+HQ7+GDhX
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
4r8A2GUx1flfAAA=

-->

</rfc>
