rfc9221.original | rfc9221.txt | |||
---|---|---|---|---|
QUIC T. Pauly | Internet Engineering Task Force (IETF) T. Pauly | |||
Internet-Draft E. Kinnear | Request for Comments: 9221 E. Kinnear | |||
Intended status: Standards Track Apple Inc. | Category: Standards Track Apple Inc. | |||
Expires: 8 August 2022 D. Schinazi | ISSN: 2070-1721 D. Schinazi | |||
Google LLC | Google LLC | |||
4 February 2022 | March 2022 | |||
An Unreliable Datagram Extension to QUIC | An Unreliable Datagram Extension to QUIC | |||
draft-ietf-quic-datagram-10 | ||||
Abstract | Abstract | |||
This document defines an extension to the QUIC transport protocol to | This document defines an extension to the QUIC transport protocol to | |||
add support for sending and receiving unreliable datagrams over a | add support for sending and receiving unreliable datagrams over a | |||
QUIC connection. | QUIC 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 (mailto: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/datagram. | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
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 | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 8 August 2022. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9221. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2022 IETF Trust and the persons identified as the | Copyright (c) 2022 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction | |||
1.1. Specification of Requirements . . . . . . . . . . . . . . 3 | 1.1. Specification of Requirements | |||
2. Motivation . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Motivation | |||
3. Transport Parameter . . . . . . . . . . . . . . . . . . . . . 4 | 3. Transport Parameter | |||
4. Datagram Frame Types . . . . . . . . . . . . . . . . . . . . 5 | 4. Datagram Frame Types | |||
5. Behavior and Usage . . . . . . . . . . . . . . . . . . . . . 6 | 5. Behavior and Usage | |||
5.1. Multiplexing Datagrams . . . . . . . . . . . . . . . . . 6 | 5.1. Multiplexing Datagrams | |||
5.2. Acknowledgement Handling . . . . . . . . . . . . . . . . 7 | 5.2. Acknowledgement Handling | |||
5.3. Flow Control . . . . . . . . . . . . . . . . . . . . . . 7 | 5.3. Flow Control | |||
5.4. Congestion Control . . . . . . . . . . . . . . . . . . . 8 | 5.4. Congestion Control | |||
6. Security Considerations . . . . . . . . . . . . . . . . . . . 8 | 6. Security Considerations | |||
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 8 | 7. IANA Considerations | |||
7.1. QUIC Transport Parameter . . . . . . . . . . . . . . . . 8 | 7.1. QUIC Transport Parameter | |||
7.2. QUIC Frame Types . . . . . . . . . . . . . . . . . . . . 9 | 7.2. QUIC Frame Types | |||
8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 9 | 8. References | |||
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 8.1. Normative References | |||
9.1. Normative References . . . . . . . . . . . . . . . . . . 9 | 8.2. Informative References | |||
9.2. Informative References . . . . . . . . . . . . . . . . . 10 | Acknowledgments | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 10 | Authors' Addresses | |||
1. Introduction | 1. Introduction | |||
The QUIC Transport Protocol [RFC9000] provides a secure, multiplexed | The QUIC transport protocol [RFC9000] provides a secure, multiplexed | |||
connection for transmitting reliable streams of application data. | connection for transmitting reliable streams of application data. | |||
QUIC uses various frame types to transmit data within packets, and | QUIC uses various frame types to transmit data within packets, and | |||
each frame type defines whether the data it contains will be | each frame type defines whether the data it contains will be | |||
retransmitted. Streams of reliable application data are sent using | retransmitted. Streams of reliable application data are sent using | |||
STREAM frames. | STREAM frames. | |||
Some applications, particularly those that need to transmit real-time | Some applications, particularly those that need to transmit real-time | |||
data, prefer to transmit data unreliably. In the past, these | data, prefer to transmit data unreliably. In the past, these | |||
applications have built directly upon UDP [RFC0768] as a transport | applications have built directly upon UDP [RFC0768] as a transport | |||
and have often added security with DTLS [RFC6347]. Extending QUIC to | and have often added security with DTLS [RFC6347]. Extending QUIC to | |||
support transmitting unreliable application data provides another | support transmitting unreliable application data provides another | |||
option for secure datagrams with the added benefit of sharing the | option for secure datagrams with the added benefit of sharing the | |||
cryptographic and authentication context used for reliable streams. | cryptographic and authentication context used for reliable streams. | |||
This document defines two new DATAGRAM QUIC frame types which carry | This document defines two new DATAGRAM QUIC frame types that carry | |||
application data without requiring retransmissions. | application data without requiring retransmissions. | |||
1.1. Specification of Requirements | 1.1. Specification of Requirements | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
2. Motivation | 2. Motivation | |||
Transmitting unreliable data over QUIC provides benefits over | Transmitting unreliable data over QUIC provides benefits over | |||
existing solutions: | existing solutions: | |||
* Applications that want to use both a reliable stream and an | * Applications that want to use both a reliable stream and an | |||
unreliable flow to the same peer can benefit by sharing a single | unreliable flow to the same peer can benefit by sharing a single | |||
handshake and authentication context between a reliable QUIC | handshake and authentication context between a reliable QUIC | |||
skipping to change at page 4, line 8 ¶ | skipping to change at line 132 ¶ | |||
Internet-layer tunneling protocols generally require a reliable and | Internet-layer tunneling protocols generally require a reliable and | |||
authenticated handshake followed by unreliable secure transmission of | authenticated handshake followed by unreliable secure transmission of | |||
IP packets. This can, for example, require a TLS connection for the | IP packets. This can, for example, require a TLS connection for the | |||
control data and DTLS for tunneling IP packets. A single QUIC | control data and DTLS for tunneling IP packets. A single QUIC | |||
connection could support both parts with the use of unreliable | connection could support both parts with the use of unreliable | |||
datagrams in addition to reliable streams. | datagrams in addition to reliable streams. | |||
3. Transport Parameter | 3. Transport Parameter | |||
Support for receiving the DATAGRAM frame types is advertised by means | Support for receiving the DATAGRAM frame types is advertised by means | |||
of a QUIC Transport Parameter (name=max_datagram_frame_size, | of a QUIC transport parameter (name=max_datagram_frame_size, | |||
value=0x20). The max_datagram_frame_size transport parameter is an | value=0x20). The max_datagram_frame_size transport parameter is an | |||
integer value (represented as a variable-length integer) that | integer value (represented as a variable-length integer) that | |||
represents the maximum size of a DATAGRAM frame (including the frame | represents the maximum size of a DATAGRAM frame (including the frame | |||
type, length, and payload) the endpoint is willing to receive, in | type, length, and payload) the endpoint is willing to receive, in | |||
bytes. | bytes. | |||
The default for this parameter is 0, which indicates that the | The default for this parameter is 0, which indicates that the | |||
endpoint does not support DATAGRAM frames. A value greater than 0 | endpoint does not support DATAGRAM frames. A value greater than 0 | |||
indicates that the endpoint supports the DATAGRAM frame types and is | indicates that the endpoint supports the DATAGRAM frame types and is | |||
willing to receive such frames on this connection. | willing to receive such frames on this connection. | |||
skipping to change at page 6, line 32 ¶ | skipping to change at line 241 ¶ | |||
Note that while the max_datagram_frame_size transport parameter | Note that while the max_datagram_frame_size transport parameter | |||
places a limit on the maximum size of DATAGRAM frames, that limit can | places a limit on the maximum size of DATAGRAM frames, that limit can | |||
be further reduced by the max_udp_payload_size transport parameter | be further reduced by the max_udp_payload_size transport parameter | |||
and the Maximum Transmission Unit (MTU) of the path between | and the Maximum Transmission Unit (MTU) of the path between | |||
endpoints. DATAGRAM frames cannot be fragmented; therefore, | endpoints. DATAGRAM frames cannot be fragmented; therefore, | |||
application protocols need to handle cases where the maximum datagram | application protocols need to handle cases where the maximum datagram | |||
size is limited by other factors. | size is limited by other factors. | |||
5.1. Multiplexing Datagrams | 5.1. Multiplexing Datagrams | |||
DATAGRAM frames belong to a QUIC connection as a whole, and are not | DATAGRAM frames belong to a QUIC connection as a whole and are not | |||
associated with any stream ID at the QUIC layer. However, it is | associated with any stream ID at the QUIC layer. However, it is | |||
expected that applications will want to differentiate between | expected that applications will want to differentiate between | |||
specific DATAGRAM frames by using identifiers, such as for logical | specific DATAGRAM frames by using identifiers, such as for logical | |||
flows of datagrams or to distinguish between different kinds of | flows of datagrams or to distinguish between different kinds of | |||
datagrams. | datagrams. | |||
Identifiers used to multiplex different kinds of datagrams, or flows | Defining the identifiers used to multiplex different kinds of | |||
of datagrams, are the responsibility of the application protocol | datagrams or flows of datagrams is the responsibility of the | |||
running over QUIC to define. The application defines the semantics | application protocol running over QUIC. The application defines the | |||
of the Datagram Data field and how it is parsed. | semantics of the Datagram Data field and how it is parsed. | |||
If the application needs to support the coexistence of multiple flows | If the application needs to support the coexistence of multiple flows | |||
of datagrams, one recommended pattern is to use a variable-length | of datagrams, one recommended pattern is to use a variable-length | |||
integer at the beginning of the Datagram Data field. This is a | integer at the beginning of the Datagram Data field. This is a | |||
simple approach that allows a large number of flows to be encoded | simple approach that allows a large number of flows to be encoded | |||
using minimal space. | using minimal space. | |||
QUIC implementations SHOULD present an API to applications to assign | QUIC implementations SHOULD present an API to applications to assign | |||
relative priorities to DATAGRAM frames with respect to each other and | relative priorities to DATAGRAM frames with respect to each other and | |||
to QUIC streams. | to QUIC streams. | |||
skipping to change at page 7, line 30 ¶ | skipping to change at line 288 ¶ | |||
[RFC9002]. | [RFC9002]. | |||
If a sender detects that a packet containing a specific DATAGRAM | If a sender detects that a packet containing a specific DATAGRAM | |||
frame might have been lost, the implementation MAY notify the | frame might have been lost, the implementation MAY notify the | |||
application that it believes the datagram was lost. | application that it believes the datagram was lost. | |||
Similarly, if a packet containing a DATAGRAM frame is acknowledged, | Similarly, if a packet containing a DATAGRAM frame is acknowledged, | |||
the implementation MAY notify the sender application that the | the implementation MAY notify the sender application that the | |||
datagram was successfully transmitted and received. Due to | datagram was successfully transmitted and received. Due to | |||
reordering, this can include a DATAGRAM frame that was thought to be | reordering, this can include a DATAGRAM frame that was thought to be | |||
lost, but which at a later point was received and acknowledged. It | lost but, at a later point, was received and acknowledged. It is | |||
is important to note that acknowledgement of a DATAGRAM frame only | important to note that acknowledgement of a DATAGRAM frame only | |||
indicates that the transport-layer handling on the receiver processed | indicates that the transport-layer handling on the receiver processed | |||
the frame, and does not guarantee that the application on the | the frame and does not guarantee that the application on the receiver | |||
receiver successfully processed the data. Thus, this signal cannot | successfully processed the data. Thus, this signal cannot replace | |||
replace application-layer signals that indicate successful | application-layer signals that indicate successful processing. | |||
processing. | ||||
5.3. Flow Control | 5.3. Flow Control | |||
DATAGRAM frames do not provide any explicit flow control signaling, | DATAGRAM frames do not provide any explicit flow control signaling | |||
and do not contribute to any per-flow or connection-wide data limit. | and do not contribute to any per-flow or connection-wide data limit. | |||
The risk associated with not providing flow control for DATAGRAM | The risk associated with not providing flow control for DATAGRAM | |||
frames is that a receiver might not be able to commit the necessary | frames is that a receiver might not be able to commit the necessary | |||
resources to process the frames. For example, it might not be able | resources to process the frames. For example, it might not be able | |||
to store the frame contents in memory. However, since DATAGRAM | to store the frame contents in memory. However, since DATAGRAM | |||
frames are inherently unreliable, they MAY be dropped by the receiver | frames are inherently unreliable, they MAY be dropped by the receiver | |||
if the receiver cannot process them. | if the receiver cannot process them. | |||
5.4. Congestion Control | 5.4. Congestion Control | |||
skipping to change at page 8, line 42 ¶ | skipping to change at line 344 ¶ | |||
The use of DATAGRAM frames might be detectable by an adversary on | The use of DATAGRAM frames might be detectable by an adversary on | |||
path that is capable of dropping packets. Since DATAGRAM frames do | path that is capable of dropping packets. Since DATAGRAM frames do | |||
not use transport-level retransmission, connections that use DATAGRAM | not use transport-level retransmission, connections that use DATAGRAM | |||
frames might be distinguished from other connections due to their | frames might be distinguished from other connections due to their | |||
different response to packet loss. | different response to packet loss. | |||
7. IANA Considerations | 7. IANA Considerations | |||
7.1. QUIC Transport Parameter | 7.1. QUIC Transport Parameter | |||
This document registers a new value in the QUIC Transport Parameter | This document registers a new value in the "QUIC Transport | |||
Registry maintained at https://www.iana.org/assignments/quic/ | Parameters" registry maintained at <https://www.iana.org/assignments/ | |||
quic.xhtml#quic-transport. | quic>. | |||
Value: 0x20 | Value: 0x20 | |||
Parameter Name: max_datagram_frame_size | Parameter Name: max_datagram_frame_size | |||
Status: permanent | Status: permanent | |||
Specification: RFC 9221 | ||||
Specification: This document | ||||
7.2. QUIC Frame Types | 7.2. QUIC Frame Types | |||
This document registers two new values in the QUIC Frame Type | This document registers two new values in the "QUIC Frame Types" | |||
registry maintained at https://www.iana.org/assignments/quic/ | registry maintained at <https://www.iana.org/assignments/quic>. | |||
quic.xhtml#quic-frame-types. | ||||
Value: 0x30 and 0x31 (if this document is approved) | ||||
Value: 0x30-0x31 | ||||
Frame Name: DATAGRAM | Frame Name: DATAGRAM | |||
Status: permanent | Status: permanent | |||
Specification: RFC 9221 | ||||
Specification: This document | 8. References | |||
8. Acknowledgments | ||||
The original proposal for this work came from Ian Swett. | ||||
This document had reviews and input from many contributors in the | ||||
IETF QUIC Working Group, with substantive input from Nick Banks, | ||||
Lucas Pardue, Rui Paulo, Martin Thomson, Victor Vasiliev, and Chris | ||||
Wood. | ||||
9. References | ||||
9.1. Normative References | 8.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/rfc/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/rfc/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
[RFC9000] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | [RFC9000] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | |||
Multiplexed and Secure Transport", RFC 9000, | Multiplexed and Secure Transport", RFC 9000, | |||
DOI 10.17487/RFC9000, May 2021, | DOI 10.17487/RFC9000, May 2021, | |||
<https://www.rfc-editor.org/rfc/rfc9000>. | <https://www.rfc-editor.org/info/rfc9000>. | |||
[RFC9001] Thomson, M., Ed. and S. Turner, Ed., "Using TLS to Secure | [RFC9001] Thomson, M., Ed. and S. Turner, Ed., "Using TLS to Secure | |||
QUIC", RFC 9001, DOI 10.17487/RFC9001, May 2021, | QUIC", RFC 9001, DOI 10.17487/RFC9001, May 2021, | |||
<https://www.rfc-editor.org/rfc/rfc9001>. | <https://www.rfc-editor.org/info/rfc9001>. | |||
[RFC9002] Iyengar, J., Ed. and I. Swett, Ed., "QUIC Loss Detection | [RFC9002] Iyengar, J., Ed. and I. Swett, Ed., "QUIC Loss Detection | |||
and Congestion Control", RFC 9002, DOI 10.17487/RFC9002, | and Congestion Control", RFC 9002, DOI 10.17487/RFC9002, | |||
May 2021, <https://www.rfc-editor.org/rfc/rfc9002>. | May 2021, <https://www.rfc-editor.org/info/rfc9002>. | |||
9.2. Informative References | 8.2. Informative References | |||
[RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, | [RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, | |||
DOI 10.17487/RFC0768, August 1980, | DOI 10.17487/RFC0768, August 1980, | |||
<https://www.rfc-editor.org/rfc/rfc768>. | <https://www.rfc-editor.org/info/rfc768>. | |||
[RFC6347] Rescorla, E. and N. Modadugu, "Datagram Transport Layer | [RFC6347] Rescorla, E. and N. Modadugu, "Datagram Transport Layer | |||
Security Version 1.2", RFC 6347, DOI 10.17487/RFC6347, | Security Version 1.2", RFC 6347, DOI 10.17487/RFC6347, | |||
January 2012, <https://www.rfc-editor.org/rfc/rfc6347>. | January 2012, <https://www.rfc-editor.org/info/rfc6347>. | |||
Acknowledgments | ||||
The original proposal for this work came from Ian Swett. | ||||
This document had reviews and input from many contributors in the | ||||
IETF QUIC Working Group, with substantive input from Nick Banks, | ||||
Lucas Pardue, Rui Paulo, Martin Thomson, Victor Vasiliev, and Chris | ||||
Wood. | ||||
Authors' Addresses | Authors' Addresses | |||
Tommy Pauly | Tommy Pauly | |||
Apple Inc. | Apple Inc. | |||
One Apple Park Way | One Apple Park Way | |||
Cupertino, California 95014, | Cupertino, CA 95014 | |||
United States of America | United States of America | |||
Email: tpauly@apple.com | Email: tpauly@apple.com | |||
Eric Kinnear | Eric Kinnear | |||
Apple Inc. | Apple Inc. | |||
One Apple Park Way | One Apple Park Way | |||
Cupertino, California 95014, | Cupertino, CA 95014 | |||
United States of America | United States of America | |||
Email: ekinnear@apple.com | Email: ekinnear@apple.com | |||
David Schinazi | David Schinazi | |||
Google LLC | Google LLC | |||
1600 Amphitheatre Parkway | 1600 Amphitheatre Parkway | |||
Mountain View, California 94043, | Mountain View, CA 94043 | |||
United States of America | United States of America | |||
Email: dschinazi.ietf@gmail.com | Email: dschinazi.ietf@gmail.com | |||
End of changes. 42 change blocks. | ||||
112 lines changed or deleted | 87 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |