<?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.7 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-quic-ack-frequency-08" category="std" consensus="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.20.0 -->
  <front>
    <title>QUIC Acknowledgment Frequency</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-quic-ack-frequency-08"/>
    <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 90?>

<t>This document specifies an extension to QUIC that permits an endpoint to
request that its peer changes its behavior when sending or delaying acknowledgments.</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <?line 95?>

<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 105?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The QUIC transport protocol recommends to send an ACK frame
after receiving at least two ack-eliciting packets; see
<xref section="13.2" sectionFormat="of" target="QUIC-TRANSPORT"/>. However, it leaves the determination
of how frequently to send acknowledgments in response to ack-eliciting packets
to the data receiver without any ability for the data sender to impact this
behavior. This document specifies an extension to QUIC that permits an endpoint to
request that its peer changes its behavior when sending or delaying acknowledgments.</t>
      <t>This document defines a new transport parameter to announce the support of this
extension and specifies two new frame types to request changes to the peer's
acknowledgement behavior.</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
acknowledgment receiver). Similarly, "receiver" refers to a QUIC data receiver
(and acknowledgment sender).</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
acknowledgments. Delaying acknowledgments 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 acknowledgments can improve connection and
endpoint performance in the following ways:</t>
      <ul spacing="normal">
        <li>
          <t>Sending UDP datagrams can be very CPU intensive on some platforms. A data
receiver can decrease its CPU usage by reducing the number of
acknowledgement-only packets that it sends. Experience shows that this
reduction can be critical for high bandwidth connections.</t>
        </li>
        <li>
          <t>Similarly, receiving UDP datagrams can also be CPU intensive. Reducing the
acknowledgement frequency therefore also reduces the CPU usage at the data
sender as it has to receive and process fewer acknowledgment-only packets.</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 unilaterally reduces the
acknowledgment frequency. A sender's constraints on the acknowledgment
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 acknowledgment mechanism that a
receiver can use: send an acknowledgment for every other packet, and for every
packet that is received out of order (<xref section="13.2.1" sectionFormat="of" 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>After the successful negotiation of this extension two new frames can be used
to provide guidance about delaying and sending of ACK frames to its peer. These
frames are the ACK_FREQUENCY frame (see <xref target="ack-frequency-frame"/>) and the
IMMEDIATE_ACK frame (see <xref target="immediate-ack-frame"/>).</t>
      <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 acknowledgment. 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 Requested 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 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 and IMMEDIATE_ACK frames independent
of whether it also sends the min_ack_delay transport parameter or not.</t>
      <t>Until an ACK_FREQUENCY or IMMEDIATE_ACK frame is received, sending the min_ack_delay transport
parameter does not cause the endpoint to change its acknowledgment 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
and IMMEDIATE_ACK 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 acknowledgments 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),
  Requested 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.  A sending endpoint MUST send monotonically increasing values in
the Sequence Number field to allow obsolete ACK_FREQUENCY frames to be
ignored when packets are processed out of order.</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>Requested Max Ack Delay:</dt>
        <dd>
          <t>A variable-length integer representing the value to which the endpoint
