<?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.7.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-masque-connect-ethernet-07" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title abbrev="CONNECT-ETHERNET">Proxying Ethernet in HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-masque-connect-ethernet-07"/>
    <author initials="A. R." surname="Sedeño" fullname="Alejandro R Sedeño">
      <organization>Google LLC</organization>
      <address>
        <email>asedeno@google.com</email>
      </address>
    </author>
    <date year="2025" month="June" day="19"/>
    <area>Transport</area>
    <workgroup>Multiplexed Application Substrate over QUIC Encryption</workgroup>
    <keyword>quic</keyword>
    <keyword>http</keyword>
    <keyword>datagram</keyword>
    <keyword>VPN</keyword>
    <keyword>proxy</keyword>
    <keyword>tunnels</keyword>
    <keyword>masque</keyword>
    <keyword>http-ng</keyword>
    <keyword>layer-2</keyword>
    <keyword>ethernet</keyword>
    <abstract>
      <?line 53?>

<t>This document describes how to proxy Ethernet frames in HTTP. This protocol
is similar to IP proxying in HTTP, but for Layer 2 instead of Layer 3. More
specifically, this document defines a protocol that allows an HTTP client to
create Layer 2 Ethernet tunnel through an HTTP server to an attached
physical or virtual Ethernet segment.</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-ethernet/draft-ietf-masque-connect-ethernet.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-masque-connect-ethernet/"/>.
      </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/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/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-ethernet"/>.</t>
    </note>
  </front>
  <middle>
    <?line 62?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>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 destination, a similar mechanism for
UDP <xref target="CONNECT-UDP"/>, and an additional mechanism for IP
<xref target="CONNECT-IP"/>. However, these mechanisms can't carry layer 2 frames
without further encapsulation inside of IP, for instance with EtherIP
<xref target="ETHERIP"/>, GUE <xref target="GUE"/> or L2TP
<xref target="L2TP"/> <xref target="L2TPv3"/>, which imposes an additional MTU cost.</t>
      <t>This document describes a protocol for exchanging Ethernet frames with an HTTP
server. Either participant in the HTTP connection can then relay Ethernet
frames to and from a local or virtual interface, allowing the bridging of two
Ethernet broadcast domains to establish a Layer 2 VPN. This can simplify
connectivity to network-connected appliances that are configured to only
interact with peers on the same Ethernet broadcast domain.</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>
      <t>This protocol necessarily involves additional framing overhead. When possible,
users should use higher-level proxying protocols, such as connect-ip or
connect-udp.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <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>
      <?line -18?>

<t>In this document, we use the term "Ethernet proxy" to refer to the HTTP server
that responds to the Ethernet proxying request. The term "client" is used in the
HTTP sense; the client constructs the Ethernet proxying request. If there are
HTTP intermediaries (as defined in <xref section="3.7" sectionFormat="of" target="HTTP"/>) between the client
and the Ethernet proxy, those are referred to as "intermediaries" in this
document. The term "Ethernet proxying endpoints" refers to both the client and
the Ethernet proxy.</t>
      <t>This document uses terminology from <xref target="QUIC"/>. Where this document
defines protocol types, the definition format uses the notation from <xref section="1.3" sectionFormat="of" target="QUIC"/>. This specification uses the variable-length integer encoding
from <xref section="16" sectionFormat="of" target="QUIC"/>. Variable-length integer values do not
need to be encoded in the minimum number of bytes necessary.</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 anchor="client-config">
      <name>Configuration of Clients</name>
      <t>Clients are configured to use Ethernet proxying over HTTP via a URI Template
<xref target="TEMPLATE"/>. The URI Templates used by this protocol do not require
any variables; implementations or extensions <bcp14>MAY</bcp14> specify their own. URI
Templates specified for this protocol <bcp14>MAY</bcp14> use the well-known location
<xref target="WELL-KNOWN"/> registered by this document.</t>
      <t>Examples are shown below:</t>
      <artwork><![CDATA[
https://example.org/.well-known/masque/ethernet/
https://proxy.example.org:4443/masque/ethernet/
https://masque.example.org/?user=bob
]]></artwork>
      <t>An implementation that supports connecting to different Ethernet segments might
add a "vlan-identifier" variable to specify which segment to connect to. The
optionality of variables needs to be considered when defining the template so
that variables are either self-identifying or possible to exclude in the syntax.
How valid values for such variables are communicated to the client is not a part
of this protocol.</t>
      <t>Hypothetical examples are shown below:</t>
      <artwork><![CDATA[
https://proxy.example.org:4443/masque/ethernet?vlan={vlan-identifier}
https://etherproxy.example.org/{vlan-identifier}
]]></artwork>
    </section>
    <section anchor="tunnelling-ethernet-over-http">
      <name>Tunnelling Ethernet over HTTP</name>
      <t>To allow negotiation of a tunnel for Ethernet over HTTP, this document defines
the "connect-ethernet" HTTP upgrade token. The resulting Ethernet tunnels use the
Capsule Protocol (see <xref section="3.2" sectionFormat="of" target="HTTP-DGRAM"/>) with HTTP Datagrams in the
format defined in <xref target="payload-format"/>.</t>
      <t>To initiate an Ethernet tunnel associated with a single HTTP stream, a client
