<?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.24 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-smith-quic-receive-ts-01" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.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-01"/>
    <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">
      <organization>Google LLC</organization>
      <address>
        <email>ianswett@google.com</email>
      </address>
    </author>
    <author initials="J." surname="Beshay" fullname="Joseph Beshay">
      <organization>Meta Platforms, Inc.</organization>
      <address>
        <email>jbeshay@meta.com</email>
      </address>
    </author>
    <author initials="S." surname="Jaiswal" fullname="Sharad Jaiswal">
      <organization>Meta Platforms, Inc.</organization>
      <address>
        <email>sj77@meta.com</email>
      </address>
    </author>
    <author initials="I." surname="Purushothaman" fullname="Ilango Purushothaman">
      <organization>Meta Platforms, Inc.</organization>
      <address>
        <email>ipurush@meta.com</email>
      </address>
    </author>
    <author initials="B." surname="Schlinker" fullname="Brandon Schlinker">
      <organization>Meta Platforms, Inc.</organization>
      <address>
        <email>bschlinker@meta.com</email>
      </address>
    </author>
    <date year="2025" month="March" day="03"/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 62?>

<t>This document defines an extension to the QUIC transport protocol which supports
reporting multiple packet receive timestamps using a new ACK_EXTENDED
frame type which can carry multiple optional fields.</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 69?>

<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 using a new ACK_EXTENDED
frame type.</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>
    </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="extensibility">
      <name>Enabling Extensibility in the ACK frame</name>
      <t>The QUIC transport protocol defines two different frame types for acknowledgements
<xref section="19.3" sectionFormat="of" target="RFC9000"/>. The endpoint sending acknowledgements
decides which type to use depending on whether it wants to report ECN counts.
This approach works well with one set of optional fields, but grows exponentially
with more sets of optional fields.</t>
      <t>This document defines a new set of optional fields to report receive timestamps.
Using a new frame type for each variant of the ACK frame would require adding 2 new
frame types, for a total of 4. Instead, this document defines one new frame type
(ACK_EXTENDED), that can carry multiple optional sections, reducing
the number of new frame types from 2 to 1, and avoids futre extensions causing
an exponential growth in frame types.</t>
    </section>
    <section anchor="frame">
      <name>ACK_EXTENDED Frame</name>
      <t>Endpoints send ACK_EXTENDED (type=0xB1 temporary value) frames in place of--and
in the
same manner as--regular ACK frames as described in <xref section="13.2" sectionFormat="of" target="RFC9000"/>.
ACK_EXTENDED frames contain additional fields to enable reporting two optional
sets of fields:
- ECN Counts (from <xref section="19.3" sectionFormat="of" target="RFC9000"/>)
- Receive Timestamps (defined in this document)</t>
      <t>ACK_EXTENDED frames are formatted as shown in <xref target="fig-frame"/>.</t>
      <figure anchor="fig-frame">
        <name>ACK_EXTENDED Frame Format</name>
        <artwork><![CDATA[
ACK_EXTENDED Frame {
  Type (i) = 0xB1
  // Fields of the existing ACK (type=0x02) frame:
  Largest Acknowledged (i),
  ACK Delay (i),
  ACK Range Count (i),
  First ACK Range (i),
  ACK Range (..) ...,
  Extended Ack Features (i),
  // Optional ECN counts (if bit 0 is set in Features)
  [ECN Counts (..)],
  // Optional Receive Timestamps (if bit 1 is set in Features)
  [Receive Timestamps (..)]
}
]]></artwork>
      </figure>
      <t>The fields Largest Acknowledged, ACK Delay, ACK Range Count, First ACK Range,
and ACK Range are the same as for ACK (type=0x02) frames specified in <xref section="19.3" sectionFormat="of" target="RFC9000"/>.</t>
      <t>Extended Ack Features: A variable-length integer whose bit-wise
value indicates which optional fields are included in the ACK. This document
defines two sets of fields corresponding to the two least significant bits of
the value:
- Bit 0 indicates whether ECN count fields are included in the frame
- Bit 1 indicates whether Receive Timestamps are included in the frame</t>
      <t>When Extended Ack Features has bit 0 set, the frame will include ECN Counts as
defined in <xref section="19.3.2" sectionFormat="of" target="RFC9000"/>.</t>
      <t>When Extended Ack Feature has bit 1 set, the frame will include the following
