<?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.8 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-quic-ack-frequency-09" category="std" consensus="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.21.0 -->
  <front>
    <title>QUIC Acknowledgment Frequency</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-quic-ack-frequency-09"/>
    <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 enables an endpoint to
request its peer change 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 sending 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 enables an endpoint to request its peer change its behavior when sending or
delaying acknowledgments.</t>
      <t>This document defines a new transport parameter that indicates 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 can delay sending these
acknowledgments. Delaying acknowledgments can impact a data sender's
throughput, loss detection and congestion controller performance, as well
as CPU utilization at both endpoints.</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 is very CPU intensive on some platforms. A data
receiver can decrease its CPU usage by reducing the number of
acknowledgement-only packets sent. 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 also reduces the data sender's CPU usage because
it receives and processes 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>However, as discussed in <xref target="implementation"/>, a unilateral reduction in
acknowledgement frequency can lead to undesirable consequences for congestion
control and loss recovery. <xref target="QUIC-TRANSPORT"/> specifies a simple delayed
acknowledgment mechanism (<xref section="13.2.1" sectionFormat="of" target="QUIC-TRANSPORT"/>) without any
ability for the data sender to impact this behavior.  A data sender's constraints
on the acknowledgment frequency need to be taken into account to maximize
congestion controller and loss recovery performance. This extension provides
a mechanism for a data sender to signal its preferences and constraints.</t>
    </section>
    <section anchor="nego">
      <name>Negotiating Extension Use</name>
      <t>After a data receiver advertises support for this extension, two new frames
can be sent by the data sender to provide guidance about delaying and sending
ACK frames. 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, that the endpoint sending this value is willing to
delay an acknowledgment. This limit could be based on the data receiver's
clock or timer granularity. min_ack_delay is used by the data sender 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 work done by the endpoints
as well as network load. A data sender's loss detection and congestion control
mechanisms however need to be tolerant of this delay at the peer. A data sender
signals the conditions under which it wants to receive ACK frames 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 so receivers 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 after receiving more
than this many ack-eliciting packets. 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 data sender
requests the data receiver 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, as specified in
<xref section="18.2" sectionFormat="of" target="QUIC-TRANSPORT"/>. 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 data receiver 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 data receiver
sends an acknowledgment when one of the following conditions are met since the
last acknowledgement was sent:</t>
      <ul spacing="normal">
        <li>
          <t>The number of received ack-eliciting packets is greater than the
Ack-Eliciting Threshold.</t>
        </li>
        <li>
          <t>max_ack_delay amount of time has passed.</t>
        </li>
      </ul>
      <t>An acknowledgment can be sent earlier based on the value of the