issues a request containing the "connect-ethernet" upgrade token.</t>
      <t>By virtue of the definition of the Capsule Protocol (see <xref section="3.2" sectionFormat="of" target="HTTP-DGRAM"/>), Ethernet proxying requests do not carry any message content.
Similarly, successful Ethernet proxying responses also do not carry any message
content.</t>
      <t>Ethernet proxying over HTTP <bcp14>MUST</bcp14> be operated over TLS or QUIC encryption, or another
equivalent encryption protocol, to provide confidentiality, integrity, and
authentication.</t>
      <section anchor="ethernet-proxy-handling">
        <name>Ethernet Proxy Handling</name>
        <t>Upon receiving an Ethernet proxying request:</t>
        <ul spacing="normal">
          <li>
            <t>If the recipient is configured to use another HTTP proxy, it will act as an
intermediary by forwarding the request to another HTTP server. Note that
such intermediaries may need to re-encode 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).</t>
          </li>
          <li>
            <t>Otherwise, the recipient will act as an Ethernet proxy. The Ethernet proxy
can choose to reject the Ethernet proxying request or establish an Ethernet
tunnel.</t>
          </li>
        </ul>
        <t>The lifetime of the Ethernet tunnel is tied to the Ethernet proxying request
stream.</t>
        <t>A successful response (as defined in Sections <xref format="counter" target="resp1"/> and <xref format="counter" target="resp23"/>)
indicates that the Ethernet proxy has established an Ethernet tunnel and is
willing to proxy Ethernet frames. Any response other than a successful response
indicates that the request has failed; thus, the client <bcp14>MUST</bcp14> abort the request.</t>
      </section>
      <section anchor="req1">
        <name>HTTP/1.1 Request</name>
        <t>When using HTTP/1.1 <xref target="H1"/>, an Ethernet proxying request will meet the following
requirements:</t>
        <ul spacing="normal">
          <li>
            <t>The method <bcp14>SHALL</bcp14> be "GET".</t>
          </li>
          <li>
            <t>The request <bcp14>SHALL</bcp14> include a single Host header field containing the host
and optional port of the Ethernet proxy.</t>
          </li>
          <li>
            <t>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"/>).</t>
          </li>
          <li>
            <t>The request <bcp14>SHALL</bcp14> include an Upgrade header field with value "connect-ethernet".</t>
          </li>
        </ul>
        <t>An Ethernet proxying request that does not conform to these restrictions is
malformed. The recipient of such a malformed request <bcp14>MUST</bcp14> respond with an error
and <bcp14>SHOULD</bcp14> use the 400 (Bad Request) status code.</t>
        <t>For example, if the client is configured with the URI Template
"https://example.org/.well-known/masque/ethernet/" and wishes to open an
Ethernet tunnel, it could send the following request.</t>
        <figure anchor="fig-req-h1">
          <name>Example HTTP/1.1 Request</name>
          <sourcecode type="http-message"><![CDATA[
GET https://example.org/.well-known/masque/ethernet/ HTTP/1.1
Host: example.org
Connection: Upgrade
Upgrade: connect-ethernet
Capsule-Protocol: ?1
]]></sourcecode>
        </figure>
      </section>
      <section anchor="resp1">
        <name>HTTP/1.1 Response</name>
        <t>The server indicates success by replying with a response that conforms to the
following requirements:</t>
        <ul spacing="normal">
          <li>
            <t>The HTTP status code on the response <bcp14>SHALL</bcp14> be 101 (Switching Protocols).</t>
          </li>
          <li>
            <t>The response <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"/>).</t>
          </li>
          <li>
            <t>The response <bcp14>SHALL</bcp14> include a single Upgrade header field with value
"connect-ethernet".</t>
          </li>
          <li>
            <t>The response <bcp14>SHALL</bcp14> meet the requirements of HTTP responses that start the
Capsule Protocol; see <xref section="3.2" sectionFormat="of" target="HTTP-DGRAM"/>.</t>
          </li>
        </ul>
        <t>If any of these requirements are not met, the client <bcp14>MUST</bcp14> treat this proxying
attempt as failed and close the connection.</t>
        <t>For example, the server could respond with:</t>
        <figure anchor="fig-resp-h1">
          <name>Example HTTP/1.1 Response</name>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: connect-ethernet
Capsule-Protocol: ?1
]]></sourcecode>
        </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"/>, Ethernet proxying requests use HTTP
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>
            <t>The :method pseudo-header field <bcp14>SHALL</bcp14> be "CONNECT".</t>
          </li>
          <li>
            <t>The :protocol pseudo-header field <bcp14>SHALL</bcp14> be "connect-ethernet".</t>
          </li>
          <li>
            <t>The :authority pseudo-header field <bcp14>SHALL</bcp14> contain the authority of the IP
proxy.</t>
          </li>
          <li>
            <t>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 configured URL; see
<xref target="client-config"/>.</t>
          </li>
        </ul>
        <t>An Ethernet proxying request that does not conform to these restrictions is
malformed; see <xref section="8.1.1" sectionFormat="of" target="H2"/> and <xref section="4.1.2" sectionFormat="of" target="H3"/>.</t>
        <t>For example, if the client is configured with the URI Template
