<?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.29 (Ruby 3.1.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-asedeno-masque-connect-ethernet-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.1 -->
  <front>
    <title abbrev="CONNECT-ETHERNET">Proxying Ethernet in HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-asedeno-masque-connect-ethernet-00"/>
    <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="2023" month="May" day="01"/>
    <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>
      <t>This document describes how to proxy Ethernet frames in HTTP. This
protocol is similar to IP proxying in HTTP, but allows transmitting arbitrary
Ethernet frames. More specifically, this document defines a protocol that
allows an HTTP client to create Layer 2 Ethernet tunnel through and HTTP server
that acts as an Ethernet switch.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://asedeno.github.io/draft-asedeno-masque-connect-ethernet/draft-asedeno-masque-connect-ethernet.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-asedeno-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/asedeno/draft-asedeno-masque-connect-ethernet"/>.</t>
    </note>
  </front>
  <middle>
    <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 tunnelling Ethernet frames through an
HTTP server acting as an Ethernet switch over HTTP. This can be used to
establish a Layer 2 VPN, which can then bridge two Ethernet broadcast
domains. 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>
    </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>
      <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 HTP via a URL.</t>
      <t>Examples are shown below:</t>
      <artwork><![CDATA[
https://example.org/.well-known/masque/ethernet/
https://proxy.example.org:4443/masque/ethernet/
https://proxy.example.org:4443/masque/ethernet/
https://masque.example.org/?user=bob
]]></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>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).</li>
          <li>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.</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>the method <bcp14>SHALL</bcp14> be "GET".</li>
          <li>the request <bcp14>SHALL</bcp14> include a single Host header field containing the host
and optional port of the Ethernet 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-ethernet".</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 URL
"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 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 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"/>).</li>
          <li>the response <bcp14>SHALL</bcp14> include a single Upgrade header field with value
"connect-ethernet".</li>
          <li>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"/>.</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>The :method pseudo-header field <bcp14>SHALL</bcp14> be "CONNECT".</li>
          <li>The :protocol pseudo-header field <bcp14>SHALL</bcp14> be "connect-ethernet".</li>
          <li>The :authority pseudo-header field <bcp14>SHALL</bcp14> contain the authority of the IP
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 configured URL; see
<xref target="client-config"/>.</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 URL
"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 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 in the 2xx (Successful) range.</li>
          <li>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"/>.</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 can augment Ethernet payloads with
additional data or compress Ethernet frame header fields, while others can
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).</t>
    </section>
    <section anchor="ethernet-frame-handling">
      <name>Ethernet Frame Handling</name>
      <t>This document defines a tunneling mechanism that is conceptually an Ethernet
link. Implementations might need to handle some of the responsibilities of an
Ethernet switch if they do not delegate them to another implementation such as
a kernel.</t>
      <section anchor="link-status-and-error-signalling">
        <name>Link Status and Error Signalling</name>
        <ul spacing="normal">
          <li>Maybe borrow some bits from L2TPv3 <xref target="L2TPv3"/> for fault signalling via capsule.</li>
        </ul>
      </section>
      <section anchor="broadcast-and-multicast">
        <name>Broadcast and Multicast</name>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>Some examples; if you can, a Layer 3 option is probably better, but hey, Layer 2.</t>
      <section anchor="layer-2-vpn">
        <name>Layer 2 VPN</name>
        <t>The following example shows how 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>L2 VPN 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">
                <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="372" 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>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</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 $IANA_URL_TBD, created by CONNECT-IP
