<?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.30 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-quic-receive-ts-01" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.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-01"/>
    <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="March" day="02"/>
    <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 (0x38..0x39) 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) = 0x38..0x39,
  Largest Acknowledged (i),
  ACK Delay (i),
  ACK Range Count (i),
  First ACK Range (i),
  ACK Range (..) ...,
  [ECN Counts (..)],       // included iff Type == 0x39
  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 (0x3a..0x3b) 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) = 0x3a..0x3b,
  Path Identifier (i),
  Largest Acknowledged (i),
  ACK Delay (i),
  ACK Range Count (i),
  First ACK Range (i),
  ACK Range (..) ...,
  [ECN Counts (..)],       // included iff Type == 0x3b
  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 (0xff0a002 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.</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>
        </dd>
        <dt>receive_timestamps_exponent (0xff0a003 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.</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-behavior">
        <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>TODO Security</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</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="20" month="February" 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-20"/>
        </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 431?>

<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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
cGAaa/r5lcUHyIp/RBYaNiPxf66jzHyeOwAA

-->

</rfc>
