<?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-ietf-quic-receive-ts-00" 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-00"/>
    <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="2025" month="November" day="03"/>
    <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 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="MULTIPATH"/>.  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="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 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="20" month="October" 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.  It proposes a standard way to create, delete, and manage
   paths using identifiers.  It 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-17"/>
        </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 367?>

<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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
Vvxqa+hkB+LfeTs63zQwAAA=

-->

</rfc>