<xref 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>
      <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 (TCP)</title>
            <author fullname="W. Eddy" initials="W." role="editor" surname="Eddy">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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="L2TP">
          <front>
            <title>Layer Two Tunneling Protocol "L2TP"</title>
            <author fullname="W. Townsley" initials="W." surname="Townsley">
              <organization/>
            </author>
            <author fullname="A. Valencia" initials="A." surname="Valencia">
              <organization/>
            </author>
            <author fullname="A. Rubens" initials="A." surname="Rubens">
              <organization/>
            </author>
            <author fullname="G. Pall" initials="G." surname="Pall">
              <organization/>
            </author>
            <author fullname="G. Zorn" initials="G." surname="Zorn">
              <organization/>
            </author>
            <author fullname="B. Palter" initials="B." surname="Palter">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="M. Townsley" initials="M." role="editor" surname="Townsley">
              <organization/>
            </author>
            <author fullname="I. Goyret" initials="I." role="editor" surname="Goyret">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="L. Pardue" initials="L." surname="Pardue">
              <organization/>
            </author>
            <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">
              <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="R. Hamilton" initials="R." surname="Hamilton">
              <organization/>
            </author>
            <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">
              <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="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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="CONNECT-IP">
          <front>
            <title>Proxying IP in HTTP</title>
            <author fullname="Tommy Pauly" initials="T." surname="Pauly">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="David Schinazi" initials="D." surname="Schinazi">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Alex Chernyakhovsky" initials="A." surname="Chernyakhovsky">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Mirja Kühlewind" initials="M." surname="Kühlewind">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Magnus Westerlund" initials="M." surname="Westerlund">
              <organization>Ericsson</organization>
            </author>
            <date day="28" month="April" 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="Internet-Draft" value="draft-ietf-masque-connect-ip-13"/>
        </reference>
        <reference anchor="ETHERIP">
          <front>
            <title>EtherIP: Tunneling Ethernet Frames in IP Datagrams</title>
            <author fullname="R. Housley" initials="R." surname="Housley">
              <organization/>
            </author>
            <author fullname="S. Hollenbeck" initials="S." surname="Hollenbeck">
              <organization/>
            </author>
            <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>
      </references>
    </references>
    <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.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