requests the peer update its max_ack_delay
(<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. On receipt of a valid value, the endpoint SHOULD update
its max_ack_delay to the value provided by the peer. Note that values
of 2^14 or greater are invalid for max_ack_delay. A value smaller than
the min_ack_delay advertised by the peer is also invalid. Receipt of an
invalid value MUST be treated as a connection error of type
FRAME_ENCODING_ERROR.</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 <xref target="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 and congestion controlled. 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 <xref section="13.3" sectionFormat="of" target="QUIC-TRANSPORT"/>), because the receiver will ignore
duplicate or out-of-order ACK_FREQUENCY frames based on the Sequence Number.</t>
      <t>A receiving endpoint MUST ignore a received ACK_FREQUENCY frame unless the
Sequence Number value in the frame is greater than the largest 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 acknowledgments
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
acknowledgments 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 and they are also
congestion controlled. 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 acknowledgments as
specified in <xref section="13.2.1" sectionFormat="of" target="QUIC-TRANSPORT"/>.</t>
      <t>On receiving an ACK_FREQUENCY frame and updating its max_ack_delay
and Ack-Eliciting Threshold values (<xref target="ack-frequency-frame"/>), the endpoint sends an
acknowledgment when one of the following conditions are met:</t>
      <ul spacing="normal">
        <li>
          <t>Since the last acknowledgment was sent, the number of received ack-eliciting
packets is greater than the Ack-Eliciting Threshold.</t>
        </li>
        <li>
          <t>Since the last acknowledgment was sent, max_ack_delay amount of time has
passed.</t>
        </li>
      </ul>
      <t>Further, the enpoint may send an acknowledgment earlier based on the value
of the Reordering Threshold when a gap in the packet number order is detected,
see <xref target="out-of-order"/>.</t>
      <t><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 acknowledgment has been sent in
over one smoothed round trip time, receivers are encouraged to send an
acknowledgment 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 acknowledgment immediately on receipt of a reordered ack-eliciting
packet with a smaller packet number than the highest-numbered ack-eliciting packet
or with a higher packet number when there are missing packets between that packet
and the highest-numbered 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 Reordering
Threshold value of 0, the endpoint SHOULD NOT send an immediate
acknowledgment in response to packets received out of order, and instead
rely on the peer's Ack-Eliciting Threshold and Requested Max Ack Delay
for sending acknowledgments.</t>
        <t>If the most recent ACK_FREQUENCY frame received from the peer has a Reordering
Threshold value larger than 1, the endpoint tests the amount of reordering
before deciding to send an acknowledgment. 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 max_ack_delay timer and Ack-Eliciting Threshold 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 acknowledgement is sent.</t>
          <t>If the reordering theshold is 3 and acknowledgements 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>Note that in this example, the receipt of packet 9 triggers an ACK
that reports both packets 6 and 7 as missing. However,
the receipt of packet 10 needs to trigger another immediate ACK
because only with the reporting of the successful receiption of
packet 10, the sender will be able to declare packet 7 as lost
(with a reordering threshold of 3).</t>
          <t>If the reordering threshold is 5 and acknowledgements 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 acknowledgement is (unnecessarily) 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>If the Ack-Eliciting Threshold is larger than 1, 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. From there on, if multiple
CE-marked packets are received in a row or only non-CE-marked packet received,
the endpoint resumes sending acknowledgements based on the Ack-Eliciting
Threshold or max_ack_delay. This results in sending an immediate
acknowledgement only when there is a transition from non-CE-marked
to CE-marked.</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 acknowledgments 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 max_ack_delay, 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 the ACK_FREQUENCY frame is acknowledged, the endpoint
MUST use the greater of the current max_ack_delay 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 max_ack_delay.</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 max_ack_delay 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 max_ack_delay period before sending an acknowledgment. In such
cases, the endpoint MAY therefore exclude the peer's max_ack_delay from its PTO
calculation.  When Reordering Threshold is set to 0 and loss causes the peer to
not receive enough packets to trigger an immediate acknowledgment, the receiver
will wait max_ack_delay, increasing the chances of a premature PTO.
Therefore, if Reordering Threshold is set to 0, 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 acknowledgment. This avoids waiting the ack delay for
acknowledgments 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 Acknowledgment 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 acknowledgment 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 acknowledgment frequency, a sender
can use the extension in this draft to request a receiver
to send an acknowledgment at least once per round trip,
when there are ack-eliciting packets in flight, in the following ways:</t>
        <t>A sender can set the Requested 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 number of maximum-sized packets that fit
into the current congestion window.
Alternatively, a sender can send an IMMEDIATE_ACK frame if no acknowledgement
has been received for more than one 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 Requested Max Ack Delay as a function of the RTT, it is usually
better to use the Smoothed RTT (smoothed_rtt) (<xref section="5.3" sectionFormat="of" target="QUIC-RECOVERY"/>) or another
estimate of the typical RTT, but not the minimum RTT (min_rtt)
(<xref section="5.2" sectionFormat="of" target="QUIC-RECOVERY"/>). This avoids eliciting an
unnecessarily high number of acknowledgments when min_rtt is much smaller than
smoothed_rtt.</t>
        <t>Note that the congestion window and the RTT estimate change over the lifetime of a
connection and therefore might require sending updates in an ACK_FREQUENCY frames to
ensure optimal performance, though not every change should trigger an update.
Usually, it is not necessary to send an ACK_FREQUENCY frame more than once per
RTT and likely it needs to be sent even less frequently.
Ideally, an ACK_FREQUENCY frame is sent only when a relevant change
in the congestion window or smoothed RTT is detected that impacts the local
setting of the reordering threshold or locally-selected calculation of the
either Ack-Eliciting Threshold or the Requested Max Ack Delay.</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 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
acknowledgments to send additional data into the network.  An increase in
acknowledgment delay increases the delay in sending data, which can reduce the
achieved throughput.  Congestion window growth can also depend upon receiving
acknowledgments. This can be particularly significant in slow start
(<xref section="7.3.1" sectionFormat="of" target="QUIC-RECOVERY"/>), when delaying acknowledgments can delay
the increase in congestion window and can create larger packet bursts.</t>
          <t>If the sender is application-limited, acknowledgments 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 acknowledgments 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 acknowledgments.  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 acknowledgment.</t>
        </section>
      </section>
      <section anchor="burst-mitigation">
        <name>Burst Mitigation</name>
        <t>Receiving an acknowledgment 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 <xref section="7.7" sectionFormat="of" 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>Acknowledgments 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
acknowledgment (<xref section="6.1.1" sectionFormat="of" target="QUIC-RECOVERY"/>); delaying the
acknowledgment therefore delays this method of detecting losses.</t>
        <t>Reducing acknowledgment frequency reduces the number of RTT samples that a
sender receives (<xref section="5" sectionFormat="of" 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-based loss detection (<xref section="6.1.2" sectionFormat="of" target="QUIC-RECOVERY"/>) or the Probe Timeout (PTO) (<xref section="6.2" sectionFormat="of" 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 (<xref section="9.4" sectionFormat="of" target="QUIC-TRANSPORT"/>);
this changes the pattern of acknowledgments 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 request 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 acknowledgment 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 enforce it.</t>
      <t><xref section="21.9" sectionFormat="of" target="QUIC-TRANSPORT"/> provides further guidance on peer denial of service
attacks that could abuse control frames, including ACK frames as well as the newly herein specified
ACK_FREQUENCY and IMMEDIATE_ACK frames, to cause disproportional
processing costs without observable impact on the state of the connection.
Especially, the IMMEDIATE_ACK frame does not only imply processing cost for receiving
and processing the control frame itself but can also cause additional sending of
packets. However, 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="T." surname="Jones" fullname="T. Jones">
              <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 670?>

<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:
H4sIAAAAAAAAA81dW3Mbx5V+71/RSz1YdACYpGTJYsqJaZJy6IgiQ1JJuVK7
qgGmAUw0mIFnBqRghvll+7Z/bM+tb3Oh5KR2K67EJoGZvpw+l+9c+nA8Hqsm
a3JzqHf+9O7sWB/NPhTlXW7SxcoUjX5dmZ83pphtd1RazopkBQ+mVTJvxplp
5uOfN9lsnMw+jOf2ufHeNypNGnjs/uTo5vRBzeCXRVltD3XdpGpWFrUp6k19
qJtqY1S2ruinujnY23u1d6CSyiSH+qZKinpdVo26K6sPi6rcrA81rk+pukmK
9H2SlwXMsTW1UsmmWZbVodJ6DP/XOitg9B8n+mxrikVS0We88h+TIok+LqvF
oX6d1E2+pd/NKsnyQ/23Kpvg/r5b4O+TWbmKBz+b6Os70zTB0GdJEXxG4/5Q
lovchONmsCt85rsFfdUd+Hyi//g//73MzV1WpMHo51n1t6T9FU1yWmWzui6L
cJoVPj35sDHy9HdGHqIJVVFWq6TJbs2hgreQquObq6O315cXVzeHNE7IEYf6
SL87uRx/n9Qm1eebvMnWufkIP8M56Gsz21TGn9cOvc8McLB3sD/e+5o+qWEJ
ps6KeckzaH31GoZ+tbe3J7+fXJwd6v29yf7L59+8/Aq+dd/588V/xvLf/nN+
5Kz7zhv/qUrcq0mzpqz654BTuVmWK0vl4FiSqsmKzpc0y3n5S5bnSf80lu5X
p8cXfz69+qlLdv2mrGt9Yhoza7KyIGIfl8XC1PQr/NjAiL+e3AePkPvg34Pc
kXT5GWIJc8MHUtYlM1IgZPbjTX1wEBP7yqSbWVYsdLM0OnHaz5D6c2oNVqbP
Tm9e07G1qH4w3t8boLqjMhD3qzppJvvPX7xQ0a5+vD5++yjd+bmjCS6+2VRJ
vP13BeytqrNmq8u5PpqaKjWmGBjkZqJ/BL1Z/wtDXE1Q5mfL7F8Y44cJMEVW
LTdV3XzWMGo8HutkWjdVMmuUullmtQZztKEzqtdmls2B8CAj2nxswLyghDQl
nRUca9LotalWWcNPFOm6zOC9plR0unXDz+D3a2MqPVsmKGf0wdQsk9usrPTd
0hRwwEWKrAK/pyZPtvhzEhnMesKLLcrGvH+L/2rK91cmSWFXSp1k9WxT0/Jg
ew1tA42pbpIPMOE6T2ZG49qBFWnxaP1wErKAGrU7/pZnQLenaHu/Qys1AdLt
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
a2OA0ABd/he8yrQPw3YAAA==

-->

</rfc>