additional fields for the receive timestmaps:</t>
      <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 Gap 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).</t>
        <t>Note that reporting receive timestamps for packets received out of order is not
supported. Specifically: for any packet number P for which a receive timestamp T
is reported, all reports for packet numbers less than P must have timestamps
less than or equal to T; and all reports for packet numbers greater than P must
have timestamps greater than or equal to T.</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 {
  Gap (i),
  Timestamp Delta Count (i),
  Timestamp Delta (i) ...,
}
]]></artwork>
        </figure>
        <t>The fields that form each Timestamp Range are:</t>
        <dl>
          <dt>Gap:</dt>
          <dd>
            <t>A variable-length integer indicating the largest packet number in the
Timestamp Range as follows:</t>
            <t>For the first Timestamp Range: Gap is the difference between (a) the Largest
Acknowledged packet number in the frame and (b) the largest packet in the
current (first) Timestamp Range.</t>
            <t>For subsequent Timestamp Ranges: Gap is the difference between (a) the packet
number two lower than the smallest packet number in the previous Timestamp
Range and (b) the largest packet in the current Timestamp Range.</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_EXTENDED frame (see
<xref target="negotiation"/>):</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="negotiation">
      <name>Extension Negotiation</name>
      <t>The use of the ACK_EXTENDED frame is negotiated using the following
three transport parameters (<xref section="7.2" sectionFormat="of" target="RFC9000"/>):</t>
      <dl>
        <dt>extended_ack_features (0xff0a004 temporary value for draft use):</dt>
        <dd>
          <t>A variable-length integer indicating the sending endpoint would like to
receive ACK_EXTENDED frames with the specified set of features. The bit-wise
value of the integer indicates the features the endpoint can accept in the
ACK_EXTENDED frame. The value of this paramter is interpreted in the same way
as the Extended Ack Features field in the ACK_EXTENDED frame, i.e.,
  - Bit 0 indicates whether ECN count fields are included in the frame
  - Bit 1 indicates whether Receive Timestamps are included in the frame</t>
          <t>Upon receiving this parameter, the receiving peer <bcp14>SHOULD</bcp14> send ACK_EXTENDED
frames with the features supported by the endpoint which sent the parameter,
and set the Extended Ack Features field accordingly. The receiving peer <bcp14>MAY</bcp14>
choose to send ACK_EXTENDED frames with less features (and set the equivalent
Extended Ack Features field value) if the requested features are not available
or there is no data to send (e.g. if no timing information is available for
receive timestamps). The receiving peer <bcp14>MAY</bcp14> send regular ACK and ACK_ECN
frames, in which case the endpoint <bcp14>MUST</bcp14> still support processing regular ACK
frames as defined by <xref section="19.3" sectionFormat="of" target="RFC9000"/>.</t>
          <t>ACK_EXTENDED frames written by the peer receiving this parameter <bcp14>MUST</bcp14> not have
bits set in the Extended Ack Features that were not set by the sending
endpoint
in the transport parameter. An endpoint receiving an ACK_EXTENDED frame with
features it did not include in the transport parameter should terminate the
connection with a PROTOCOL_VIOLATION violation error.</t>
          <t>The receiving peer <bcp14>SHOULD NOT</bcp14> send ACK_EXTENDED frames with 0 features.</t>
        </dd>
        <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_EXTENDED
frame.</t>
          <t>The sending endpoint <bcp14>MUST</bcp14> sent this transport parameter if sends the
extended_ack_features transport parameter with bit 1 set in its value. A peer
that receives this transport parameter but not an extended_ack_features
transport paramter with bit 1 set <bcp14>MUST</bcp14> ignore this transport parameter.</t>
          <t>Each ACK_EXTENDED frame sent <bcp14>MUST NOT</bcp14> contain more than the
specified maximum number of receive timestamps, but <bcp14>MAY</bcp14> contain fewer or none.</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_EXTENDED 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 send ACK_EXTENDED frames must 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.</t>
        <t>TODO: Discuss (here or below) why receive timestamps are reported relative to
the basis, rather than in absolute time to avoid clock synchronization between
endpoints and to make the field 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 and endpoints <bcp14>MUST</bcp14> gracefully
handle scenarios where receive timestamp information for sent packets is not
received. Examples of such scenarios are:</t>
        <ul spacing="normal">
          <li>
            <t>The packet containing the ACK_EXTENDED 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="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="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 365?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
