<?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.39 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-quic-receive-ts-03" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="QUIC Receive Timestamps">QUIC Extended Acknowledgement for Reporting Packet Receive Timestamps</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-quic-receive-ts-03"/>
    <author initials="I." surname="Swett" fullname="Ian Swett" role="editor">
      <organization>Google LLC</organization>
      <address>
        <email>ianswett@google.com</email>
      </address>
    </author>
    <author initials="J." surname="Beshay" fullname="Joseph Beshay" role="editor">
      <organization>Meta Platforms, Inc.</organization>
      <address>
        <email>jbeshay@meta.com</email>
      </address>
    </author>
    <date year="2026" month="July" day="20"/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 45?>

<t>This document defines an extension to the QUIC transport protocol which supports
reporting multiple packet receive timestamps for post-handshake packets.</t>
    </abstract>
  </front>
  <middle>
    <?line 51?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The QUIC Transport Protocol <xref target="RFC9000"/> provides a secure, multiplexed
connection for transmitting reliable streams of application data.</t>
      <t>This document defines an extension to the QUIC transport protocol which supports
reporting multiple packet receive timestamps.</t>
    </section>
    <section anchor="motivation">
      <name>Motivation</name>
      <t>QUIC congestion control (<xref target="RFC9002"/>) supports sampling round-trip time (RTT)
by measuring the time from when a packet was sent to when it is acknowledged.
However, more precise delay signals measured via packet receive timestamps have
the potential to improve the accuracy of network bandwidth measurements and the
effectiveness of congestion control, especially for latency-critical
applications such as real-time video conferencing or game streaming.</t>
      <t>Numerous existing algorithms and techniques leverage receive timestamps
to improve transport performance. Examples include:</t>
      <ul spacing="normal">
        <li>
          <t>The WebRTC congestion control algorithm described in <xref target="I-D.ietf-rmcat-gcc"/>
uses the difference between packet inter-departure and packet inter-arrival
times as the input to its delay-based controller.</t>
        </li>
        <li>
          <t>The pathChirp (<xref target="RRBNC"/>) technique estimates available bandwidth by measuring
inter-arrival time of multiple packets.</t>
        </li>
      </ul>
      <t>Notably, these techniques require receive timestamps for more than one packet
per round-trip in order to best measure the network.</t>
      <t>Additionally, receive timestamps can provide valuable network telemetry, even
if they are not used by the congestion controller.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" 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>
      <?line -18?>

</section>
    <section anchor="frame">
      <name>New ACK_RECEIVE_TIMESTAMPS Frame Wire Format</name>
      <t>Once the receive timestamps extension is negotiated (see <xref target="negotiation"/>), an
endpoint <bcp14>MAY</bcp14> use the ACK_RECEIVE_TIMESTAMPS frame defined below to report
receive timestamps to its peer. An endpoint <bcp14>MAY</bcp14> continue to use the existing
ACK frames as specified in <xref section="19.3" sectionFormat="of" target="RFC9000"/> if it does not have any
receive timestamps or does not want to report them.</t>
      <t>Endpoints send ACK_RECEIVE_TIMESTAMPS frames in 1-RTT packets, with 0
or more receive timestamps following the Ack Ranges and optional ECN Counts.
Similar to to the ACK frame types (x02..0x03), the ACK_RECEIVE_TIMESTAMPS
frame defines two frame types (0x03178307..0x03178308) to indicate whether the frame
includes ECN counts.
ACK frames are never sent in 0-RTT packets, so the same applies to
ACK_RECEIVE_TIMESTAMPS frames.</t>
      <figure anchor="fig-frame">
        <name>ACK Frame Format</name>
        <artwork><![CDATA[
ACK_RECEIVE_TIMESTAMPS Frame {
  Type (i) = 0x03178307..0x03178308,
  Largest Acknowledged (i),
  ACK Delay (i),
  ACK Range Count (i),
  First ACK Range (i),
  ACK Range (..) ...,
  [ECN Counts (..)],       // included iff Type == 0x03178308
  Receive Timestamps (..)  // see {{ts-ranges}}
}
]]></artwork>
      </figure>
      <t>The fields Largest Acknowledged, ACK Delay, ACK Range Count, First ACK Range,
