<?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.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-smith-quic-receive-ts-03" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.0 -->
  <front>
    <title abbrev="QUIC Receive Timestamps">QUIC Extended Acknowledgement for Reporting Packet Receive Timestamps</title>
    <seriesInfo name="Internet-Draft" value="draft-smith-quic-receive-ts-03"/>
    <author initials="C." surname="Smith" fullname="Connor Smith">
      <organization>NVIDIA</organization>
      <address>
        <email>connorsmith.ietf@gmail.com</email>
      </address>
    </author>
    <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>
    <author initials="S." surname="Jaiswal" fullname="Sharad Jaiswal" role="editor">
      <organization>Meta Platforms, Inc.</organization>
      <address>
        <email>sj77@meta.com</email>
      </address>
    </author>
    <date year="2025" month="July" day="21"/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 57?>

<t>This document defines an extension to the QUIC transport protocol which supports
reporting multiple packet receive timestamps for post-handshake packets.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    QUIC Working Group mailing list (quic@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/quic/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/wcsmith/draft-quic-receive-ts"/>.</t>
    </note>
  </front>
  <middle>
    <?line 63?>

<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 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>ACK Frame Wire Format</name>
      <t>Endpoints send ACK frames in 1-RTT packets as they otherwise would, with 0
or more receive timestamps following the Ack Ranges and optional ECN Counts.
Receive timestamps <bcp14>MUST NOT</bcp14> be sent in Initial or Handshake packets, because
the peer would not know to use the extended wire format. ACK frames are never
sent in 0-RTT packets, so there is no change to 0-RTT.</t>
      <t>Once negotiated, the ACK format is identical to RFC9000, but with an
additional section for receive timestamps at the end:</t>
      <figure anchor="fig-frame">
        <name>ACK Frame Format</name>
        <artwork><![CDATA[
ACK Frame {
  Type (i) = 0x02..0x03,
  Largest Acknowledged (i),
  ACK Delay (i),
  ACK Range Count (i),
  First ACK Range (i),
  ACK Range (..) ...,
  [ECN Counts (..)],
  // Timestamp Extension, see {{ts-ranges}}
  Receive Timestamps (..)
}
]]></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>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 ACK 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 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="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 frame.</t>
          <t>Each ACK 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 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="multiple-extensions-to-the-ack-frame">
        <name>Multiple Extensions to the ACK Frame</name>
        <t>Multiple extensions can alter the ACK Frame or define new codepoints for
variations on the ACK frame, such as <xref target="MP-QUIC"/>.  Each extension defines
how it co-exists with past extensions.  If multiple extensions add more
information to the ACK Frame, as this receive timestamp extension does,
the additional extensions are appended at the end of the ACK Frame in the
order of their RFC number, unless otherwise specified.</t>
      </section>
      <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 frame is lost.</t>
          </li>
          <li>
            <t>The sender 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 frame into a packet.</t>
          </li>
        </ul>
      </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="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="MP-QUIC">
          <front>
            <title>Multipath Extension for QUIC</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 Tessares</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="7" month="July" year="2025"/>
            <abstract>
              <t>   This document specifies a multipath extension for the QUIC protocol
   to enable the simultaneous usage of multiple paths for a single
   connection.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Discussion of this document takes place on the QUIC Working Group
   mailing list (quic@ietf.org), which is archived at
   https://mailarchive.ietf.org/arch/browse/quic/.

   Source for this draft and an issue tracker can be found at
   https://github.com/quicwg/multipath.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-multipath-15"/>
        </reference>
        <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 379?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The editors would like to thank 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>