"https://example.org/.well-known/masque/ethernet/" and wishes to open an
Ethernet tunnel, it could send the following request.</t>
        <figure anchor="fig-req-h2">
          <name>Example HTTP/2 or HTTP/3 Request</name>
          <sourcecode type="http-message"><![CDATA[
HEADERS
:method = CONNECT
:protocol = connect-ethernet
:scheme = https
:path = /.well-known/masque/ethernet/
:authority = example.org
capsule-protocol = ?1
]]></sourcecode>
        </figure>
      </section>
      <section anchor="resp23">
        <name>HTTP/2 and HTTP/3 Responses</name>
        <t>The server indicates success by replying with a response that conforms to the
following requirements:</t>
        <ul spacing="normal">
          <li>
            <t>The HTTP status code on the response <bcp14>SHALL</bcp14> be in the 2xx (Successful) range.</t>
          </li>
          <li>
            <t>The response <bcp14>SHALL</bcp14> meet the requirements of HTTP responses that start the
Capsule Protocol; see <xref section="3.2" sectionFormat="of" target="HTTP-DGRAM"/>.</t>
          </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 request. As an example, any status code in the
3xx range will be treated as a failure and cause the client to abort the
request.</t>
        <t>For example, the server could respond with:</t>
        <figure anchor="fig-resp-h2">
          <name>Example HTTP/2 or HTTP/3 Response</name>
          <sourcecode type="http-message"><![CDATA[
HEADERS
:status = 200
capsule-protocol = ?1
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="context-identifiers">
      <name>Context Identifiers</name>
      <t>The mechanism for proxying Ethernet in HTTP defined in this document allows
future extensions to exchange HTTP Datagrams that carry different semantics from
Ethernet frames. Some of these extensions could augment Ethernet payloads with
additional data or compress Ethernet frame header fields, while others could
exchange data that is completely separate from Ethernet payloads. In order to
accomplish this, all HTTP Datagrams associated with Ethernet proxying requests
streams start with a Context ID field; see <xref target="payload-format"/>.</t>
      <t>Context IDs are 62-bit integers (0-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 Ethernet 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
request 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 synchronization 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 either the client or the Ethernet 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 Context IDs. Depending on the method being used, it is possible for
datagrams to be received with Context IDs that have not yet been registered.
For instance, this can be due to reordering of the packet containing the
datagram and the packet containing the registration message during transmission.</t>
    </section>
    <section anchor="payload-format">
      <name>HTTP Datagram Payload Format</name>
      <t>When associated with Ethernet proxying request streams, the HTTP Datagram
Payload field of HTTP Datagrams (see <xref target="HTTP-DGRAM"/>) 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>Ethernet Proxying HTTP Datagram Format</name>
        <artwork><![CDATA[
Ethernet Proxying HTTP Datagram Payload {
  Context ID (i),
  Payload (..),
}
]]></artwork>
      </figure>
      <t>The Ethernet Proxying HTTP Datagram Payload contains the following fields:</t>
      <dl spacing="compact">
        <dt>Context ID:</dt>
        <dd>
          <t>A variable-length integer 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>Ethernet frames are encoded using HTTP Datagrams with the Context ID set to
zero. When the Context ID is set to zero, the Payload field contains a full
Layer 2 Ethernet Frame (from the MAC destination field until the last byte of
the Frame check sequence field), as defined by IEEE 802.3, with support for
optional IEEE 802.1Q tagging (see <xref target="vlan-recommendations"/>).</t>
    </section>
    <section anchor="ethernet-frame-handling">
      <name>Ethernet Frame Handling</name>
      <t>This document defines a tunnelling mechanism that is conceptually an Ethernet
link. Implementations might need to handle some of the responsibilities of an
Ethernet switch or bridge if they do not delegate them to another implementation
such as a kernel. Those responsibilities are beyond the scope of this document,
and include, but are not limited to, the handling of broadcast packets and
multicast groups, or the local termination of PAUSE frames.</t>
      <t>If an Ethernet proxying endpoint fails to deliver a frame to an underlying
Ethernet segment, the endpoint <bcp14>MUST</bcp14> drop the frame.</t>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>Ethernet proxying in HTTP enables the bridging of Ethernet broadcast domains.
These examples are provided to help illustrate some of the ways in which Ethernet
proxying can be used.</t>
      <section anchor="example-remote">
        <name>Remote Access L2VPN</name>
        <t>The following example shows a point to point VPN setup where a client
appears to be connected to a remote Layer 2 network.</t>
        <figure anchor="diagram-tunnel">
          <name>L2VPN Tunnel Setup</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="128" width="520" viewBox="0 0 520 128" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,96" fill="none" stroke="black"/>
                <path d="M 80,32 L 80,96" fill="none" stroke="black"/>
                <path d="M 248,32 L 248,96" fill="none" stroke="black"/>
                <path d="M 320,32 L 320,96" fill="none" stroke="black"/>
                <path d="M 424,32 L 424,96" fill="none" stroke="black"/>
                <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
                <path d="M 248,32 L 320,32" fill="none" stroke="black"/>
                <path d="M 424,32 L 456,32" fill="none" stroke="black"/>
                <path d="M 80,48 L 248,48" fill="none" stroke="black"/>
                <path d="M 88,64 L 104,64" fill="none" stroke="black"/>
                <path d="M 224,64 L 240,64" fill="none" stroke="black"/>
                <path d="M 320,64 L 456,64" fill="none" stroke="black"/>
                <path d="M 80,80 L 248,80" fill="none" stroke="black"/>
                <path d="M 8,96 L 80,96" fill="none" stroke="black"/>
                <path d="M 248,96 L 320,96" fill="none" stroke="black"/>
                <path d="M 424,96 L 456,96" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="464,96 452,90.4 452,101.6" fill="black" transform="rotate(0,456,96)"/>
                <polygon class="arrowhead" points="464,64 452,58.4 452,69.6" fill="black" transform="rotate(0,456,64)"/>
                <polygon class="arrowhead" points="464,32 452,26.4 452,37.6" fill="black" transform="rotate(0,456,32)"/>
                <polygon class="arrowhead" points="96,64 84,58.4 84,69.6" fill="black" transform="rotate(180,88,64)"/>
                <g class="text">
                  <text x="484" y="36">HOST</text>
                  <text x="512" y="36">1</text>
                  <text x="284" y="52">L2</text>
                  <text x="360" y="52">Layer</text>
                  <text x="392" y="52">2</text>
                  <text x="44" y="68">Client</text>
                  <text x="128" y="68">Layer</text>
                  <text x="160" y="68">2</text>
                  <text x="196" y="68">Tunnel</text>
                  <text x="288" y="68">Proxy</text>
                  <text x="484" y="68">HOST</text>
                  <text x="512" y="68">2</text>
                  <text x="376" y="84">Broadcast</text>
                  <text x="364" y="100">Domain</text>
                  <text x="484" y="100">HOST</text>
                  <text x="512" y="100">3</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+--------+                    +--------+            +---> HOST 1
|        +--------------------+   L2   |  Layer 2   |
| Client |<--Layer 2 Tunnel---|  Proxy +------------+---> HOST 2
|        +--------------------+        |  Broadcast |
+--------+                    +--------+  Domain    +---> HOST 3

]]></artwork>
          </artset>
        </figure>
        <t>In this case, the client connects to the Ethernet proxy and immediately can
start sending ethernet frames to the attached broadcast domain.</t>
        <figure anchor="fig-full-tunnel">
          <name>VPN Full-Tunnel Example</name>
          <artwork><![CDATA[
[[ From Client ]]             [[ From Ethernet Proxy ]]

SETTINGS
  H3_DATAGRAM = 1

                              SETTINGS
                                ENABLE_CONNECT_PROTOCOL = 1
                                H3_DATAGRAM = 1

STREAM(44): HEADERS
:method = CONNECT
:protocol = connect-ethernet
:scheme = https
:path = /.well-known/masque/ethernet/
:authority = proxy.example.com
capsule-protocol = ?1

                              STREAM(44): HEADERS
                              :status = 200
                              capsule-protocol = ?1

DATAGRAM
Quarter Stream ID = 11
Context ID = 0
Payload = Encapsulated Ethernet Frame

                              DATAGRAM
                              Quarter Stream ID = 11
                              Context ID = 0
                              Payload = Encapsulated Ethernet Frame
]]></artwork>
        </figure>
      </section>
      <section anchor="site-to-site-l2vpn">
        <name>Site-to-Site L2VPN</name>
        <t>The following example shows a site-to-site VPN setup where a client
joins a locally attached broadcast domain to a remote broadcast domain
through the Proxy.</t>
        <figure anchor="diagram-s2s">
          <name>Site-to-site L2VPN Example</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="256" width="432" viewBox="0 0 432 256" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 80,32 L 80,96" fill="none" stroke="black"/>
                <path d="M 96,96 L 96,192" fill="none" stroke="black"/>
                <path d="M 152,32 L 152,96" fill="none" stroke="black"/>
                <path d="M 280,32 L 280,96" fill="none" stroke="black"/>
                <path d="M 336,96 L 336,192" fill="none" stroke="black"/>
                <path d="M 352,32 L 352,96" fill="none" stroke="black"/>
                <path d="M 80,32 L 152,32" fill="none" stroke="black"/>
                <path d="M 280,32 L 352,32" fill="none" stroke="black"/>
                <path d="M 152,48 L 280,48" fill="none" stroke="black"/>
                <path d="M 160,64 L 176,64" fill="none" stroke="black"/>
                <path d="M 256,64 L 272,64" fill="none" stroke="black"/>
                <path d="M 152,80 L 280,80" fill="none" stroke="black"/>
                <path d="M 80,96 L 152,96" fill="none" stroke="black"/>
                <path d="M 280,96 L 352,96" fill="none" stroke="black"/>
                <path d="M 64,128 L 96,128" fill="none" stroke="black"/>
                <path d="M 336,128 L 368,128" fill="none" stroke="black"/>
                <path d="M 64,160 L 96,160" fill="none" stroke="black"/>
                <path d="M 336,160 L 368,160" fill="none" stroke="black"/>
                <path d="M 64,192 L 96,192" fill="none" stroke="black"/>
                <path d="M 336,192 L 368,192" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="376,192 364,186.4 364,197.6" fill="black" transform="rotate(0,368,192)"/>
                <polygon class="arrowhead" points="376,160 364,154.4 364,165.6" fill="black" transform="rotate(0,368,160)"/>
                <polygon class="arrowhead" points="376,128 364,122.4 364,133.6" fill="black" transform="rotate(0,368,128)"/>
                <polygon class="arrowhead" points="72,192 60,186.4 60,197.6" fill="black" transform="rotate(180,64,192)"/>
                <polygon class="arrowhead" points="72,160 60,154.4 60,165.6" fill="black" transform="rotate(180,64,160)"/>
                <polygon class="arrowhead" points="72,128 60,122.4 60,133.6" fill="black" transform="rotate(180,64,128)"/>
                <g class="text">
                  <text x="316" y="52">L2</text>
                  <text x="116" y="68">Client</text>
                  <text x="188" y="68">L2</text>
                  <text x="228" y="68">Tunnel</text>
                  <text x="320" y="68">Proxy</text>
                  <text x="20" y="132">HOST</text>
                  <text x="48" y="132">A</text>
                  <text x="128" y="132">Layer</text>
                  <text x="160" y="132">2</text>
                  <text x="288" y="132">Layer</text>
                  <text x="320" y="132">2</text>
                  <text x="396" y="132">HOST</text>
                  <text x="424" y="132">1</text>
                  <text x="144" y="148">Broadcast</text>
                  <text x="288" y="148">Broadcast</text>
                  <text x="20" y="164">HOST</text>
                  <text x="48" y="164">B</text>
                  <text x="132" y="164">Domain</text>
                  <text x="300" y="164">Domain</text>
                  <text x="396" y="164">HOST</text>
                  <text x="424" y="164">2</text>
                  <text x="20" y="196">HOST</text>
                  <text x="48" y="196">C</text>
                  <text x="396" y="196">HOST</text>
                  <text x="424" y="196">3</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
         +--------+               +--------+
         |        +---------------+   L2   |
         | Client |---L2 Tunnel---|  Proxy |
         |        +---------------+        |
         +-+------+               +------+-+
           |                             |
HOST A <---+ Layer 2             Layer 2 +---> HOST 1
           | Broadcast         Broadcast |
HOST B <---+ Domain               Domain +---> HOST 2
           |                             |
HOST C <---+                             +---> HOST 3



]]></artwork>
          </artset>
        </figure>
        <t>In this case, the client connects to the Ethernet proxy and immediately can
start relaying Ethernet frames from its attached broadcast domain to the
proxy. The difference between this example and <xref target="example-remote"/> is limited to
what the Client is doing with the the tunnel; the exchange between the Client
and the Proxy is the same as in <xref target="fig-full-tunnel"/> above.</t>
      </section>
    </section>
    <section anchor="performance-considerations">
      <name>Performance Considerations</name>
      <t>When the protocol running inside the tunnel uses congestion control (e.g.,
<xref target="TCP"/> or <xref target="QUIC"/>), the proxied traffic will incur at least two nested
congestion controllers. Implementers will benefit from reading the guidance in
<xref section="3.1.11" sectionFormat="of" target="UDP-USAGE"/>. By default the tunneling of Ethernet
frames <bcp14>MUST NOT</bcp14> assume that the carried Ethernet frames contain congestion
controlled traffic. Optimizations for traffic flows carried within the Ethernet
Frames <bcp14>MAY</bcp14> be done in cases where the content of the Ethernet Frames have been
identified to be congestion controlled traffic.</t>
      <t>Some implementations might find it benefitial to maintain a small buffer of
frames to be sent through the tunnel to smooth out short term variations and
bursts in tunnel capacity. Any such buffer <bcp14>MUST</bcp14> be limited, and when exceeded
any Ethernet frames that would otherwise be buffered <bcp14>MUST</bcp14> be dropped.</t>
      <t>When the protocol running inside the tunnel uses loss recovery (e.g., <xref target="TCP"/> or
<xref target="QUIC"/>) and the outer 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,
Ethernet proxying <bcp14>SHOULD</bcp14> be performed over HTTP/3 to allow leveraging the QUIC
DATAGRAM frame.</t>
      <section anchor="mtu-and-frame-ordering-considerations">
        <name>MTU and Frame Ordering Considerations</name>
        <t>When using HTTP/3 with the QUIC Datagram extension <xref target="QUIC-DGRAM"/>,
