Internet-Draft | QUIC Receive Timestamps | March 2025 |
Smith, et al. | Expires 4 September 2025 | [Page] |
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.¶
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/wcsmith/draft-quic-receive-ts.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 4 September 2025.¶
Copyright (c) 2025 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
The QUIC Transport Protocol [RFC9000] provides a secure, multiplexed connection for transmitting reliable streams of application data.¶
This document defines an extension to the QUIC transport protocol which supports reporting multiple packet receive timestamps using a new ACK_EXTENDED frame type.¶
QUIC congestion control ([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.¶
Numerous existing algorithms and techniques leverage receive receive timestamps to improve transport performance. Examples include:¶
The WebRTC congestion control algorithm described in [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.¶
The pathChirp ([RRBNC]) technique estimates available bandwidth by measuring inter-arrival time of multiple packets.¶
Notably, these techniques require receive timestamps for more than one packet per round-trip in order to best measure the network.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
The QUIC transport protocol defines two different frame types for acknowledgements Section 19.3 of [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.¶
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.¶
Endpoints send ACK_EXTENDED (type=0xB1 temporary value) frames in place of--and in the same manner as--regular ACK frames as described in Section 13.2 of [RFC9000]. ACK_EXTENDED frames contain additional fields to enable reporting two optional sets of fields: - ECN Counts (from Section 19.3 of [RFC9000]) - Receive Timestamps (defined in this document)¶
ACK_EXTENDED frames are formatted as shown in Figure 1.¶
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 (..)] }
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 Section 19.3 of [RFC9000].¶
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¶
When Extended Ack Features has bit 0 set, the frame will include ECN Counts as defined in Section 19.3.2 of [RFC9000].¶
When Extended Ack Feature has bit 1 set, the frame will include the following additional fields for the receive timestmaps:¶
A variable-length integer specifying the number of Timestamp Range fields in the frame.¶
Ranges of receive timestamps for contiguous packets in descending packet number order; see Section 5.1.¶
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).¶
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.¶
Timestamp Ranges are structured as shown in Figure 2.¶
Timestamp Range { Gap (i), Timestamp Delta Count (i), Timestamp Delta (i) ..., }
The fields that form each Timestamp Range are:¶
A variable-length integer indicating the largest packet number in the Timestamp Range as follows:¶
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.¶
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.¶
A variable-length integer indicating the number of Timestamp Deltas in the current Timestamp Range.¶
The sum of Timestamp Delta Counts for all Timestamp Ranges in the frame MUST NOT exceed max_receive_timestamps_per_ack as specified in Section 6.¶
Variable-length integers encoding the receive timestamp for contiguous packets in the Timestamp Range in descending packet number order as follows:¶
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 Section 6.1), decoded as described below.¶
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.¶
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 Section 6):¶
The use of the ACK_EXTENDED frame is negotiated using the following three transport parameters (Section 7.2 of [RFC9000]):¶
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¶
Upon receiving this parameter, the receiving peer SHOULD 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 MAY 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 MAY send regular ACK and ACK_ECN frames, in which case the endpoint MUST still support processing regular ACK frames as defined by Section 19.3 of [RFC9000].¶
ACK_EXTENDED frames written by the peer receiving this parameter MUST 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.¶
The receiving peer SHOULD NOT send ACK_EXTENDED frames with 0 features.¶
A variable-length integer indicating that the maximum number of receive timestamps the sending endpoint would like to receive in an ACK_EXTENDED frame.¶
The sending endpoint MUST 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 MUST ignore this transport parameter.¶
Each ACK_EXTENDED frame sent MUST NOT contain more than the specified maximum number of receive timestamps, but MAY contain fewer or none.¶
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 Section 5.1). If this value is absent, a default value of 0 is assumed (indicating microsecond precision). Values above 20 are invalid.¶
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 Section 5.1).¶
The value of receive_timestamp_basis MUST be less than the smallest receive timestamp reported, and MUST remain constant for the entire duration of the session.¶
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.¶
Receive timestamps are sent on a best-effort basis and endpoints MUST gracefully handle scenarios where receive timestamp information for sent packets is not received. Examples of such scenarios are:¶
TODO Security¶
This document has no IANA actions.¶
TODO acknowledge.¶