ACK Range and ECN Counts are the same as for ACK (type=0x02..0x03) frames
specified in <xref section="19.3" sectionFormat="of" target="RFC9000"/>.</t>
      <t>The format of the Receive Timestamps field is shown in
<xref target="fig-receive-timestamps"/>.</t>
      <figure anchor="fig-receive-timestamps">
        <name>Receive Timestamps Fields</name>
        <artwork><![CDATA[
Receive Timestamps {
  Timestamp Range Count (i),
  Timestamp Range (..) ...
}
]]></artwork>
      </figure>
      <dl>
        <dt>Timestamp Range Count:</dt>
        <dd>
          <t>A variable-length integer specifying the number of Timestamp Range fields in
the frame.</t>
        </dd>
        <dt>Timestamp Ranges:</dt>
        <dd>
          <t>Ranges of receive timestamps for contiguous packets in descending packet
number order; see <xref target="ts-ranges"/>.</t>
        </dd>
      </dl>
      <section anchor="ts-ranges">
        <name>Timestamp Ranges</name>
        <t>Each Timestamp Range describes a series of contiguous packet receive timestamps
in descending sequential packet number (and descending timestamp) order.
Timestamp Ranges consist of a Delta Largest Acknowledged indicating the
largest packet number in the range, followed by a list of Timestamp Deltas
describing the relative receive timestamps for each contiguous packet in the
Timestamp Range (descending). Packets within a range are in descending
packet number and timestamp order. Ranges are in descending timestamp order
but do not have to be in descending packet number order.</t>
        <t>Each packet in a range <bcp14>MUST</bcp14> be an acknowledged packet,
i.e., the packet number <bcp14>MUST</bcp14> have been included in an ACK Range
in the current or a previously sent ACK, ACK_RECEIVE_TIMESTAMPS, PATH_ACK,
or PATH_ACK_RECEIVE_TIMESTAMPS frame.</t>
        <t>Timestamp Ranges are structured as shown in <xref target="fig-ts-range"/>.</t>
        <figure anchor="fig-ts-range">
          <name>Timestamp Range Format</name>
          <artwork><![CDATA[
Timestamp Range {
  Delta Largest Acknowledged (i),
  Timestamp Delta Count (i),
  Timestamp Delta (i) ...,
}
]]></artwork>
        </figure>
        <t>The fields that form each Timestamp Range are:</t>
        <dl>
          <dt>Delta Largest Acknowledged:</dt>
          <dd>
            <t>A variable-length integer indicating the largest packet number in the
Timestamp Range as a delta to subtract from the Largest Acknowledged in the
ACK frame. For example, 0 indicates the range starts with the
Largest Acknowledged.</t>
          </dd>
          <dt>Timestamp Delta Count:</dt>
          <dd>
            <t>A variable-length integer indicating the number of Timestamp Deltas in the
current Timestamp Range.</t>
            <t>The sum of Timestamp Delta Counts for all Timestamp Ranges in the frame <bcp14>MUST
NOT</bcp14> exceed max_receive_timestamps_per_ack as specified in <xref target="negotiation"/>.</t>
          </dd>
          <dt>Timestamp Deltas:</dt>
          <dd>
            <t>Variable-length integers encoding the receive timestamp for contiguous packets
in the Timestamp Range in descending packet number order as follows:</t>
            <t>For the first Timestamp Delta of the first Timestamp Range in the frame: the
value is the difference between (a) the receive timestamp of the largest
packet in the Timestamp Range (indicated by Gap) and (b) the session
receive_timestamp_basis (see <xref target="ts-basis"/>), decoded as described below.</t>
            <t>For all other Timestamp Deltas: the value is the difference between (a) the
receive timestamp specified by the previous Timestamp Delta and (b) the
receive timestamp of the current packet in the Timestamp Range, decoded as
described below.</t>
            <t>All Timestamp Delta values are decoded by mulitplying the value in the field
by 2 to the power of the receive_timestamps_exponent transport parameter
received by the sender of the frame (see <xref target="negotiation"/>):</t>
          </dd>
        </dl>
        <t>When the receiver receives packets out-of-order, it <bcp14>SHOULD</bcp14> report them with
other packets in a single ACK_RECEIVE_TIMESTAMPS or PATH_ACK_RECEIVE_TIMESTAMPS
frame, starting with the most recently received packet regardless of the packet
number order. See <xref target="examples"/> for examples of reporting timestamps of
out-of-order packets.</t>
      </section>
    </section>
    <section anchor="mp-frame">
      <name>PATH_ACK_RECEIVE_TIMESTAMPS Frame Wire Format</name>
      <t>When both the receive timestamps extension and the multipath extension
<xref target="MULTIPATH"/> are negotiated, an endpoint <bcp14>MAY</bcp14> use the
PATH_ACK_RECEIVE_TIMESTAMPS frame defined below to report receive timestamps
for packets received on a specific path. An endpoint <bcp14>MAY</bcp14> continue to use the
existing PATH_ACK frames as specified in <xref section="4.1" sectionFormat="of" target="MULTIPATH"/> if it
does not have any receive timestamps or does not want to report them.</t>
      <t>Endpoints send PATH_ACK_RECEIVE_TIMESTAMPS frames in 1-RTT packets, with 0
or more receive timestamps following the Ack Ranges and optional ECN Counts.
Similar to the PATH_ACK frame types (0x3e..0x3f), the
PATH_ACK_RECEIVE_TIMESTAMPS frame defines two frame types (0x03178309..0x0317830a) to
indicate whether the frame includes ECN counts.</t>
      <figure anchor="fig-mp-frame">
        <name>PATH_ACK_RECEIVE_TIMESTAMPS Frame Format</name>
        <artwork><![CDATA[
PATH_ACK_RECEIVE_TIMESTAMPS Frame {
  Type (i) = 0x03178309..0x0317830a,
  Path Identifier (i),
  Largest Acknowledged (i),
  ACK Delay (i),
  ACK Range Count (i),
  First ACK Range (i),
  ACK Range (..) ...,
  [ECN Counts (..)],       // included iff Type == 0x0317830a
  Receive Timestamps (..)  // see {{ts-ranges}}
}
]]></artwork>
      </figure>
      <t>Compared to the ACK_RECEIVE_TIMESTAMPS frame defined in <xref target="frame"/>, the
following field is added:</t>
      <dl>
        <dt>Path Identifier:</dt>
        <dd>
          <t>The path ID associated with the packet number space of the 1-RTT packets
which are acknowledged by this frame, as specified in
<xref section="4.1" sectionFormat="of" target="MULTIPATH"/>.</t>
        </dd>
      </dl>
      <t>All other fields are the same as for the ACK_RECEIVE_TIMESTAMPS frame
(<xref target="frame"/>). The Receive Timestamps field follows the same format described
in <xref target="ts-ranges"/>.</t>
      <t>When truncation is necessary to fit within the max_receive_timestamps_per_ack
limit or reduce the size of the frame, the receiver <bcp14>SHOULD</bcp14> retain timestamps
for the most recently received packets and omit timestamps for older packets.</t>
    </section>
    <section anchor="negotiation">
      <name>Extension Negotiation</name>
      <dl>
        <dt>max_receive_timestamps_per_ack (0x4ac07 temporary value for draft use):</dt>
        <dd>
          <t>A variable-length integer indicating that the maximum number of receive
timestamps the sending endpoint would like to receive in an
ACK_RECEIVE_TIMESTAMPS or PATH_ACK_RECEIVE_TIMESTAMPS frame.
If this transport parameter is absent, this extension is not supported, which
is equivalent to a value of 0.</t>
          <t>Each ACK_RECEIVE_TIMESTAMPS or PATH_ACK_RECEIVE_TIMESTAMPS frame sent <bcp14>MUST
NOT</bcp14> contain more than the peer's maximum number of receive timestamps.</t>
          <t>An endpoint <bcp14>MUST NOT</bcp14> send ACK_RECEIVE_TIMESTAMPS or