Reordering Threshold when a gap in packet numbers 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 (<xref section="5.3" sectionFormat="of" target="QUIC-RECOVERY"/>),
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 immediate acknowledgment upon receipt of a reordered ack-eliciting
packet. After an ACK_FREQUENCY frame with a Reordering Threshold value other
than 1 has been received, this extension delays immediate acknowledgements
to reordered ack-eliciting packets and the gaps they can create.</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, the sequence in <xref target="ack-reordering-3"/> would occur:</t>
          <table anchor="ack-reordering-3">
            <name>Acknowledgement behavior with a reordering threshold of 3</name>
            <thead>
              <tr>
                <th align="left">Received Packet</th>
                <th align="left">Largest Unacked</th>
                <th align="left">Largest Acked</th>
                <th align="left">Largest Reported</th>
                <th align="left">Unreported Missing</th>
                <th align="left">Send Acknowledgement</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">1</td>
                <td align="left">1</td>
                <td align="left">-</td>
                <td align="left">-</td>
                <td align="left">-</td>
                <td align="left">No</td>
              </tr>
              <tr>
                <td align="left">3</td>
                <td align="left">3</td>
                <td align="left">-</td>
                <td align="left">-</td>
                <td align="left">2</td>
                <td align="left">No</td>
              </tr>
              <tr>
                <td align="left">4</td>
                <td align="left">4</td>
                <td align="left">-</td>
                <td align="left">-</td>
                <td align="left">2</td>
                <td align="left">No</td>
              </tr>
              <tr>
                <td align="left">5</td>
                <td align="left">5</td>
                <td align="left">-</td>
                <td align="left">-</td>
                <td align="left">2</td>
                <td align="left">Yes (5 - 2 &gt;= 3)</td>
              </tr>
              <tr>
                <td align="left">8</td>
                <td align="left">8</td>
                <td align="left">5</td>
                <td align="left">3</td>
                <td align="left">6,7</td>
                <td align="left">No</td>
              </tr>
              <tr>
                <td align="left">9</td>
                <td align="left">9</td>
                <td align="left">5</td>
                <td align="left">3</td>
                <td align="left">6,7</td>
                <td align="left">Yes (9 - 6 &gt;= 3)</td>
              </tr>
              <tr>
                <td align="left">10</td>
                <td align="left">10</td>
                <td align="left">9</td>
                <td align="left">7</td>
                <td align="left">7</td>
                <td align="left">Yes (10 - 7 &gt;= 3)</td>
              </tr>
            </tbody>
          </table>
          <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, the sequence in <xref target="ack-reordering-5"/> would occur:</t>
          <table anchor="ack-reordering-5">
            <name>Acknowledgement behavior with a reordering threshold of 5</name>
            <thead>
              <tr>
                <th align="left">Received Packet</th>
                <th align="left">Largest Unacked</th>
                <th align="left">Largest Acked</th>
                <th align="left">Largest Reported</th>
                <th align="left">Unreported Missing</th>
                <th align="left">Send Acknowledgement</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">1</td>
                <td align="left">1</td>
                <td align="left">-</td>
                <td align="left">-</td>
                <td align="left">-</td>
                <td align="left">No</td>
              </tr>
              <tr>
                <td align="left">3</td>
                <td align="left">3</td>
                <td align="left">-</td>
                <td align="left">-</td>
                <td align="left">2</td>
                <td align="left">No</td>
              </tr>
              <tr>
                <td align="left">5</td>
                <td align="left">5</td>
                <td align="left">-</td>
                <td align="left">-</td>
                <td align="left">2,4</td>
                <td align="left">No</td>
              </tr>
              <tr>
                <td align="left">6</td>
                <td align="left">6</td>
                <td align="left">-</td>
                <td align="left">-</td>
                <td align="left">2,4</td>
                <td align="left">No</td>
              </tr>
              <tr>
                <td align="left">7</td>
                <td align="left">7</td>
                <td align="left">-</td>
                <td align="left">-</td>
                <td align="left">2,4</td>
                <td align="left">Yes  (7 - 2 &gt;= 5)</td>
              </tr>
              <tr>
                <td align="left">8</td>
                <td align="left">8</td>
                <td align="left">7</td>
                <td align="left">3</td>
                <td align="left">4</td>
                <td align="left">No</td>
              </tr>
              <tr>
                <td align="left">9</td>
                <td align="left">9</td>
                <td align="left">7</td>
                <td align="left">3</td>
                <td align="left">4</td>
                <td align="left">Yes  (9 - 4 &gt;= 5)</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
      <section anchor="set-threshold">
        <name>Setting the Reordering Threshold value</name>
        <t>To ensure timely loss detection, a data sender can send a Reordering Threshold
value of 1 less than the loss detection packet threshold. If the threshold is
smaller than the packet threshold, an acknowledgement is unnecessarily sent
before the packet can be declared lost. If the value is larger, it can cause
unnecessary delays in loss detection. (<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. Therefore, CE-marking only triggers an immediate
acknowledgement 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>After requesting an update to the data receivers's max_ack_delay, a data sender
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 exclude the peer's max_ack_delay from its PTO
calculation.  When Reordering Threshold is set to 0 and loss prevents the peer
from receiving 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 delaying acknowledgements of PTO packets
by the ack delay, 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 data 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.  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 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 668?>

<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>
      <t>Thanks for the in-depth reviews by Lucas Pardue, Martin Thomson,
Magnus Westerlund, Kazuho Oku, Marten Seemann, Gorry Fairhurst and
Ingemar Johansson.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
o1kPZXgAAA==

-->

</rfc>
