idnits 2.17.1 draft-schinazi-masque-connect-udp-ecn-00.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- No issues found here. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year -- The document date (12 December 2020) is 1230 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) == Outdated reference: A later version (-15) exists of draft-ietf-masque-connect-udp-01 ** Downref: Normative reference to an Experimental draft: draft-schinazi-quic-h3-datagram (ref. 'H3DGRAM') ** Obsolete normative reference: RFC 7230 (Obsoleted by RFC 9110, RFC 9112) Summary: 2 errors (**), 0 flaws (~~), 2 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group D. Schinazi 3 Internet-Draft Google LLC 4 Intended status: Standards Track 12 December 2020 5 Expires: 15 June 2021 7 An ECN Extension to CONNECT-UDP 8 draft-schinazi-masque-connect-udp-ecn-00 10 Abstract 12 The CONNECT-UDP method allows proxying UDP packets over HTTP. This 13 document describes an extension to CONNECT-UDP that allows conveying 14 ECN information on proxied UDP packets. 16 Discussion of this work is encouraged to happen on the MASQUE IETF 17 mailing list (masque@ietf.org (mailto:masque@ietf.org)) or on the 18 GitHub repository which contains the draft: 19 https://github.com/DavidSchinazi/draft-connect-udp-ecn. 21 Discussion Venues 23 This note is to be removed before publishing as an RFC. 25 Source for this draft and an issue tracker can be found at 26 https://github.com/DavidSchinazi/draft-connect-udp-ecn. 28 Status of This Memo 30 This Internet-Draft is submitted in full conformance with the 31 provisions of BCP 78 and BCP 79. 33 Internet-Drafts are working documents of the Internet Engineering 34 Task Force (IETF). Note that other groups may also distribute 35 working documents as Internet-Drafts. The list of current Internet- 36 Drafts is at https://datatracker.ietf.org/drafts/current/. 38 Internet-Drafts are draft documents valid for a maximum of six months 39 and may be updated, replaced, or obsoleted by other documents at any 40 time. It is inappropriate to use Internet-Drafts as reference 41 material or to cite them other than as "work in progress." 43 This Internet-Draft will expire on 15 June 2021. 45 Copyright Notice 47 Copyright (c) 2020 IETF Trust and the persons identified as the 48 document authors. All rights reserved. 50 This document is subject to BCP 78 and the IETF Trust's Legal 51 Provisions Relating to IETF Documents (https://trustee.ietf.org/ 52 license-info) in effect on the date of publication of this document. 53 Please review these documents carefully, as they describe your rights 54 and restrictions with respect to this document. Code Components 55 extracted from this document must include Simplified BSD License text 56 as described in Section 4.e of the Trust Legal Provisions and are 57 provided without warranty as described in the Simplified BSD License. 59 Table of Contents 61 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 62 1.1. Conventions and Definitions . . . . . . . . . . . . . . . 2 63 2. ECN Header Definition . . . . . . . . . . . . . . . . . . . . 2 64 3. Datagram Encoding of Proxied UDP Packets . . . . . . . . . . 3 65 4. Stream Encoding of Proxied UDP Packets . . . . . . . . . . . 3 66 5. HTTP Intermediaries . . . . . . . . . . . . . . . . . . . . . 4 67 6. Security Considerations . . . . . . . . . . . . . . . . . . . 4 68 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 4 69 7.1. HTTP Header . . . . . . . . . . . . . . . . . . . . . . . 4 70 7.2. Stream Chunk Type Registration . . . . . . . . . . . . . 5 71 8. Normative References . . . . . . . . . . . . . . . . . . . . 5 72 Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 6 73 Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 6 75 1. Introduction 77 The CONNECT-UDP [CONNECT-UDP] method allows proxying UDP packets over 78 HTTP. This document describes an extension to CONNECT-UDP that 79 allows conveying ECN [ECN] information on proxied UDP packets. 81 Discussion of this work is encouraged to happen on the MASQUE IETF 82 mailing list (masque@ietf.org (mailto:masque@ietf.org)) or on the 83 GitHub repository which contains the draft: 84 https://github.com/DavidSchinazi/draft-connect-udp-ecn. 86 1.1. Conventions and Definitions 88 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 89 "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and 90 "OPTIONAL" in this document are to be interpreted as described in BCP 91 14 [RFC2119] [RFC8174] when, and only when, they appear in all 92 capitals, as shown here. 94 2. ECN Header Definition 96 "ECN" is a Item Structured Header [STRUCT-HDR]. Its value MUST be a 97 Boolean. Its ABNF is: 99 ECN = sf-boolean 101 The "ECN" header indicates whether the sender supports this 102 extension. A value of 1 indicates support whereas a value of 0 (or 103 the absence of the header) indicates lack of support. 105 Clients MUST NOT indicate support for this extension unless they know 106 that the protocol running over UDP that is being proxied supports 107 ECN, and will react appropriately to Congestion Experienced (CE) 108 markings. 110 Proxies MUST NOT indicate support for this extension unless they know 111 they have the ability to read and write the IP ECN bits on its 112 target-bound UDP sockets. 114 This extension is said to have been negotiated when both client and 115 proxy indicated support for it in their CONNECT-UDP request and 116 response. 118 3. Datagram Encoding of Proxied UDP Packets 120 If a client supports this extension and HTTP/3 datagrams [H3DGRAM], 121 it can attempt to use datagrams for ECN information. This is done by 122 allocating four datagram flow identifiers (as opposed to one in 123 traditional CONNECT-UDP) and communicating them to the proxy using 124 parameters on the "Datagram-Flow-Id" header. These parameters are 125 "ect0", "ect1" and "ce". For example: 127 Datagram-Flow-Id = 100; ect0=102; ect1=104; ce=106 129 If the proxy wishes to support datagram encoding of this extension, 130 it echoes those parameters in its CONNECT-UDP response. The main 131 flow identifier now represents Not-ECT, whereas the one in "ect0" 132 represents ECT(0), "ect1" represents ECT(1) and "ce" represents CE; 133 see Section 5 of [ECN] for the definition of these IP header fields. 135 When the proxy receives a datagram from the given flow identifier, it 136 sets the IP packet's ECN bits accordingly on the UDP packet it sends 137 to the target. Similarly, in the other direction the flow identifier 138 represents which ECN bits were seen on the UDP packets received from 139 the target. 141 4. Stream Encoding of Proxied UDP Packets 143 If HTTP/3 datagrams are not supported, the stream is used to convey 144 UDP payloads, and the CONNECT-UDP Stream Chunk Type is used to 145 indicate the values of the ECN bits, as defined below: 147 +-------+-----------------+-----------+ 148 | Value | Type | ECN Field | 149 +-------+-----------------+-----------+ 150 | 0x00 | UDP_PACKET | Not-ECT | 151 +-------+-----------------+-----------+ 152 | 0x31 | UDP_PACKET_ECT0 | ECT(0) | 153 +-------+-----------------+-----------+ 154 | 0x32 | UDP_PACKET_ECT1 | ECT(1) | 155 +-------+-----------------+-----------+ 156 | 0x33 | UDP_PACKET_CE | CE | 157 +-------+-----------------+-----------+ 159 The proxy then uses the the CONNECT-UDP Stream Chunk Type on received 160 UDP payloads to set the ECN bits on the IP packets it sends to the 161 target, and in the reverse direction to indicate which ECN bits 162 received from the target. 164 5. HTTP Intermediaries 166 HTTP/3 DATAGRAM flow identifiers are specific to a given HTTP/3 167 connection. However, in some cases, an HTTP request may travel 168 across multiple HTTP connections if there are HTTP intermediaries 169 involved; see Section 2.3 of [RFC7230]. 171 Intermediaries that support this extension and HTTP/3 datagrams MUST 172 negotiate flow identifiers separately on the client-facing and 173 server-facing connections. This is accomplished by having the 174 intermediary parse the "Datagram-Flow-Id" header on all CONNECT-UDP 175 requests it receives, and sending the same value in the "Datagram- 176 Flow-Id" header on the response. The intermediary will perform this 177 individualy for all the parameters defined by this extension as well, 178 in addition to the rules in the "HTTP Intermediaries" section of 179 [CONNECT-UDP]. 181 6. Security Considerations 183 This document does not have additional security considerations beyond 184 those defined in [CONNECT-UDP]. 186 7. IANA Considerations 188 7.1. HTTP Header 190 This document will request IANA to register the "ECN" header in the 191 "Permanent Message Header Field Names" registry maintained at 192 . 194 +-------------------+----------+--------+---------------+ 195 | Header Field Name | Protocol | Status | Reference | 196 +-------------------+----------+--------+---------------+ 197 | ECN | http | std | This document | 198 +-------------------+----------+--------+---------------+ 200 7.2. Stream Chunk Type Registration 202 This document will request IANA to register the following entry in 203 the "CONNECT-UDP Stream Chunk Type" registry [CONNECT-UDP]: 205 +-------+-----------------+-------------------------+---------------+ 206 | Value | Type | Description | Reference | 207 +-------+-----------------+-------------------------+---------------+ 208 | 0x31 | UDP_PACKET_ECT0 | UDP payload with ECT(0) | This document | 209 +-------+-----------------+-------------------------+---------------+ 210 | 0x32 | UDP_PACKET_ECT1 | UDP payload with ECT(1) | This document | 211 +-------+-----------------+-------------------------+---------------+ 212 | 0x33 | UDP_PACKET_CE | UDP payload with CE | This document | 213 +-------+-----------------+-------------------------+---------------+ 215 8. Normative References 217 [CONNECT-UDP] 218 Schinazi, D., "The CONNECT-UDP HTTP Method", Work in 219 Progress, Internet-Draft, draft-ietf-masque-connect-udp- 220 01, 28 August 2020, . 223 [ECN] Ramakrishnan, K., Floyd, S., and D. Black, "The Addition 224 of Explicit Congestion Notification (ECN) to IP", 225 RFC 3168, DOI 10.17487/RFC3168, September 2001, 226 . 228 [H3DGRAM] Schinazi, D., "Using QUIC Datagrams with HTTP/3", Work in 229 Progress, Internet-Draft, draft-schinazi-quic-h3-datagram- 230 05, 12 October 2020, . 233 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 234 Requirement Levels", BCP 14, RFC 2119, 235 DOI 10.17487/RFC2119, March 1997, 236 . 238 [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer 239 Protocol (HTTP/1.1): Message Syntax and Routing", 240 RFC 7230, DOI 10.17487/RFC7230, June 2014, 241 . 243 [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 244 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, 245 May 2017, . 247 [STRUCT-HDR] 248 Nottingham, M. and P. Kamp, "Structured Field Values for 249 HTTP", Work in Progress, Internet-Draft, draft-ietf- 250 httpbis-header-structure-19, 3 June 2020, 251 . 254 Acknowledgments 256 This proposal was inspired directly or indirectly by prior work from 257 many people. The author would like to thank contributors the MASQUE 258 working group. 260 Author's Address 262 David Schinazi 263 Google LLC 264 1600 Amphitheatre Parkway 265 Mountain View, California 94043, 266 United States of America 268 Email: dschinazi.ietf@gmail.com