PATH_ACK_RECEIVE_TIMESTAMPS frames to a peer whose
max_receive_timestamps_per_ack is not present or 0.
A value of 0 does not permit sending these
frames with zero timestamps; it prohibits sending them entirely.</t>
        </dd>
        <dt>receive_timestamps_exponent (0x4ac26 temporary value for draft use):</dt>
        <dd>
          <t>A variable-length integer indicating the exponent to be used when encoding and
decoding timestamp delta fields in ACK_RECEIVE_TIMESTAMPS and
PATH_ACK_RECEIVE_TIMESTAMPS frames sent by the
peer (see <xref target="ts-ranges"/>). If this value is absent, a default value of 0 is
assumed (indicating microsecond precision). Values above 20 are invalid.
If the receive_timestamps_exponent transport parameter is present and
max_receive_timestamps_per_ack is absent or has a value of 0, receive
timestamps are not supported and receive_timestamps_exponent <bcp14>MUST</bcp14> be ignored.</t>
        </dd>
      </dl>
      <section anchor="ts-basis">
        <name>Receive Timestamp Basis</name>
        <t>Endpoints which negotiate the extension need to determine a value,
receive_timestamp_basis, relative to which all receive timestamps for the
session will be reported (see <xref target="ts-ranges"/>).</t>
        <t>The value of receive_timestamp_basis <bcp14>MUST</bcp14> be less than the smallest receive
timestamp reported, and <bcp14>MUST</bcp14> remain constant for the entire duration of the
session. The receive_timestamp_basis is a local value that is not communicated
to the peer.</t>
        <t>Receive timestamps are reported relative to the basis, rather than in absolute
time to avoid requiring clock synchronization between endpoints and to make
the frame more compact.</t>
      </section>
    </section>
    <section anchor="discussion">
      <name>Discussion</name>
      <section anchor="best-effort">
        <name>Best-Effort Behavior</name>
        <t>Receive timestamps are sent on a best-effort basis. Endpoints <bcp14>MUST</bcp14> gracefully
handle scenarios where the receiver does not communicate receive timestamps for
acknowledged packets. Examples of such scenarios are:</t>
        <ul spacing="normal">
          <li>
            <t>A packet containing an ACK_RECEIVE_TIMESTAMPS or PATH_ACK_RECEIVE_TIMESTAMPS
frame is lost.</t>
          </li>
          <li>
            <t>The receiver truncates the number of timestamps sent in order to (a) avoid
sending more than max_receive_timestamps_per_ack (<xref target="negotiation"/>); or (b) fit
the ACK_RECEIVE_TIMESTAMPS or PATH_ACK_RECEIVE_TIMESTAMPS frame into a packet.</t>
          </li>
          <li>
            <t>The receiver is unable to measure the arrival timestamp of a packet with
sufficient accuracy, for example due to a scheduling delay in a userspace
implementation, and omits the packet from the Timestamp Ranges while still
acknowledging it in the ACK Ranges.</t>
          </li>
        </ul>
      </section>
      <section anchor="frame-size">
        <name>Frame Size</name>
        <t>The addition of receive timestamps increases the size of ACK frames. Receivers
<bcp14>SHOULD</bcp14> use receive timestamps to fill available space in packets that would
already be sent, rather than sending additional packets solely to report
timestamps. In such cases, the receiver would send fewer timestamps than the
maximum allowed by max_receive_timestamps_per_ack.</t>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>To illustrate the usage of the Receive Timestamps fields, consider a peer
that sent 14 packets with numbers 87 to 100.</t>
      <t>Assume the receiver receives packets 87 to 91 and 96 to 100 at the following