Ethernet frames can be transmitted in QUIC DATAGRAM frames. Since DATAGRAM
frames cannot be fragmented, they can only carry Ethernet frames up to a given
length determined by the QUIC connection configuration and the Path MTU
(PMTU). Implementations <bcp14>MAY</bcp14> rely on <xref target="QUIC"/>'s use of <xref target="DPLPMTUD"/> to
probe and discover the PMTU over the connection's lifetime, and adjust any
associated interface MTU as needed. Furthermore, the UDP packets carrying these
frames could be reordered by the network.</t>
        <t>When using HTTP/1.1 or HTTP/2, and when using HTTP/3 without the QUIC Datagram
extension <xref target="QUIC-DGRAM"/>, Ethernet frames are transmitted in DATAGRAM capsules as
defined in <xref target="HTTP-DGRAM"/>. DATAGRAM capsules are transmitted reliably over an
underlying stream, maintaining frame order, though they could be split across
multiple QUIC or TCP packets.</t>
        <t>The trade-off between supporting a larger MTU and avoiding fragmentation should
be considered when deciding what mode(s) to operate in. Implementations <bcp14>SHOULD
NOT</bcp14> intentionally reorder Ethernet frames, but are not required to provide
guaranteed in-order delivery. If in-order delivery of Ethernet frames is
required, DATAGRAM capsules can be used.</t>
      </section>
      <section anchor="vlan-recommendations">
        <name>IEEE 802.1Q VLAN tagging</name>
        <t>While the protocol as described can proxy Ethernet frames with IEEE 802.1Q VLAN
