idnits 2.17.1 draft-schinazi-masque-connect-udp-ecn-01.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 (5 January 2021) is 1178 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-02 ** 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 5 January 2021 5 Expires: 9 July 2021 7 An ECN Extension to CONNECT-UDP 8 draft-schinazi-masque-connect-udp-ecn-01 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 9 July 2021. 45 Copyright Notice 47 Copyright (c) 2021 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 . . . . . . . . . . . . . . . . . . . . 3 64 3. Datagram Encoding of Proxied UDP Packets . . . . . . . . . . 3 65 4. Stream Encoding of Proxied UDP Packets . . . . . . . . . . . 4 66 5. HTTP Intermediaries . . . . . . . . . . . . . . . . . . . . . 4 67 6. Security Considerations . . . . . . . . . . . . . . . . . . . 4 68 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 5 69 7.1. HTTP Header . . . . . . . . . . . . . . . . . . . . . . . 5 70 7.2. Flow Identifier Parameters . . . . . . . . . . . . . . . 5 71 7.3. Stream Chunk Type Registration . . . . . . . . . . . . . 5 72 8. Normative References . . . . . . . . . . . . . . . . . . . . 5 73 Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 6 74 Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 6 76 1. Introduction 78 The CONNECT-UDP [CONNECT-UDP] method allows proxying UDP packets over 79 HTTP. This document describes an extension to CONNECT-UDP that 80 allows conveying ECN [ECN] information on proxied UDP packets. 82 Discussion of this work is encouraged to happen on the MASQUE IETF 83 mailing list (masque@ietf.org (mailto:masque@ietf.org)) or on the 84 GitHub repository which contains the draft: 85 https://github.com/DavidSchinazi/draft-connect-udp-ecn. 87 1.1. Conventions and Definitions 89 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 90 "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and 91 "OPTIONAL" in this document are to be interpreted as described in BCP 92 14 [RFC2119] [RFC8174] when, and only when, they appear in all 93 capitals, as shown here. 95 2. ECN Header Definition 97 "ECN" is a Item Structured Header [STRUCT-HDR]. Its value MUST be a 98 Boolean. Its ABNF is: 100 ECN = sf-boolean 102 The "ECN" header indicates whether the sender supports this 103 extension. A value of 1 indicates support whereas a value of 0 (or 104 the absence of the header) indicates lack of support. 106 Clients MUST NOT indicate support for this extension unless they know 107 that the protocol running over UDP that is being proxied supports 108 ECN, and will react appropriately to Congestion Experienced (CE) 109 markings. 111 Proxies MUST NOT indicate support for this extension unless they know 112 they have the ability to read and write the IP ECN bits on its 113 target-bound UDP sockets. 115 This extension is said to have been negotiated when both client and 116 proxy indicated support for it in their CONNECT-UDP request and 117 response. 119 3. Datagram Encoding of Proxied UDP Packets 121 If a client supports this extension and HTTP/3 datagrams [H3DGRAM], 122 it can attempt to use datagrams for ECN information. This is done by 123 allocating four datagram flow identifiers (as opposed to one in 124 traditional CONNECT-UDP) and communicating them to the proxy using 125 named elements on the "Datagram-Flow-Id" header. These names are 126 "ecn-ect0", "ecn-ect1", and "ecn-ce". For example: 128 Datagram-Flow-Id = 42, 44; ecn-ect0, 46; ecn-ect1, 48; ecn-ce 130 If the proxy wishes to support datagram encoding of this extension, 131 it echoes those named elements in its CONNECT-UDP response. The 132 unnamed element now represents Not-ECT, whereas the one in "ecn-ect0" 133 represents ECT(0), "ecn-ect1" represents ECT(1) and "ecn-ce" 134 represents CE; see Section 5 of [ECN] for the definition of these IP 135 header fields. 137 When the proxy receives a datagram from the given flow identifier, it 138 sets the IP packet's ECN bits accordingly on the UDP packet it sends 139 to the target. Similarly, in the other direction the flow identifier 140 represents which ECN bits were seen on the UDP packets received from 141 the target. 143 4. Stream Encoding of Proxied UDP Packets 145 If HTTP/3 datagrams are not supported, the stream is used to convey 146 UDP payloads, and the CONNECT-UDP Stream Chunk Type is used to 147 indicate the values of the ECN bits, as defined below: 149 +-------+-----------------+-----------+ 150 | Value | Type | ECN Field | 151 +-------+-----------------+-----------+ 152 | 0x00 | UDP_PACKET | Not-ECT | 153 +-------+-----------------+-----------+ 154 | 0x31 | UDP_PACKET_ECT0 | ECT(0) | 155 +-------+-----------------+-----------+ 156 | 0x32 | UDP_PACKET_ECT1 | ECT(1) | 157 +-------+-----------------+-----------+ 158 | 0x33 | UDP_PACKET_CE | CE | 159 +-------+-----------------+-----------+ 161 The proxy then uses the the CONNECT-UDP Stream Chunk Type on received 162 UDP payloads to set the ECN bits on the IP packets it sends to the 163 target, and in the reverse direction to indicate which ECN bits 164 received from the target. 166 5. HTTP Intermediaries 168 HTTP/3 DATAGRAM flow identifiers are specific to a given HTTP/3 169 connection. However, in some cases, an HTTP request may travel 170 across multiple HTTP connections if there are HTTP intermediaries 171 involved; see Section 2.3 of [RFC7230]. 173 Intermediaries that support this extension and HTTP/3 datagrams MUST 174 negotiate all four flow identifiers separately on the client-facing 175 and server-facing connections. This is accomplished by having the 176 intermediary parse the unnamed element and the "ecn-ect0", "ecn- 177 ect1", and "ecn-ce" named elements in the "Datagram-Flow-Id" header 178 on all CONNECT-UDP requests it receives, and sending the same four 179 flow identifiers in the "Datagram-Flow-Id" header on the response. 181 Intermediaries MUST NOT send the "ECN" header with a value of 1 to 182 the client on its response unless it has received that same value in 183 the response it received from the server. 185 6. Security Considerations 187 This document does not have additional security considerations beyond 188 those defined in [CONNECT-UDP]. 190 7. IANA Considerations 192 7.1. HTTP Header 194 This document will request IANA to register the "ECN" header in the 195 "Permanent Message Header Field Names" registry maintained at 196 . 198 +-------------------+----------+--------+---------------+ 199 | Header Field Name | Protocol | Status | Reference | 200 +-------------------+----------+--------+---------------+ 201 | ECN | http | std | This document | 202 +-------------------+----------+--------+---------------+ 204 7.2. Flow Identifier Parameters 206 This document will request IANA to register the "ecn-ect0", "ecn- 207 ect1", and "ecn-ce" flow identifier parameters in the "HTTP Datagram 208 Flow Identifier Parameters" registry (see [H3DGRAM]): 210 +----------+-------------------------+---------+---------------+ 211 | Key | Description | Is Name | Reference | 212 +----------+-------------------------+---------+---------------+ 213 | ecn-ect0 | UDP payload with ECT(0) | Yes | This document | 214 +----------+-------------------------+---------+---------------+ 215 | ecn-ect1 | UDP payload with ECT(1) | Yes | This document | 216 +----------+-------------------------+---------+---------------+ 217 | ecn-ce | UDP payload with CE | Yes | This document | 218 +----------+-------------------------+---------+---------------+ 220 7.3. Stream Chunk Type Registration 222 This document will request IANA to register the following entry in 223 the "CONNECT-UDP Stream Chunk Type" registry [CONNECT-UDP]: 225 +-------+-----------------+-------------------------+---------------+ 226 | Value | Type | Description | Reference | 227 +-------+-----------------+-------------------------+---------------+ 228 | 0x31 | UDP_PACKET_ECT0 | UDP payload with ECT(0) | This document | 229 +-------+-----------------+-------------------------+---------------+ 230 | 0x32 | UDP_PACKET_ECT1 | UDP payload with ECT(1) | This document | 231 +-------+-----------------+-------------------------+---------------+ 232 | 0x33 | UDP_PACKET_CE | UDP payload with CE | This document | 233 +-------+-----------------+-------------------------+---------------+ 235 8. Normative References 237 [CONNECT-UDP] 238 Schinazi, D., "The CONNECT-UDP HTTP Method", Work in 239 Progress, Internet-Draft, draft-ietf-masque-connect-udp- 240 02, 30 December 2020, . 243 [ECN] Ramakrishnan, K., Floyd, S., and D. Black, "The Addition 244 of Explicit Congestion Notification (ECN) to IP", 245 RFC 3168, DOI 10.17487/RFC3168, September 2001, 246 . 248 [H3DGRAM] Schinazi, D., "Using QUIC Datagrams with HTTP/3", Work in 249 Progress, Internet-Draft, draft-schinazi-quic-h3-datagram- 250 05, 12 October 2020, . 253 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 254 Requirement Levels", BCP 14, RFC 2119, 255 DOI 10.17487/RFC2119, March 1997, 256 . 258 [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer 259 Protocol (HTTP/1.1): Message Syntax and Routing", 260 RFC 7230, DOI 10.17487/RFC7230, June 2014, 261 . 263 [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 264 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, 265 May 2017, . 267 [STRUCT-HDR] 268 Nottingham, M. and P. Kamp, "Structured Field Values for 269 HTTP", Work in Progress, Internet-Draft, draft-ietf- 270 httpbis-header-structure-19, 3 June 2020, 271 . 274 Acknowledgments 276 This proposal was inspired directly or indirectly by prior work from 277 many people. The author would like to thank contributors the MASQUE 278 working group. 280 Author's Address 282 David Schinazi 283 Google LLC 284 1600 Amphitheatre Parkway 285 Mountain View, California 94043, 286 United States of America 288 Email: dschinazi.ietf@gmail.com