timestamps relative to the basis:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Packet Number</th>
            <th align="left">Relative Timestamp</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">87</td>
            <td align="left">300</td>
          </tr>
          <tr>
            <td align="left">88</td>
            <td align="left">305</td>
          </tr>
          <tr>
            <td align="left">89</td>
            <td align="left">310</td>
          </tr>
          <tr>
            <td align="left">90</td>
            <td align="left">320</td>
          </tr>
          <tr>
            <td align="left">91</td>
            <td align="left">330</td>
          </tr>
          <tr>
            <td align="left">96</td>
            <td align="left">350</td>
          </tr>
          <tr>
            <td align="left">97</td>
            <td align="left">355</td>
          </tr>
          <tr>
            <td align="left">98</td>
            <td align="left">360</td>
          </tr>
          <tr>
            <td align="left">99</td>
            <td align="left">370</td>
          </tr>
          <tr>
            <td align="left">100</td>
            <td align="left">380</td>
          </tr>
        </tbody>
      </table>
      <t>When it's time to acknowledge these packets, the receiver will send an
ACK frame with two ranges, as follows:</t>
      <artwork><![CDATA[
Largest Acknowledged: 100
...
Timestamp Ranges Count: 2

Timestamp Range 1:
  Delta Largest Acknowledged: 0 // Starting at packet 100
  Timestamp Delta Count: 5
  Timestamps Deltas: 380, 10, 10, 5, 5

Timestamp Range 2:
  Delta Largest Acknowledged: 9 // Starting at packet 91
  Timestamp Delta Count: 5
  Timestamp Deltas: 20, 10, 10, 5, 5
]]></artwork>
      <t>After that assume that the receiver receives packets 92 to 95 out-of-order at
the following timestamps relative to the basis:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Packet Number</th>
            <th align="left">Relative Timestamp</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">92</td>
            <td align="left">390</td>
          </tr>
          <tr>
            <td align="left">93</td>
            <td align="left">392</td>
          </tr>
          <tr>
            <td align="left">94</td>
            <td align="left">394</td>
          </tr>
          <tr>
            <td align="left">95</td>
            <td align="left">395</td>
          </tr>
        </tbody>
      </table>
      <t>The receiver can send a new ACK frame with all of the timestamps,
as follows:</t>
      <artwork><![CDATA[
Largest Acknowledged: 100
...
Timestamp Ranges Count: 3

Timestamp Range 1:
  Delta Largest Acknowledged: 5 // Starting at packet 95
  Timestamp Delta Count: 4
  Timestamps Deltas: 395, 1, 2, 2

Timestamp Range 2:
  Delta Largest Acknowledged: 0 // Starting at packet 100
  Timestamp Delta Count: 5
  Timestamps Deltas: 10, 10, 10, 5, 5

Timestamp Range 3:
  Delta Largest Acknowledged: 9 // Starting at packet 91
  Timestamp Delta Count: 5
  Timestamp Deltas: 20, 10, 10, 5, 5
]]></artwork>
      <t>In this particular scenario, the receiver can also choose to report the first
timestamp range only since the timestamps for the other two ranges have already
been reported.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The security properties described in <xref section="21" sectionFormat="of" target="RFC9000"/> apply, as this
extension only defines frames sent in 1-RTT packets, which are authenticated and
integrity-protected.</t>
      <t>As noted in <xref section="8.1" sectionFormat="of" target="RFC9002"/>, congestion control relies on signals
from unauthenticated entities. Receive timestamps are integrity-protected but
remain under the peer's control and could be crafted to influence the sender's
congestion control or bandwidth estimation.</t>
      <t>A malicious peer could report incorrect timestamps to cause the sender to
over- or under-estimate available bandwidth. Implementations that use receive
timestamps <bcp14>SHOULD</bcp14> perform plausibility checks and bound their impact using
other signals (loss, ECN, RTT); implausible timestamps <bcp14>MAY</bcp14> be ignored.</t>
      <t>Processing and storing timestamps requires additional state. Endpoints <bcp14>SHOULD</bcp14>