tags, it is <bcp14>RECOMMENDED</bcp14> that individual VLANs be proxied in separate
connections, and VLAN tags be stripped and applied by the Ethernet proxying
endpoints as needed.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>There are risks in allowing arbitrary clients to establish a tunnel to a Layer 2
network. Bad actors could abuse this capability to attack hosts on that network
that they would otherwise be unable to reach. HTTP servers that support Ethernet
proxying <bcp14>SHOULD</bcp14> restrict its use to authenticated users. Depending on the
deployment, possible authentication mechanisms include mutual TLS between IP
proxying endpoints, HTTP-based authentication via the HTTP Authorization header
<xref target="HTTP"/>, or even bearer tokens. Proxies can enforce policies for authenticated
users to further constrain client behavior or deal with possible abuse. For
example, proxies can rate limit individual clients that send an excessively
large amount of traffic through the proxy.</t>
      <t>Users of this protocol may send arbitrary Ethernet frames through the tunnel,
including frames with arbitrary source MAC addresses. This could allow
impersonation of other hosts, poisoning of ARP <xref target="RFC826"/>, NDP <xref target="RFC4861"/> and
CAM (Content Addressable Memory) tables, and cause a denial of service to other
hosts on the network. These are the same attacks available to an arbitrary
client with physical access to the network. An implementation that is intended
for point-to-site connections might limit clients to a single source MAC
address, or Ethernet proxying endpoints might be configured to limit forwarding
to pre-configured MAC addresses, though such filtering is outside the scope of
this protocol. Dynamic signalling or negotiation of MAC address filtering is
left to future extensions.</t>
      <t>This protocol is agnostic to where on the Ethernet segment a gateway for
higher-level routing might be located. A client may connect via an Ethernet
proxy and discover an existing gateway on the Ethernet segment, supply a new
gateway to the Ethernet segment, both, or neither.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="http-upgrade-token">
        <name>HTTP Upgrade Token</name>
        <t>This document will request IANA to register "connect-ethernet" in the HTTP
Upgrade Token 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-ethernet</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>Proxying of Ethernet Payloads</t>
          </dd>
          <dt>Expected Version Tokens:</dt>
          <dd>
            <t>None</t>
          </dd>
          <dt>References:</dt>
          <dd>
            <t>This document</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-suffix">
        <name>Updates to the MASQUE URI Suffixes Registry</name>
        <t>This document will request IANA to register "ethernet" in the MASQUE URI