lBrz34QBTr3sYg9kb2/vi8Qd3fmXyHvFrSMmzfVDLk8oCQgWO7O31/WSF28/
mzWQ1eRJ43aZKpLEtMiRfxo9OZcXANf0AxKf6Wb2mgSO86VlUszohcIUpCEn
sF4zdZ36NJGpTYT5KVXMaDWlJ+AsOPtsUSlUwTJGZFOQLvDyxjQyMTUobKg8
JLb5GJpJ+D0RIZfbQ2qxznUMwqeXikosyZetLagjTxKYP6SrXqECGolpMmTr
Dl2gN7jVTM8/j6hsFsxYZbbJfH/2R7wrp80bLgrKrqyxr3vtSZS7izwjt/ba
vTemWP7wuvdmFz/b3e2ObI5y13rKiGduFk3TovCNYnlXqaur5pgJ2vcEoULS
s7B+mePY604sSZP2bzpL3eUjritcJWrB9XZUSIfmPMSEsO2q73TS5stHxKK8
gLbblbsJdgM5c56G4doQzwg6oHZlqsbGsEjTLFWgXZ5TUG3bDMK8xBlpOtnv
0YmjdUyNiYCdtPfayXqXQzVCsCINuEYw5/iy1UR4BaoSnRYGxNSvClU6pNqg
oATCOzBVzvcFWOqBOrRBU+tH70o5cLJMl9um4VgbUtmYM6NUPHk2/AXH1FZE
ngS1ZI1pthtecdfgm00Ro+0GUamfJWX9njspqoyCOYXTSqnu0oiREt0DILPN
KgnmWeqKZn3hgq8eqBQApnhxrCrKRDnZCXavSA/XM9S2YG+SsFBs1dgPup6S
IMlDtcIN0IeObNLYi2qabSqkwNyxXmK8xYk4LoBz+7AXhXFdQtDdXelZRMXj
dMvOtxOKtXeyslRUUiWEhgVgdW6ois3torTzeCr2BpMuaVk8yl3aMLC8l3U4
np0R1vOCCFRWlQZBkcFJvFtzRihiLrarm3jyBex1jaD7DSQIzRUR6cgj4hhd
3CXVZPVE4zM8gp0NKirC0uWlrBZ0x2MNeVUIyZHM1R2jpBWW96G8uNWA8SC8
4eo/7ZW1FYGwsFczJMG0Sg47wLbc6uYFrV+VdKU2G7vJGmvdZWlYEH1b6Ewv
LlCVQ81nyUu2xvIdn+7jq4avsRmEL/ZsrmBjp4TNbi7h5uIQ16Hb0n3ae+P6
nfrcXq+tXaCLx8cQx5Vesbww5IqTpneuODzOiNCd7dFwPMTJBMMXXnjTE/t5
6fIOrDDIRx6vbNjAK/ypAFcO4nhNHBB+qC3GhQUwHmaXb8+9tgQLbOwRcKhX
wiv/2svmE3zEcKBc9la0jbeTrnWr04HfTx6gVlnnEepnZmIZadlo60vXZWXV
naKLZ1mnB1UkAz8GcvhsjRNj0So1DzfqR0ZVb7YiGfC1VyJXQJzR5TEoZJFQ
kFtlG8EWVn1/JYu/MsGRmrXdYZYubcrCUTcRXvDH6AzBV6IHRjuDoVGawY6g
YctaJNJ9QYY0SwvU7Cxabls4pO5VlG9UbLvPIM1sxIK97NJB2kBcLMuJj+O5
FyRfumGXisgLPVpp39nNoMWssRRg910EIETQYVX1i2yavb1jy8Z5JJQtxEmw
tIMWAmbwOygwzbrxdV1sKKtHSZWzMRgkpwIRoC0kbnTAujnqI7EPn1/d6Hjx
gUCyiGOx9hbGO9LALZ/dOhseVt9gsGQKYFtM7TFWdWPxG6b18QETCOY6uIXF
gE1EiEGjtsn8NmYqizWaxfjutRJODiGLygiwDGaA+jIvGAVUbu+h/y2oAYY6
SE4xallEs3nuKybmODVIQRmtuUxDNIliEEJNKYhqospW8LuqCouCQh3rmSLR
0ItqNUdUm99eJBqh5C2Si/ky+xSWCjaTQmt0cyO8QJTX0QxiQOaM/FqeqRXI
GIT2GVhfWvEE0QodE7/+ID/w50cCgVMFCBpU0hGhujsLHnjat74mHyel1/Do
xQE8IluXJwRFsjZzAJEQ7HuVFijxO/7lhL69pJacEpmA5Voh5swRXyJmBkbt
uBcZ7I7LtxrYlJZW0c5F1YD8GpSSDNKwHoG+wCiU8mKJTg4TIb4cl2q7HYAp
32agSCXTi7Ty1pF958FmE5Uyd8DnP7Xt35/khr/Nrfj0B3l8AQFFV3xa61v9
w3GnPfgHurl1wA8YxdWU8tObdts1cP0gjILOXNZUo1mZtvcF09IfdCsP/dMf
2e0RvbVR321flL40IqPVdm89sTc9pQO2G8Hrj2KJltBVnONtYS2/Zg/smbJx
Lk9ZUO0TJS8ww8FIwli8qxs21tJRea4CrHnZ8BYK7uDDBzBFoEb2ED5+rPHB
tTZqzD5+BOUYjccn5++v6WXAXz2GOQBBEJtYWv5VRr78Nzofvj0d/WrT2b9e
Xl2MLw4vTmmOz41dW9P1+Go0PNva398eyP+9lHm92Bbf1dycSfwcCzds5uUR
9fTly32fWZKHynWoi64XONytxtEHcs/j/QN8c9m+LAdyWPeAn9uon/Plbs+s
6OVBjfW+3PnLdlNNACPCaBgFtAjv8LE1C9bVcOr3WkNQjFJymNLrhIz7MP17
cXThW+ndzuH5cK2XvSzxpQJjLOFt4grKqbtYjchUI+kNBcFRWbkvapSlTTOs
8GVvQlWYvsnFmw8ft9wN2f39fSdSieK3ug36Y7pk2KUEu601blOtsdn+AQzS
zwg/Cb+u6Z44opegyNlSDx93AEgpzZPNLmJ1/ZL938+2+JJWbWjoeZpozJPY
dweMRczVdzyeAbLA5JtlyPV8qUWI+DK8vLk6kdcA+6MHaPKseXyF228banj6
g4exdgjlVGJ9qtopyH9Bcr/eXJ3+On57tGNfOqbsU/marPhQfv8IzP8E3ANz
dq05Q09utcJ0/InPPNskee9Bzds2fm589ok9tvdXQHU9mPzE53HkePWJ1KrC
TW3aWM+pnWqd6/tNZ4GHhi9GT1Rwi6ozDNBKxzqkTRqg6lKNB62pivka5gyR
qsXENs1WLRbmexX8rwAsJDWYqbrDGM++f1Mylsv6/QW+vKc7pzi61SxACtDv
MAZ/kGCm6xDZsFK38/TO3LLTPwLCobzG2hP1WySmnCuMMqnCuwgOgcNGCNWW
ihM+VRHriP8CUUW60DlDAAA=

-->

</rfc>