bound the resources dedicated to this extension, advertise a
max_receive_timestamps_per_ack they are willing to handle, and be prepared to
truncate or ignore excess timestamps as described in <xref target="best-effort"/>. The size
of ACK_RECEIVE_TIMESTAMPS and PATH_ACK_RECEIVE_TIMESTAMPS frames is bounded by
the peer's advertised limit and the packet size, limiting amplification as
discussed in <xref section="21.9" sectionFormat="of" target="RFC9000"/>.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document uses temporary values for the transport parameters
max_receive_timestamps_per_ack (0x4ac07) and receive_timestamps_exponent
(0x4ac26), and for the frame types ACK_RECEIVE_TIMESTAMPS
(0x03178307..0x03178308) and PATH_ACK_RECEIVE_TIMESTAMPS
(0x03178309..0x0317830a). Prior to publication, these will be replaced with
permanent registrations in the "QUIC Transport Parameters"
(<xref section="22.3" sectionFormat="of" target="RFC9000"/>) and "QUIC Frame Types"
(<xref section="22.4" sectionFormat="of" target="RFC9000"/>) registries.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="MULTIPATH">
          <front>
            <title>Managing multiple paths for a QUIC connection</title>
            <author fullname="Yanmei Liu" initials="Y." surname="Liu">
              <organization>Alibaba Inc.</organization>
            </author>
            <author fullname="Yunfei Ma" initials="Y." surname="Ma">
              <organization>Uber Technologies Inc.</organization>
            </author>
            <author fullname="Quentin De Coninck" initials="Q." surname="De Coninck">
              <organization>University of Mons (UMONS)</organization>
            </author>
            <author fullname="Olivier Bonaventure" initials="O." surname="Bonaventure">
              <organization>UCLouvain and WELRI</organization>
            </author>
            <author fullname="Christian Huitema" initials="C." surname="Huitema">
              <organization>Private Octopus Inc.</organization>
            </author>
            <author fullname="Mirja Kühlewind" initials="M." surname="Kühlewind">
              <organization>Ericsson</organization>
            </author>
            <date day="17" month="March" year="2026"/>
            <abstract>
              <t>   This document specifies a multipath extension for the QUIC protocol
   to enable the simultaneous usage of multiple paths for a single
   connection.  It introduces explicit path identifiers to create,
   delete, and manage multiple paths.  This document does not specify
   address discovery or management, nor how applications using QUIC
   schedule traffic over multiple paths.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-multipath-21"/>
        </reference>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </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="RRBNC">
          <front>
            <title>pathChirp: Efficient Available Bandwidth Estimation for Network Paths</title>
            <author initials="R. V. R. R. B. R. N. J. and L." surname="Cottrel" fullname="Ribeiro, V., Riedi, R., Baraniuk, R., Navratil, J., and L. Cottrel">
              <organization/>
            </author>
            <date year="2003"/>
          </front>
        </reference>
        <reference anchor="RFC9002">
          <front>
            <title>QUIC Loss Detection and Congestion Control</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="I. Swett" initials="I." role="editor" surname="Swett"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes loss detection and congestion control mechanisms for QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9002"/>
          <seriesInfo name="DOI" value="10.17487/RFC9002"/>
        </reference>
        <reference anchor="I-D.ietf-rmcat-gcc">
          <front>
            <title>A Google Congestion Control Algorithm for Real-Time Communication</title>
            <author fullname="Stefan Holmer" initials="S." surname="Holmer">
              <organization>Google</organization>
            </author>
            <author fullname="Henrik Lundin" initials="H." surname="Lundin">
              <organization>Google</organization>
            </author>
            <author fullname="Gaetano Carlucci" initials="G." surname="Carlucci">
              <organization>Politecnico di Bari</organization>
            </author>
            <author fullname="Luca De Cicco" initials="L." surname="De Cicco">
              <organization>Politecnico di Bari</organization>
            </author>
            <author fullname="Saverio Mascolo" initials="S." surname="Mascolo">
              <organization>Politecnico di Bari</organization>
            </author>
            <date day="8" month="July" year="2016"/>
            <abstract>
              <t>   This document describes two methods of congestion control when using
   real-time communications on the World Wide Web (RTCWEB); one delay-
   based and one loss-based.

   It is published as an input document to the RMCAT working group on
   congestion control for media streams.  The mailing list of that
   working group is rmcat@ietf.org.


              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rmcat-gcc-02"/>
        </reference>
      </references>
    </references>
    <?line 469?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The editors would like to thank Connor Smith for writing the initial draft.
The editors would also like to thank Sharad Jaiswal, Ilango Purushothaman, and
Brandon Schlinker for their contributions to the design of this QUIC extension.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
