<?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.6.10 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-masque-connect-udp-14" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.10 -->
  <front>
    <title>Proxying UDP in HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-masque-connect-udp-14"/>
    <author initials="D." surname="Schinazi" fullname="David Schinazi">
      <organization>Google LLC</organization>
      <address>
        <postal>
          <street>1600 Amphitheatre Parkway</street>
          <city>Mountain View</city>
          <region>CA</region>
          <code>94043</code>
          <country>United States of America</country>
        </postal>
        <email>dschinazi.ietf@gmail.com</email>
      </address>
    </author>
    <date year="2022" month="June" day="08"/>
    <area>Transport</area>
    <workgroup>MASQUE</workgroup>
    <keyword>quic</keyword>
    <keyword>http</keyword>
    <keyword>datagram</keyword>
    <keyword>udp</keyword>
    <keyword>proxy</keyword>
    <keyword>tunnels</keyword>
    <keyword>quic in quic</keyword>
    <keyword>turtles all the way down</keyword>
    <keyword>masque</keyword>
    <keyword>http-ng</keyword>
    <abstract>
      <t>This document describes how to proxy UDP in HTTP, similar to how the HTTP
CONNECT method allows proxying TCP in HTTP. More specifically, this document
defines a protocol that allows an HTTP client to create a tunnel for UDP
communications through an HTTP server that acts as a proxy.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-wg-masque.github.io/draft-ietf-masque-connect-udp/draft-ietf-masque-connect-udp.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-masque-connect-udp/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        MASQUE Working Group mailing list (<eref target="mailto:masque@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/masque/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-masque/draft-ietf-masque-connect-udp"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>While HTTP provides the CONNECT method (see <xref section="9.3.6" sectionFormat="of" target="HTTP"/>)
for creating a TCP <xref target="TCP"/> tunnel to a proxy, prior to this
specification it lacked a method for doing so for UDP <xref target="UDP"/> traffic.</t>
      <t>This document describes a protocol for tunnelling UDP to a server acting as a
UDP-specific proxy over HTTP. UDP tunnels are commonly used to create an
end-to-end virtual connection, which can then be secured using QUIC
<xref target="QUIC"/> or another protocol running over UDP. Unlike CONNECT, the UDP
proxy itself is identified with an absolute URL containing the traffic's
destination. Clients generate those URLs using a URI Template
<xref target="TEMPLATE"/>, as described in <xref target="client-config"/>.</t>
      <t>This protocol supports all existing versions of HTTP by using HTTP Datagrams
<xref target="HTTP-DGRAM"/>. When using HTTP/2 <xref target="H2"/> or HTTP/3
<xref target="H3"/>, it uses HTTP Extended CONNECT as described in <xref target="EXT-CONNECT2"/>
and <xref target="EXT-CONNECT3"/>. When using HTTP/1.x
<xref target="H1"/>, it uses HTTP Upgrade as defined in <xref section="7.8" sectionFormat="of" target="HTTP"/>.</t>
      <section anchor="conventions">
        <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>
        <t>In this document, we use the term "UDP proxy" to refer to the HTTP server that
acts upon the client's UDP tunnelling request to open a UDP socket to a target
server, and generates the response to this request. If there are HTTP
intermediaries (as defined in <xref section="3.7" sectionFormat="of" target="HTTP"/>) between the client and
the UDP proxy, those are referred to as "intermediaries" in this document.</t>
        <t>Note that, when the HTTP version in use does not support multiplexing streams
(such as HTTP/1.1), any reference to "stream" in this document represents the
entire connection.</t>
      </section>
    </section>
    <section anchor="client-config">
      <name>Client Configuration</name>
      <t>HTTP clients are configured to use a UDP proxy with a URI Template
<xref target="TEMPLATE"/> that has the variables "target_host" and "target_port".
Examples are shown below:</t>
      <figure anchor="fig-template-examples">
        <name>URI Template Examples</name>
        <artwork><![CDATA[
https://masque.example.org/.well-known/masque/udp/{target_host}/{target_port}/
https://proxy.example.org:4443/masque?h={target_host}&p={target_port}
https://proxy.example.org:4443/masque{?target_host,target_port}
]]></artwork>
      </figure>
      <t>The following requirements apply to the URI Template:</t>
      <ul spacing="normal">
        <li>The URI Template <bcp14>MUST</bcp14> be a level 3 template or lower.</li>
        <li>The URI Template <bcp14>MUST</bcp14> be in absolute form, and <bcp14>MUST</bcp14> include non-empty scheme,
authority and path components.</li>
        <li>The path component of the URI Template <bcp14>MUST</bcp14> start with a slash "/".</li>
        <li>All template variables <bcp14>MUST</bcp14> be within the path or query components of the URI.</li>
        <li>The URI template <bcp14>MUST</bcp14> contain the two variables "target_host" and
"target_port" and <bcp14>MAY</bcp14> contain other variables.</li>
        <li>The URI Template <bcp14>MUST NOT</bcp14> contain any non-ASCII unicode characters and <bcp14>MUST</bcp14>
only contain ASCII characters in the range 0x21-0x7E inclusive (note that
percent-encoding is allowed).</li>
        <li>The URI Template <bcp14>MUST NOT</bcp14> use Reserved Expansion ("+" operator), Fragment
Expansion ("#" operator), Label Expansion with Dot-Prefix, Path Segment
Expansion with Slash-Prefix, nor Path-Style Parameter Expansion with
Semicolon-Prefix.</li>
      </ul>
      <t>Clients <bcp14>SHOULD</bcp14> validate the requirements above; however, clients <bcp14>MAY</bcp14> use a
general-purpose URI Template implementation that lacks this specific validation.
If a client detects that any of the requirements above are not met by a URI
Template, the client <bcp14>MUST</bcp14> reject its configuration and fail the request without
sending it to the UDP proxy.</t>
      <t>Since the original HTTP CONNECT method allowed conveying the target host and
port but not the scheme, proxy authority, path, nor query, there exist clients
with proxy configuration interfaces that only allow the user to configure the
proxy host and the proxy port. Client implementations of this specification that
are constrained by such limitations <bcp14>MAY</bcp14> attempt to access UDP proxying
capabilities using the default template, which is defined as:
"https://$PROXY_HOST:$PROXY_PORT/.well-known/masque/udp/{target_host}/{target_port}/"
where $PROXY_HOST and $PROXY_PORT are the configured host and port of the UDP
proxy respectively. UDP proxy deployments <bcp14>SHOULD</bcp14> offer service at this location
if they need to interoperate with such clients.</t>
    </section>
    <section anchor="tunnelling-udp-over-http">
      <name>Tunnelling UDP over HTTP</name>
      <t>To allow negotiation of a tunnel for UDP over HTTP, this document defines the
"connect-udp" HTTP Upgrade Token. The resulting UDP tunnels use the Capsule
Protocol (see <xref section="3.2" sectionFormat="of" target="HTTP-DGRAM"/>) with HTTP Datagram in the format
defined in <xref target="format"/>.</t>
      <t>To initiate a UDP tunnel associated with a single HTTP stream, a client issues a
request containing the "connect-udp" upgrade token. The target of the tunnel is
indicated by the client to the UDP proxy via the "target_host" and "target_port"
variables of the URI Template, see <xref target="client-config"/>. If the request is
successful, the UDP proxy commits to converting received HTTP Datagrams into UDP
packets and vice versa until the tunnel is closed.</t>
      <t>When sending its UDP proxying request, the client <bcp14>SHALL</bcp14> perform URI Template
expansion to determine the path and query of its request. target_host supports
using DNS names, IPv6 literals and IPv4 literals. Note that this URI Template
expansion requires using pct-encoding, so for example if the target_host is
"2001:db8::42", it will be encoded in the URI as "2001%3Adb8%3A%3A42".</t>
      <t>By virtue of the definition of the Capsule Protocol (see <xref target="HTTP-DGRAM"/>), UDP
proxying requests do not carry any message content. Similarly, successful
UDP proxying responses also do not carry any message content.</t>
      <section anchor="handling">
        <name>UDP Proxy Handling</name>
        <t>Upon receiving a UDP proxying request:</t>
        <ul spacing="normal">
          <li>if the recipient is configured to use another HTTP proxy, it will act as an
intermediary: it forwards the request to another HTTP server. Note that such
intermediaries may need to reencode the request if they forward it using a
version of HTTP that is different from the one used to receive it, as the
request encoding differs by version (see below).</li>
          <li>otherwise, the recipient will act as a UDP proxy: it extracts the
"target_host" and "target_port" variables from the URI it has reconstructed
from the request headers, and establishes a tunnel by directly opening a UDP
socket to the requested target.</li>
        </ul>
        <t>Unlike TCP, UDP is connection-less. The UDP proxy that opens the UDP socket has
no way of knowing whether the destination is reachable. Therefore it needs to
respond to the request without waiting for a packet from the target. However, if
the target_host is a DNS name, the UDP proxy <bcp14>MUST</bcp14> perform DNS resolution before
replying to the HTTP request. If errors occur during this process, the UDP proxy
<bcp14>MUST</bcp14> fail the request and <bcp14>SHOULD</bcp14> send details using an appropriate
"Proxy-Status" header field <xref target="PROXY-STATUS"/> (for
example, if DNS resolution returns an error, the proxy can use the dns_error
Proxy Error Type from <xref section="2.3.2" sectionFormat="of" target="PROXY-STATUS"/>).</t>
        <t>UDP proxies can use connected UDP sockets if their operating system supports
them, as that allows the UDP proxy to rely on the kernel to only send it UDP
packets that match the correct 5-tuple. If the UDP proxy uses a non-connected
socket, it <bcp14>MUST</bcp14> validate the IP source address and UDP source port on received
packets to ensure they match the client's request. Packets that do not match
<bcp14>MUST</bcp14> be discarded by the UDP proxy.</t>
        <t>The lifetime of the socket is tied to the request stream. The UDP proxy <bcp14>MUST</bcp14>
keep the socket open while the request stream is open. If a UDP proxy is
notified by its operating system that its socket is no longer usable (for
example, this can happen when an ICMP "Destination Unreachable" message is
received, see <xref section="3.1" sectionFormat="of" target="ICMP6"/>), it <bcp14>MUST</bcp14> close the request
stream. UDP proxies <bcp14>MAY</bcp14> choose to close sockets due to a period of inactivity,
but they <bcp14>MUST</bcp14> close the request stream when closing the socket. UDP proxies that
close sockets after a period of inactivity <bcp14>SHOULD NOT</bcp14> use a period lower than
two minutes, see <xref section="4.3" sectionFormat="of" target="BEHAVE"/>.</t>
        <t>A successful response (as defined in <xref target="resp1"/> and <xref target="resp23"/>) indicates that
the UDP proxy has opened a socket to the requested target and is willing to
proxy UDP payloads. Any response other than a successful response indicates that
the request has failed, and the client <bcp14>MUST</bcp14> therefore abort the request.</t>
        <t>UDP proxies <bcp14>MUST NOT</bcp14> introduce fragmentation at the IP layer when forwarding
HTTP Datagrams onto a UDP socket. In IPv4, the Don't Fragment (DF) bit <bcp14>MUST</bcp14> be
set if possible, to prevent fragmentation on the path. Future extensions <bcp14>MAY</bcp14>
remove these requirements.</t>
      </section>
      <section anchor="req1">
        <name>HTTP/1.1 Request</name>
        <t>When using HTTP/1.1 <xref target="H1"/>, a UDP proxying request will meet the following
requirements:</t>
        <ul spacing="normal">
          <li>the method <bcp14>SHALL</bcp14> be "GET".</li>
          <li>the request <bcp14>SHALL</bcp14> include a single "Host" header field containing the origin
of the UDP proxy.</li>
          <li>the request <bcp14>SHALL</bcp14> include a "Connection" header field with value "Upgrade"
(note that this requirement is case-insensitive as per <xref section="7.6.1" sectionFormat="of" target="HTTP"/>).</li>
          <li>the request <bcp14>SHALL</bcp14> include an "Upgrade" header field with value "connect-udp".</li>
        </ul>
        <t>For example, if the client is configured with URI Template
"https://proxy.example.org/.well-known/masque/udp/{target_host}/{target_port}/"
and wishes to open a
UDP proxying tunnel to target 192.0.2.42:443, it could send the following
request:</t>
        <figure anchor="fig-req-h1">
          <name>Example HTTP/1.1 Request</name>
          <artwork><![CDATA[
GET https://proxy.example.org/.well-known/masque/udp/192.0.2.42/443/ HTTP/1.1
Host: proxy.example.org
Connection: Upgrade
Upgrade: connect-udp
]]></artwork>
        </figure>
        <t>In HTTP/1.1, this protocol uses the GET method to mimic the design of the
WebSocket Protocol <xref target="WEBSOCKET"/>.</t>
      </section>
      <section anchor="resp1">
        <name>HTTP/1.1 Response</name>
        <t>The UDP proxy <bcp14>SHALL</bcp14> indicate a successful response by replying with the
following requirements:</t>
        <ul spacing="normal">
          <li>the HTTP status code on the response <bcp14>SHALL</bcp14> be 101 (Switching Protocols).</li>
          <li>the reponse <bcp14>SHALL</bcp14> include a single "Connection" header field with value
"Upgrade" (note that this requirement is case-insensitive as per <xref section="7.6.1" sectionFormat="of" target="HTTP"/>).</li>
          <li>the response <bcp14>SHALL</bcp14> include a single "Upgrade" header field with value
"connect-udp".</li>
          <li>the response <bcp14>SHALL NOT</bcp14> include any "Transfer-Encoding" or "Content-Length"
header fields.</li>
        </ul>
        <t>If any of these requirements are not met, the client <bcp14>MUST</bcp14> treat this proxying
attempt as failed and abort the connection.</t>
        <t>For example, the UDP proxy could respond with:</t>
        <figure anchor="fig-resp-h1">
          <name>Example HTTP/1.1 Response</name>
          <artwork><![CDATA[
HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: connect-udp
]]></artwork>
        </figure>
      </section>
      <section anchor="req23">
        <name>HTTP/2 and HTTP/3 Requests</name>
        <t>When using HTTP/2 <xref target="H2"/> or HTTP/3 <xref target="H3"/>, UDP proxying requests use Extended
CONNECT. This requires that servers send an HTTP Setting as specified in
<xref target="EXT-CONNECT2"/> and <xref target="EXT-CONNECT3"/>, and that requests use HTTP pseudo-header
fields with the following requirements:</t>
        <ul spacing="normal">
          <li>The ":method" pseudo-header field <bcp14>SHALL</bcp14> be "CONNECT".</li>
          <li>The ":protocol" pseudo-header field <bcp14>SHALL</bcp14> be "connect-udp".</li>
          <li>The ":authority" pseudo-header field <bcp14>SHALL</bcp14> contain the authority of the UDP
proxy.</li>
          <li>The ":path" and ":scheme" pseudo-header fields <bcp14>SHALL NOT</bcp14> be empty. Their
values <bcp14>SHALL</bcp14> contain the scheme and path from the URI Template after the URI
template expansion process has been completed.</li>
        </ul>
        <t>A UDP proxying request that does not conform to these restrictions is
malformed (see <xref section="8.1.1" sectionFormat="of" target="H2"/>).</t>
        <t>For example, if the client is configured with URI Template
"https://proxy.example.org/{target_host}/{target_port}/" and wishes to open a
UDP proxying tunnel to target 192.0.2.42:443, it could send the following
request:</t>
        <figure anchor="fig-req-h2">
          <name>Example HTTP/2 Request</name>
          <artwork><![CDATA[
HEADERS
:method = CONNECT
:protocol = connect-udp
:scheme = https
:path = /.well-known/masque/udp/192.0.2.42/443/
:authority = proxy.example.org
]]></artwork>
        </figure>
      </section>
      <section anchor="resp23">
        <name>HTTP/2 and HTTP/3 Responses</name>
        <t>The UDP proxy <bcp14>SHALL</bcp14> indicate a successful response by replying with any 2xx
(Successful) HTTP status code, without any "Transfer-Encoding" or
"Content-Length" header fields.</t>
        <t>If any of these requirements are not met, the client <bcp14>MUST</bcp14> treat this proxying
attempt as failed and abort the request.</t>
        <t>For example, the UDP proxy could respond with:</t>
        <figure anchor="fig-resp-h2">
          <name>Example HTTP/2 Response</name>
          <artwork><![CDATA[
HEADERS
:status = 200
]]></artwork>
        </figure>
      </section>
      <section anchor="note-about-draft-versions">
        <name>Note About Draft Versions</name>
        <t>[[RFC editor: please remove this section before publication.]]</t>
        <t>In order to allow implementations to support multiple draft versions of this
specification during its development, we introduce the "connect-udp-version"
header field. When sent by the client, it contains a list of draft numbers
supported by the client (e.g., "connect-udp-version: 0, 2"). When sent by the
UDP proxy, it contains a single draft number selected by the UDP proxy from the
list provided by the client (e.g., "connect-udp-version: 2"). Sending this
header field is <bcp14>RECOMMENDED</bcp14> but not required. The "connect-udp-version" header
field is a List Structured Field, see <xref section="3.1" sectionFormat="of" target="STRUCT-FIELD"/>.
Each list member <bcp14>MUST</bcp14> be an Integer.</t>
      </section>
    </section>
    <section anchor="context-id">
      <name>Context Identifiers</name>
      <t>The mechanism for proxying UDP in HTTP defined in this document allows future
extensions to exchange HTTP Datagrams which carry different semantics from UDP
payloads. Some of these extensions can augment UDP payloads with additional
data, while others can exchange data that is completely separate from UDP
payloads. In order to accomplish this, all HTTP Datagrams associated with UDP
Proxying request streams start with a context ID, see <xref target="format"/>.</t>
      <t>Context IDs are 62-bit integers (0 to 2<sup>62</sup>-1). Context IDs are encoded
as variable-length integers, see <xref section="16" sectionFormat="of" target="QUIC"/>. The context ID value of
0 is reserved for UDP payloads, while non-zero values are dynamically allocated:
non-zero even-numbered context IDs are client-allocated, and odd-numbered
context IDs are proxy-allocated. The context ID namespace is tied to a given
HTTP request: it is possible for a context ID with the same numeric value to be
simultaneously allocated in distinct requests, potentially with different
semantics. Context IDs <bcp14>MUST NOT</bcp14> be re-allocated within a given HTTP namespace
but <bcp14>MAY</bcp14> be allocated in any order. The context ID allocation restrictions to the
use of even-numbered and odd-numbered context IDs exist in order to avoid the
need for synchronisation between endpoints. However, once a context ID has been
allocated, those restrictions do not apply to the use of the context ID: it can
be used by any client or UDP proxy, independent of which endpoint initially
allocated it.</t>
      <t>Registration is the action by which an endpoint informs its peer of the
semantics and format of a given context ID. This document does not define how
registration occurs. Future extensions <bcp14>MAY</bcp14> use HTTP header fields or capsules to
register contexts. Depending on the method being used, it is possible for
datagrams to be received with Context IDs which have not yet been registered,
for instance due to reordering of the packet containing the datagram and the
packet containing the registration message during transmission.</t>
    </section>
    <section anchor="format">
      <name>HTTP Datagram Payload Format</name>
      <t>When HTTP Datagrams (see <xref target="HTTP-DGRAM"/>) are associated with UDP proxying
request streams, the HTTP Datagram Payload field has the format defined in
<xref target="dgram-format"/>. Note that when HTTP Datagrams are encoded using QUIC DATAGRAM
frames, the Context ID field defined below directly follows the Quarter Stream
ID field which is at the start of the QUIC DATAGRAM frame payload:</t>
      <figure anchor="dgram-format">
        <name>UDP Proxying HTTP Datagram Format</name>
        <artwork><![CDATA[
UDP Proxying HTTP Datagram Payload {
  Context ID (i),
  Payload (..),
}
]]></artwork>
      </figure>
      <dl spacing="compact">
        <dt>Context ID:</dt>
        <dd>
          <t>A variable-length integer (see <xref section="16" sectionFormat="of" target="QUIC"/>) that contains the value
of the Context ID. If an HTTP/3 datagram which carries an unknown Context ID is
received, the receiver <bcp14>SHALL</bcp14> either drop that datagram silently or buffer it
temporarily (on the order of a round trip) while awaiting the registration of
the corresponding Context ID.</t>
        </dd>
        <dt>Payload:</dt>
        <dd>
          <t>The payload of the datagram, whose semantics depend on value of the previous
field. Note that this field can be empty.</t>
        </dd>
      </dl>
      <t>UDP packets are encoded using HTTP Datagrams with the Context ID set to zero.
When the Context ID is set to zero, the Payload field contains the
unmodified payload of a UDP packet (referred to as "data octets" in <xref target="UDP"/>).</t>
      <t>By virtue of the definition of the UDP header <xref target="UDP"/>, it is not possible to
encode UDP payloads longer than 65527 bytes. Therefore, endpoints <bcp14>MUST NOT</bcp14> send
HTTP Datagrams with a Payload field longer than 65527 using Context ID zero. An
endpoint that receives a DATAGRAM capsule using Context ID zero whose Payload
field is longer than 65527 <bcp14>MUST</bcp14> abort the stream. If a UDP proxy knows it can
only send out UDP packets of a certain length due to its underlying link MTU, it
<bcp14>SHOULD</bcp14> discard incoming DATAGRAM capsules using Context ID zero whose Payload
field is longer than that limit without buffering the capsule contents.</t>
      <t>If a UDP proxy receives an HTTP Datagram before it has received the
corresponding request, it <bcp14>SHALL</bcp14> either drop that HTTP Datagram silently or
buffer it temporarily (on the order of a round trip) while awaiting the
corresponding request.</t>
      <t>Note that buffering datagrams (either because the request was not yet received,
or because the Context ID is not yet known) consumes resources. Receivers that
buffer datagrams <bcp14>SHOULD</bcp14> apply buffering limits in order to reduce the risk of
resource exhaustion occuring. For example, receivers can limit the total number
of buffered datagrams, or the cumulative size of buffered datagrams, on a
per-stream, per-context, or per-connection basis.</t>
      <t>A client <bcp14>MAY</bcp14> optimistically start sending UDP packets in HTTP Datagrams before
receiving the response to its UDP proxying request. However, implementors should
note that such proxied packets may not be processed by the UDP proxy if it
responds to the request with a failure, or if the proxied packets are received
by the UDP proxy before the request and the UDP proxy chooses to not buffer them.</t>
    </section>
    <section anchor="performance">
      <name>Performance Considerations</name>
      <t>Bursty traffic can often lead to temporally correlated packet losses, which in
turn can lead to suboptimal responses from congestion controllers in protocols
running over UDP. To avoid this, UDP proxies <bcp14>SHOULD</bcp14> strive to avoid increasing
burstiness of UDP traffic: they <bcp14>SHOULD NOT</bcp14> queue packets in order to increase
batching.</t>
      <t>When the protocol running over UDP that is being proxied uses congestion
control (e.g., <xref target="QUIC"/>), the proxied traffic will incur at least two nested
congestion controllers. This can reduce performance but the underlying
HTTP connection <bcp14>MUST NOT</bcp14> disable congestion control unless it has an
out-of-band way of knowing with absolute certainty that the inner traffic is
congestion-controlled.</t>
      <t>If a client or UDP proxy with a connection containing a UDP proxying request
stream disables congestion control, it <bcp14>MUST NOT</bcp14> signal Explicit Congestion
Notification (ECN) <xref target="ECN"/> support on that connection. That is, it <bcp14>MUST</bcp14>
mark all IP headers with the Not-ECT codepoint. It <bcp14>MAY</bcp14> continue to report ECN
feedback via QUIC ACK_ECN frames or the TCP "ECE" bit, as the peer may not have
disabled congestion control.</t>
      <t>When the protocol running over UDP that is being proxied uses loss recovery
(e.g., <xref target="QUIC"/>), and the underlying HTTP connection runs over TCP, the proxied
traffic will incur at least two nested loss recovery mechanisms. This can reduce
performance as both can sometimes independently retransmit the same data. To
avoid this, UDP proxying <bcp14>SHOULD</bcp14> be performed over HTTP/3 to allow leveraging the
QUIC DATAGRAM frame.</t>
      <section anchor="mtu-considerations">
        <name>MTU Considerations</name>
        <t>When using HTTP/3 with the QUIC Datagram extension <xref target="DGRAM"/>, UDP
payloads are transmitted in QUIC DATAGRAM frames. Since those cannot be
fragmented, they can only carry payloads up to a given length determined by the
QUIC connection configuration and the path MTU. If a UDP proxy is using QUIC
DATAGRAM frames and it receives a UDP payload from the target that will not fit
inside a QUIC DATAGRAM frame, the UDP proxy <bcp14>SHOULD NOT</bcp14> send the UDP payload in a
DATAGRAM capsule, as that defeats the end-to-end unreliability characteristic
that methods such as Datagram Packetization Layer Path MTU Discovery (DPLPMTUD)
depend on <xref target="DPLPMTUD"/>. In this scenario, the UDP proxy <bcp14>SHOULD</bcp14> drop the
UDP payload and send an ICMP "Packet Too Big" message to the target, see
<xref section="3.2" sectionFormat="of" target="ICMP6"/>.</t>
      </section>
      <section anchor="tunneling-of-ecn-marks">
        <name>Tunneling of ECN Marks</name>
        <t>UDP proxying does not create an IP-in-IP tunnel, so the guidance in
<xref target="ECN-TUNNEL"/> about transferring ECN marks between inner and outer IP
headers does not apply. There is no inner IP header in UDP proxying tunnels.</t>
        <t>Note that UDP proxying clients do not have the ability in this specification to
control the ECN codepoints on UDP packets the UDP proxy sends to the target, nor
can UDP proxies communicate the markings of each UDP packet from target to UDP
proxy.</t>
        <t>A UDP proxy <bcp14>MUST</bcp14> ignore ECN bits in the IP header of UDP packets received from
the target, and <bcp14>MUST</bcp14> set the ECN bits to Not-ECT on UDP packets it sends to the
target. These do not relate to the ECN markings of packets sent between client
and UDP proxy in any way.</t>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>There are significant risks in allowing arbitrary clients to establish a tunnel
to arbitrary targets, as that could allow bad actors to send traffic and have it
attributed to the UDP proxy. HTTP servers that support UDP proxying ought to
restrict its use to authenticated users.</t>
      <t>UDP proxies have similar properties to TCP proxies when it comes to facilitating
denial of service attacks. In theory the stateful nature of TCP provides better
protection than stateless UDP but in practice this provides negligible benefits
when considering proxying. Because the CONNECT method creates a TCP connection
to the target, the target has to indicate its willingness to accept TCP
connections by responding with a TCP SYN-ACK before the CONNECT proxy can send
it application data. UDP doesn't have this property, so a UDP proxy could send
more data to an unwilling target than a CONNECT proxy. However, in practice
denial of service attacks target open TCP ports so the TCP SYN-ACK does not
offer much protection in real scenarios. While a UDP proxy could potentially
limit the number of UDP packets it is willing to forward until it has observed a
response from the target, that is unlikely to provide any protection against
denial of service attacks because such attacks target open UDP ports where the
protocol running over UDP would respond, and that would be interpreted as
willingness to accept UDP by the UDP proxy.</t>
      <t>The security considerations described in <xref target="HTTP-DGRAM"/> also apply here.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <section anchor="iana-upgrade">
        <name>HTTP Upgrade Token</name>
        <t>This document will request IANA to register "connect-udp" in the "HTTP Upgrade
Tokens" registry maintained at
&lt;<eref target="https://www.iana.org/assignments/http-upgrade-tokens"/>&gt;.</t>
        <dl spacing="compact">
          <dt>Value:</dt>
          <dd>
            <t>connect-udp</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>Proxying of UDP Payloads</t>
          </dd>
          <dt>Expected Version Tokens:</dt>
          <dd>
            <t>None</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>This document</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-uri">
        <name>Well-Known URI</name>
        <t>This document will request IANA to register "masque" in the "Well-Known
URIs" registry maintained at
&lt;<eref target="https://www.iana.org/assignments/well-known-uris"/>&gt;.</t>
        <dl spacing="compact">
          <dt>URI Suffix:</dt>
          <dd>
            <t>masque</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>This document</t>
          </dd>
          <dt>Status:</dt>
          <dd>
            <t>permanent (if this document is approved)</t>
          </dd>
          <dt>Related Information:</dt>
          <dd>
            <t>Includes all resources identified with the path prefix
"/.well-known/masque/udp/"</t>
          </dd>
        </dl>
      </section>
    </section>
  </middle>
  <back>
    <displayreference target="H1" to="HTTP/1.1"/>
    <displayreference target="H2" to="HTTP/2"/>
    <displayreference target="H3" to="HTTP/3"/>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="H1">
          <front>
            <title>HTTP/1.1</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document specifies the HTTP/1.1 message syntax, message parsing, connection management, and related security concerns. </t>
              <t>This document obsoletes portions of RFC 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="99"/>
          <seriesInfo name="RFC" value="9112"/>
          <seriesInfo name="DOI" value="10.17487/RFC9112"/>
        </reference>
        <reference anchor="H2">
          <front>
            <title>HTTP/2</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <author fullname="C. Benfield" initials="C." role="editor" surname="Benfield">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced latency by introducing field compression and allowing multiple concurrent exchanges on the same connection.</t>
              <t>This document obsoletes RFCs 7540 and 8740.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9113"/>
          <seriesInfo name="DOI" value="10.17487/RFC9113"/>
        </reference>
        <reference anchor="H3">
          <front>
            <title>HTTP/3</title>
            <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <abstract>
              <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment.  This document describes a mapping of HTTP semantics over QUIC.  This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9114"/>
          <seriesInfo name="DOI" value="10.17487/RFC9114"/>
        </reference>
        <reference anchor="HTTP">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes. </t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="TCP">
          <front>
            <title>Transmission Control Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel">
              <organization/>
            </author>
            <date month="September" year="1981"/>
          </front>
          <seriesInfo name="STD" value="7"/>
          <seriesInfo name="RFC" value="793"/>
          <seriesInfo name="DOI" value="10.17487/RFC0793"/>
        </reference>
        <reference anchor="UDP">
          <front>
            <title>User Datagram Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel">
              <organization/>
            </author>
            <date month="August" year="1980"/>
          </front>
          <seriesInfo name="STD" value="6"/>
          <seriesInfo name="RFC" value="768"/>
          <seriesInfo name="DOI" value="10.17487/RFC0768"/>
        </reference>
        <reference anchor="QUIC">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar">
              <organization/>
            </author>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <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="TEMPLATE">
          <front>
            <title>URI Template</title>
            <author fullname="J. Gregorio" initials="J." surname="Gregorio">
              <organization/>
            </author>
            <author fullname="R. Fielding" initials="R." surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Hadley" initials="M." surname="Hadley">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <author fullname="D. Orchard" initials="D." surname="Orchard">
              <organization/>
            </author>
            <date month="March" year="2012"/>
            <abstract>
              <t>A URI Template is a compact sequence of characters for describing a range of Uniform Resource Identifiers through variable expansion. This specification defines the URI Template syntax and the process for expanding a URI Template into a URI reference, along with guidelines for the use of URI Templates on the Internet.   [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6570"/>
          <seriesInfo name="DOI" value="10.17487/RFC6570"/>
        </reference>
        <reference anchor="HTTP-DGRAM">
          <front>
            <title>HTTP Datagrams and the Capsule Protocol</title>
            <author fullname="David Schinazi">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Lucas Pardue">
              <organization>Cloudflare</organization>
            </author>
            <date day="8" month="June" year="2022"/>
            <abstract>
              <t>   This document describes HTTP Datagrams, a convention for conveying
   multiplexed, potentially unreliable datagrams inside an HTTP
   connection.

   In HTTP/3, HTTP Datagrams can be conveyed natively using the QUIC
   DATAGRAM extension.  When the QUIC DATAGRAM frame is unavailable or
   undesirable, they can be sent using the Capsule Protocol, a more
   general convention for conveying data in HTTP connections.

   HTTP Datagrams and the Capsule Protocol are intended for use by HTTP
   extensions, not applications.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-masque-h3-datagram-10"/>
        </reference>
        <reference anchor="EXT-CONNECT2">
          <front>
            <title>Bootstrapping WebSockets with HTTP/2</title>
            <author fullname="P. McManus" initials="P." surname="McManus">
              <organization/>
            </author>
            <date month="September" year="2018"/>
            <abstract>
              <t>This document defines a mechanism for running the WebSocket Protocol (RFC 6455) over a single stream of an HTTP/2 connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8441"/>
          <seriesInfo name="DOI" value="10.17487/RFC8441"/>
        </reference>
        <reference anchor="EXT-CONNECT3">
          <front>
            <title>Bootstrapping WebSockets with HTTP/3</title>
            <author fullname="Ryan Hamilton">
              <organization>Google</organization>
            </author>
            <date day="8" month="February" year="2022"/>
            <abstract>
              <t>   The mechanism for running the WebSocket Protocol over a single stream
   of an HTTP/2 connection is equally applicable to HTTP/3, but the HTTP
   version-specific details need to be specified.  This document
   describes how the mechanism is adapted for HTTP/3.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-h3-websockets-04"/>
        </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">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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>
        <reference anchor="PROXY-STATUS">
          <front>
            <title>The Proxy-Status HTTP Response Header Field</title>
            <author fullname="Mark Nottingham">
              <organization>Fastly</organization>
            </author>
            <author fullname="Piotr Sikora">
              <organization>Google</organization>
            </author>
            <date day="13" month="October" year="2021"/>
            <abstract>
              <t>   This document defines the Proxy-Status HTTP field to convey the
   details of intermediary response handling, including generated
   errors.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-proxy-status-08"/>
        </reference>
        <reference anchor="STRUCT-FIELD">
          <front>
            <title>Structured Field Values for HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <author fullname="P-H. Kamp" initials="P-H." surname="Kamp">
              <organization/>
            </author>
            <date month="February" year="2021"/>
            <abstract>
              <t>This document describes a set of data types and associated algorithms that are intended to make it easier and safer to define and handle HTTP header and trailer fields, known as "Structured Fields", "Structured Headers", or "Structured Trailers". It is intended for use by specifications of new HTTP fields that wish to use a common syntax that is more restrictive than traditional HTTP field values.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8941"/>
          <seriesInfo name="DOI" value="10.17487/RFC8941"/>
        </reference>
        <reference anchor="ECN">
          <front>
            <title>The Addition of Explicit Congestion Notification (ECN) to IP</title>
            <author fullname="K. Ramakrishnan" initials="K." surname="Ramakrishnan">
              <organization/>
            </author>
            <author fullname="S. Floyd" initials="S." surname="Floyd">
              <organization/>
            </author>
            <author fullname="D. Black" initials="D." surname="Black">
              <organization/>
            </author>
            <date month="September" year="2001"/>
            <abstract>
              <t>This memo specifies the incorporation of ECN (Explicit Congestion Notification) to TCP and IP, including ECN's use of two bits in the IP header.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3168"/>
          <seriesInfo name="DOI" value="10.17487/RFC3168"/>
        </reference>
        <reference anchor="DGRAM">
          <front>
            <title>An Unreliable Datagram Extension to QUIC</title>
            <author fullname="T. Pauly" initials="T." surname="Pauly">
              <organization/>
            </author>
            <author fullname="E. Kinnear" initials="E." surname="Kinnear">
              <organization/>
            </author>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi">
              <organization/>
            </author>
            <date month="March" year="2022"/>
            <abstract>
              <t>This document defines an extension to the QUIC transport protocol to add support for sending and receiving unreliable datagrams over a QUIC connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9221"/>
          <seriesInfo name="DOI" value="10.17487/RFC9221"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="ICMP6">
          <front>
            <title>Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification</title>
            <author fullname="A. Conta" initials="A." surname="Conta">
              <organization/>
            </author>
            <author fullname="S. Deering" initials="S." surname="Deering">
              <organization/>
            </author>
            <author fullname="M. Gupta" initials="M." role="editor" surname="Gupta">
              <organization/>
            </author>
            <date month="March" year="2006"/>
            <abstract>
              <t>This document describes the format of a set of control messages used in ICMPv6 (Internet Control Message Protocol).  ICMPv6 is the Internet Control Message Protocol for Internet Protocol version 6 (IPv6).  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="89"/>
          <seriesInfo name="RFC" value="4443"/>
          <seriesInfo name="DOI" value="10.17487/RFC4443"/>
        </reference>
        <reference anchor="BEHAVE">
          <front>
            <title>Network Address Translation (NAT) Behavioral Requirements for Unicast UDP</title>
            <author fullname="F. Audet" initials="F." role="editor" surname="Audet">
              <organization/>
            </author>
            <author fullname="C. Jennings" initials="C." surname="Jennings">
              <organization/>
            </author>
            <date month="January" year="2007"/>
            <abstract>
              <t>This document defines basic terminology for describing different types of Network Address Translation (NAT) behavior when handling Unicast UDP and also defines a set of requirements that would allow many applications, such as multimedia communications or online gaming, to work consistently.  Developing NATs that meet this set of requirements will greatly increase the likelihood that these applications will function properly.  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="127"/>
          <seriesInfo name="RFC" value="4787"/>
          <seriesInfo name="DOI" value="10.17487/RFC4787"/>
        </reference>
        <reference anchor="WEBSOCKET">
          <front>
            <title>The WebSocket Protocol</title>
            <author fullname="I. Fette" initials="I." surname="Fette">
              <organization/>
            </author>
            <author fullname="A. Melnikov" initials="A." surname="Melnikov">
              <organization/>
            </author>
            <date month="December" year="2011"/>
            <abstract>
              <t>The WebSocket Protocol enables two-way communication between a client running untrusted code in a controlled environment to a remote host that has opted-in to communications from that code.  The security model used for this is the origin-based security model commonly used by web browsers.  The protocol consists of an opening handshake followed by basic message framing, layered over TCP.  The goal of this technology is to provide a mechanism for browser-based applications that need two-way communication with servers that does not rely on opening multiple HTTP connections (e.g., using XMLHttpRequest or &lt;iframe&gt;s and long polling).  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6455"/>
          <seriesInfo name="DOI" value="10.17487/RFC6455"/>
        </reference>
        <reference anchor="DPLPMTUD">
          <front>
            <title>Packetization Layer Path MTU Discovery for Datagram Transports</title>
            <author fullname="G. Fairhurst" initials="G." surname="Fairhurst">
              <organization/>
            </author>
            <author fullname="T. Jones" initials="T." surname="Jones">
              <organization/>
            </author>
            <author fullname="M. Tüxen" initials="M." surname="Tüxen">
              <organization/>
            </author>
            <author fullname="I. Rüngeler" initials="I." surname="Rüngeler">
              <organization/>
            </author>
            <author fullname="T. Völker" initials="T." surname="Völker">
              <organization/>
            </author>
            <date month="September" year="2020"/>
            <abstract>
              <t>This document specifies Datagram Packetization Layer Path MTU Discovery (DPLPMTUD). This is a robust method for Path MTU Discovery (PMTUD) for datagram Packetization Layers (PLs). It allows a PL, or a datagram application that uses a PL, to discover whether a network path can support the current size of datagram.  This can be used to detect and reduce the message size when a sender encounters a packet black hole. It can also probe a network path to discover whether the maximum packet size can be increased.  This provides functionality for datagram transports that is equivalent to the PLPMTUD specification for TCP, specified in RFC 4821, which it updates. It also updates the UDP Usage Guidelines to refer to this method for use with UDP datagrams and updates SCTP.</t>
              <t>The document provides implementation notes for incorporating Datagram PMTUD into IETF datagram transports or applications that use datagram transports.</t>
              <t>This specification updates RFC 4960, RFC 4821, RFC 6951, RFC 8085, and RFC 8261.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8899"/>
          <seriesInfo name="DOI" value="10.17487/RFC8899"/>
        </reference>
        <reference anchor="ECN-TUNNEL">
          <front>
            <title>Tunnelling of Explicit Congestion Notification</title>
            <author fullname="B. Briscoe" initials="B." surname="Briscoe">
              <organization/>
            </author>
            <date month="November" year="2010"/>
            <abstract>
              <t>This document redefines how the explicit congestion notification (ECN) field of the IP header should be constructed on entry to and exit from any IP-in-IP tunnel.  On encapsulation, it updates RFC 3168 to bring all IP-in-IP tunnels (v4 or v6) into line with RFC 4301 IPsec ECN processing.  On decapsulation, it updates both RFC 3168 and RFC 4301 to add new behaviours for previously unused combinations of inner and outer headers.  The new rules ensure the ECN field is correctly propagated across a tunnel whether it is used to signal one or two severity levels of congestion; whereas before, only one severity level was supported.  Tunnel endpoints can be updated in any order without affecting pre-existing uses of the ECN field, thus ensuring backward compatibility.  Nonetheless, operators wanting to support two severity levels (e.g., for pre-congestion notification -- PCN) can require compliance with this new specification.  A thorough analysis of the reasoning for these changes and the implications is included.  In the unlikely event that the new rules do not meet a specific need, RFC 4774 gives guidance on designing alternate ECN semantics, and this document extends that to include tunnelling issues.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6040"/>
          <seriesInfo name="DOI" value="10.17487/RFC6040"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This document is a product of the MASQUE Working Group, and the author thanks
all MASQUE enthusiasts for their contibutions. This proposal was inspired
directly or indirectly by prior work from many people. In particular, the author
would like to thank Eric Rescorla for suggesting to use an HTTP method to proxy
UDP. The author is indebted to Mark Nottingham and Lucas Pardue for the many
improvements they contributed to this document. The extensibility design in this
document came out of the HTTP Datagrams Design Team, whose members were Alan
Frindell, Alex Chernyakhovsky, Ben Schwartz, Eric Rescorla, Lucas Pardue, Marcus
Ihlar, Martin Thomson, Mike Bishop, Tommy Pauly, Victor Vasiliev, and the author
of this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
gxFQX5uYVYMwy3xGTRMupftTSkLs3dcGhfwgx5SeKaixpcGEEkz4rPPdnTjG
/RYreWpRNxrAU5cYPmDloaJj5Dm1LardGJagG4kkeiniCC0NpJGplKsfGqkP
jgfYS+qv3V4HhuMxBG+R0GbX1aCYD6ZUUuwcNiDR8dcBiPWuNt4JxVpFjqiX
TYP33iw4CBtLvcHckRKJUqF+E1FkvLvVTzpz/Sbdjl02fb3khtkFHi8+v11n
dmbpRg1P1XfUxSw5rL3z03eP6eah03eYmj86oCu3fIXHn8mO+j6AYMQ7YT21
SspPlCW+8P5m5FHDagM824wOJvlw4E1V4aoAm/vUAi0HQKi5MekUOJ1OGFLM
eXL6p7/CGw45nbcieCVZ7/z0vIfNnP4YD6d+vArFFIcSlKU7UPabZQU1Dh3A
gW83altMvLKMXL0u/8JyjteiEzSRYKlfJlhtIJoayLZoqVi0MCVYVHwtmStW
1Gnv4mRdhj6e5GGqJruLBhoVn9ql+GiHoremQZQBxnCcF6LjUFnE6zrKZOE9
sR35BemIA8+4Yzm2u3OOGpbjibzTGNJyyOV8/RfesXZ4eCCdO6EOwuesZceS
CN4BFFZx5CA/OtqAQDbXyjcLSyDP51f4mgoqEYV16nWUaw+RgT8B6q09I6St
JTr3EFTSjYwY2nFgIb5frrMHbh9vxVJR9Nc9AiWZKuRD3OscXA9L5NDJLgx1
S+ORJQuNF/FqmHBX3fCmOVoDka1J+LScjq7aq3Ow/5aP82+auz/I2VN8joYS
p077m4uibBRaUvsTY/KSusyvBI/6DAIvlqW9s6vLK3h09lg1+Yq7u6/9Y6pl
Pn/xgk4sS0HRzUwOsUjxAA4ktJGqsewfaeF7v/jgBwMIYlboV3bRnPcQP4+p
QiUstXVUnQ58hG5SPosvOVvUom9BWzvVbpxpWoT8nYagywc2H1z4A+p01BeX
XtQ2JQVCac2vYcbB5OO7d+eX1Me6f4y3KCXUnFBJawfFIbgy2gkXShdsRxOO
m+GviyvljUcAh6IZyTjIYRoeFiwN8s6OHiDXiuBaH/gbSqTaQWlwKi4II/nK
cOcSiiJ4Q/gxbidYNDyC0Iol2pRHyrou5XIIYVE9tE6khdtCGSLEF0BM7iEe
/YlTRSygIpxFc6C53QsmlxgtcvTiEeapBIMVn68QHIr76cEPITsuomKow71I
Ts4chDkBBm/pO8iwVQsDyh+qnFAFXKjAnrxHkmcWv3k/FXddCP8wHZU/uyY6
j0t34NNx7DHGizaRqluBh5M33DogF7qh10Q0xwvLIDZ2cpUfu4ZJCVstk3IT
eAh7A/yB2nCcVqFuD5/ydl2jzbhPiC3gFIV/RsEhRiekG8Xo476IN0HXJhVE
EeALN6femsMV8Xlr304qzluL7fHi2UpOxFLJj3NQHMli6xkWXLn+hle6uM6h
HQLFX767pgtA6A4VGIyOmP+MihnUBbPil/NkhmJFp+RAieYWnFKgaHPdSIW3
/Yj6NEW58XWHymCzWZ5QaQ1GyCp8sy3wAKgM5PhKdB+ltWhY5i99weCB4jcs
G86k/SlMkZtFZheUAJ2a3IBJc4oPogmneGdvQzmQV3Hupn1dD+tMJ7fkNvZa
dUQ+MqdUKSqaBjskhRzkonhQbq9ZVzilaqZ03HQX0lUSSeC64+/fDcBRjkN2
D2dzmJaSs5b1amjLIocOEYZqF49KiUpkbCGhN6T9Y9+i6aJUK1yOm04KLnGE
I2nBd8D6ewuaOEXSkOhhBgn3lWDXJ7EC3QUrNinev7cdiu+1WUmKxfOJRWcY
lvBm2mFDFyUFt3YXNSGoJs8lfVwdlclp9eYsXriugK8TkcizmErjSKJCHqnj
afVDuFHTuXquxAvXkm6LNpMssLpQfQZtPuXIHtAOXNImCJd8DVHFlzc9EArd
xD2OUY85P9++WHU3T5Nw7j7z67VykELR151bdONKLt+zwXlPuV4Vb8s+eXey
rfRtkif3oS22fVmQvB7IZTn33dumyfv1WTCanuJWKd+3L9wRC9uLV1G0iuv5
Ehuen7YU9iOuKvXVDz/u+dbom5ubIQLDF/87NEvU2vqEbrEXCAd0nY97/AfY
8bdYRKMqXNySrM4IbWs6TYEvQ91U2FeKBOAOnt+uuS9RmkkZJ45GvStygw0Z
cs+nFPviC9MfqMEhor/D5uc/UdET28A9kkv7jyKYW6cb3DYTK5j4N+K1adFG
0BinCO64BmN8SzuW/5aAOuU2u9OQw6K39J+W+CyOFF+nQG9AqUIUTg2dVu48
C2iwju9iAD3xGGfkFOdFzlVwT8kLPjzE12GHMsHWLd8hQFzTzX6q91A3eu9B
GuIt9JiPQak6meHAzKQL7rS+e5S0n9zDNL7L6WVvDqJpeluEtnJhO95e72uV
/F/P0K3/ZkaTP+HWeLIkELvgluV7mG4JQW6C51vmnBiy3EuD/hJKvWRB0JIV
DpQkVmdAaa6x5VU1t56UZIzl13QjF9nfADisoVekek3BlzCAyUrA/5nV4A31
IwgVK0K6EIWsP8Crz7EZ7gNIYlFmCXdz1QvKRLGp4Ot4WCM1pwn5Mg/OMjcY
sJyimYoriLEc+t041VIabi7rGWzxCoxPbTxOCHxlV8RWK38JL1+f2fIs4wuE
aV3JnkhsJAcbJURSgaIzzAxhzCfU7FRSznjYxDSdANzwC1YHjc5JluTqdYk7
yyDSPMnMrT4FXZ5vkk/L4tp9AgfkFWjo8WwJRrX6qd/Gab+15z5iZVY7dbEk
6rxFSsHiy2Ll8Db+t0icV+CwF8BgEwi5NjCwxiudvrXoiutvEwe7Nddd9lNF
R1SH6r8BdYOA/LBmAAA=

-->

</rfc>