Suffixes Registry maintained at &lt;<eref target="https://www.iana.org/assignments/masque"/>&gt;,
created by <xref section="12.2" sectionFormat="of" target="CONNECT-IP"/>.</t>
        <table anchor="iana-suffixes-table">
          <name>New MASQUE URI Suffixes</name>
          <thead>
            <tr>
              <th align="left">Path Segment</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">ethernet</td>
              <td align="left">Ethernet Proxying</td>
              <td align="left">This Document</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <displayreference target="H1" to="HTTP/1.1"/>
    <displayreference target="H2" to="HTTP/2"/>
    <displayreference target="H3" to="HTTP/3"/>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="H1">
          <front>
            <title>HTTP/1.1</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <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"/>
            <author fullname="C. Benfield" initials="C." role="editor" surname="Benfield"/>
            <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"/>
            <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"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <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 (TCP)</title>
            <author fullname="W. Eddy" initials="W." role="editor" surname="Eddy"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document specifies the Transmission Control Protocol (TCP). TCP is an important transport-layer protocol in the Internet protocol stack, and it has continuously evolved over decades of use and growth of the Internet. Over this time, a number of changes have been made to TCP as it was specified in RFC 793, though these have only been documented in a piecemeal fashion. This document collects and brings those changes together with the protocol specification from RFC 793. This document obsoletes RFC 793, as well as RFCs 879, 2873, 6093, 6429, 6528, and 6691 that updated parts of RFC 793. It updates RFCs 1011 and 1122, and it should be considered as a replacement for the portions of those documents dealing with TCP requirements. It also updates RFC 5961 by adding a small clarification in reset handling while in the SYN-RECEIVED state. The TCP header control bits from RFC 793 have also been updated based on RFC 3168.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="7"/>
          <seriesInfo name="RFC" value="9293"/>
          <seriesInfo name="DOI" value="10.17487/RFC9293"/>
        </reference>
        <reference anchor="CONNECT-UDP">
          <front>
            <title>Proxying UDP in HTTP</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <date month="August" year="2022"/>
            <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>
          </front>
          <seriesInfo name="RFC" value="9298"/>
          <seriesInfo name="DOI" value="10.17487/RFC9298"/>
        </reference>
        <reference anchor="CONNECT-IP">
          <front>
            <title>Proxying IP in HTTP</title>
            <author fullname="T. Pauly" initials="T." role="editor" surname="Pauly"/>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="A. Chernyakhovsky" initials="A." surname="Chernyakhovsky"/>
            <author fullname="M. Kühlewind" initials="M." surname="Kühlewind"/>
            <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
            <date month="October" year="2023"/>
            <abstract>
              <t>This document describes how to proxy IP packets in HTTP. This protocol is similar to UDP proxying in HTTP but allows transmitting arbitrary IP packets. More specifically, this document defines a protocol that allows an HTTP client to create an IP tunnel through an HTTP server that acts as an IP proxy. This document updates RFC 9298.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9484"/>
          <seriesInfo name="DOI" value="10.17487/RFC9484"/>
        </reference>
        <reference anchor="L2TP">
          <front>
            <title>Layer Two Tunneling Protocol "L2TP"</title>
            <author fullname="W. Townsley" initials="W." surname="Townsley"/>
            <author fullname="A. Valencia" initials="A." surname="Valencia"/>
            <author fullname="A. Rubens" initials="A." surname="Rubens"/>
            <author fullname="G. Pall" initials="G." surname="Pall"/>
            <author fullname="G. Zorn" initials="G." surname="Zorn"/>
            <author fullname="B. Palter" initials="B." surname="Palter"/>
            <date month="August" year="1999"/>
            <abstract>
              <t>This document describes the Layer Two Tunneling Protocol (L2TP). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2661"/>
          <seriesInfo name="DOI" value="10.17487/RFC2661"/>
        </reference>
        <reference anchor="L2TPv3">
          <front>
            <title>Layer Two Tunneling Protocol - Version 3 (L2TPv3)</title>
            <author fullname="J. Lau" initials="J." role="editor" surname="Lau"/>
            <author fullname="M. Townsley" initials="M." role="editor" surname="Townsley"/>
            <author fullname="I. Goyret" initials="I." role="editor" surname="Goyret"/>
            <date month="March" year="2005"/>
            <abstract>
              <t>This document describes "version 3" of the Layer Two Tunneling Protocol (L2TPv3). L2TPv3 defines the base control protocol and encapsulation for tunneling multiple Layer 2 connections between two IP nodes. Additional documents detail the specifics for each data link type being emulated. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3931"/>
          <seriesInfo name="DOI" value="10.17487/RFC3931"/>
        </reference>
        <reference anchor="HTTP-DGRAM">
          <front>
            <title>HTTP Datagrams and the Capsule Protocol</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="L. Pardue" initials="L." surname="Pardue"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes HTTP Datagrams, a convention for conveying multiplexed, potentially unreliable datagrams inside an HTTP connection.</t>
              <t>In HTTP/3, HTTP Datagrams can be sent unreliably using the QUIC DATAGRAM extension. When the QUIC DATAGRAM frame is unavailable or undesirable, HTTP Datagrams can be sent using the Capsule Protocol, which is a more general convention for conveying data in HTTP connections.</t>
              <t>HTTP Datagrams and the Capsule Protocol are intended for use by HTTP extensions, not applications.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9297"/>
          <seriesInfo name="DOI" value="10.17487/RFC9297"/>
        </reference>
        <reference anchor="EXT-CONNECT2">
          <front>
            <title>Bootstrapping WebSockets with HTTP/2</title>
            <author fullname="P. McManus" initials="P." surname="McManus"/>
            <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="R. Hamilton" initials="R." surname="Hamilton"/>
            <date month="June" 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="RFC" value="9220"/>
          <seriesInfo name="DOI" value="10.17487/RFC9220"/>
        </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"/>
            <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"/>
            <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="QUIC">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <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"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="M. Hadley" initials="M." surname="Hadley"/>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="D. Orchard" initials="D." surname="Orchard"/>
            <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="WELL-KNOWN">
          <front>
            <title>Well-Known Uniform Resource Identifiers (URIs)</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="May" year="2019"/>
            <abstract>
              <t>This memo defines a path prefix for "well-known locations", "/.well-known/", in selected Uniform Resource Identifier (URI) schemes.</t>
              <t>In doing so, it obsoletes RFC 5785 and updates the URI schemes defined in RFC 7230 to reserve that space. It also updates RFC 7595 to track URI schemes that support well-known URIs in their registry.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8615"/>
          <seriesInfo name="DOI" value="10.17487/RFC8615"/>
        </reference>
        <reference anchor="QUIC-DGRAM">
          <front>
            <title>An Unreliable Datagram Extension to QUIC</title>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <author fullname="E. Kinnear" initials="E." surname="Kinnear"/>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <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>
        <reference anchor="DPLPMTUD">
          <front>
            <title>Packetization Layer Path MTU Discovery for Datagram Transports</title>
            <author fullname="G. Fairhurst" initials="G." surname="Fairhurst"/>
            <author fullname="T. Jones" initials="T." surname="Jones"/>
            <author fullname="M. Tüxen" initials="M." surname="Tüxen"/>
            <author fullname="I. Rüngeler" initials="I." surname="Rüngeler"/>
            <author fullname="T. Völker" initials="T." surname="Völker"/>
            <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="RFC826">
          <front>
            <title>An Ethernet Address Resolution Protocol: Or Converting Network Protocol Addresses to 48.bit Ethernet Address for Transmission on Ethernet Hardware</title>
            <author fullname="D. Plummer" initials="D." surname="Plummer"/>
            <date month="November" year="1982"/>
            <abstract>
              <t>The purpose of this RFC is to present a method of Converting Protocol Addresses (e.g., IP addresses) to Local Network Addresses (e.g., Ethernet addresses). This is an issue of general concern in the ARPA Internet Community at this time. The method proposed here is presented for your consideration and comment. This is not the specification of an Internet Standard.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="37"/>
          <seriesInfo name="RFC" value="826"/>
          <seriesInfo name="DOI" value="10.17487/RFC0826"/>
        </reference>
        <reference anchor="RFC4861">
          <front>
            <title>Neighbor Discovery for IP version 6 (IPv6)</title>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <author fullname="E. Nordmark" initials="E." surname="Nordmark"/>
            <author fullname="W. Simpson" initials="W." surname="Simpson"/>
            <author fullname="H. Soliman" initials="H." surname="Soliman"/>
            <date month="September" year="2007"/>
            <abstract>
              <t>This document specifies the Neighbor Discovery protocol for IP Version 6. IPv6 nodes on the same link use Neighbor Discovery to discover each other's presence, to determine each other's link-layer addresses, to find routers, and to maintain reachability information about the paths to active neighbors. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4861"/>
          <seriesInfo name="DOI" value="10.17487/RFC4861"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="ETHERIP">
          <front>
            <title>EtherIP: Tunneling Ethernet Frames in IP Datagrams</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="S. Hollenbeck" initials="S." surname="Hollenbeck"/>
            <date month="September" year="2002"/>
          </front>
          <seriesInfo name="RFC" value="3378"/>
          <seriesInfo name="DOI" value="10.17487/RFC3378"/>
        </reference>
        <reference anchor="GUE">
          <front>
            <title>Generic UDP Encapsulation</title>
            <author fullname="Tom Herbert" initials="T." surname="Herbert">
              <organization>Quantonium</organization>
            </author>
            <author fullname="Lucy Yong" initials="L." surname="Yong">
              <organization>Independent</organization>
            </author>
            <author fullname="Osama Zia" initials="O." surname="Zia">
              <organization>Microsoft</organization>
            </author>
            <date day="26" month="October" year="2019"/>
            <abstract>
              <t>   This specification describes Generic UDP Encapsulation (GUE), which
   is a scheme for using UDP to encapsulate packets of different IP
   protocols for transport across layer 3 networks. By encapsulating
   packets in UDP, specialized capabilities in networking hardware for
   efficient handling of UDP packets can be leveraged. GUE specifies
   basic encapsulation methods upon which higher level constructs, such
   as tunnels and overlay networks for network virtualization, can be
   constructed. GUE is extensible by allowing optional data fields as
   part of the encapsulation, and is generic in that it can encapsulate
   packets of various IP protocols.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-intarea-gue-09"/>
        </reference>
        <reference anchor="UDP-USAGE">
          <front>
            <title>UDP Usage Guidelines</title>
            <author fullname="L. Eggert" initials="L." surname="Eggert"/>
            <author fullname="G. Fairhurst" initials="G." surname="Fairhurst"/>
            <author fullname="G. Shepherd" initials="G." surname="Shepherd"/>
            <date month="March" year="2017"/>
            <abstract>
              <t>The User Datagram Protocol (UDP) provides a minimal message-passing transport that has no inherent congestion control mechanisms. This document provides guidelines on the use of UDP for the designers of applications, tunnels, and other protocols that use UDP. Congestion control guidelines are a primary focus, but the document also provides guidance on other topics, including message sizes, reliability, checksums, middlebox traversal, the use of Explicit Congestion Notification (ECN), Differentiated Services Code Points (DSCPs), and ports.</t>
              <t>Because congestion control is critical to the stable operation of the Internet, applications and other protocols that choose to use UDP as an Internet transport must employ mechanisms to prevent congestion collapse and to establish some degree of fairness with concurrent traffic. They may also need to implement additional mechanisms, depending on how they use UDP.</t>
              <t>Some guidance is also applicable to the design of other protocols (e.g., protocols layered directly on IP or via IP-based tunnels), especially when these protocols do not themselves provide congestion control.</t>
              <t>This document obsoletes RFC 5405 and adds guidelines for multicast UDP usage.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="145"/>
          <seriesInfo name="RFC" value="8085"/>
          <seriesInfo name="DOI" value="10.17487/RFC8085"/>
        </reference>
      </references>
    </references>
    <?line 618?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Much of the initial version of this draft borrows heavily from <xref target="CONNECT-IP"/>.</t>
      <t>The author would like to thank Alexander Chernyakhovsky and David Schinazi
for their advice while preparing this document, and Etienne Dechamps for
useful discussion on the subject material. Additionally, Mirja Kühlewind,
Magnus Westerlund, and Martin Thompson provided valuable feedback on the
document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
b+j6u+P+C+nqQ0kIYQAA

-->

</rfc>
