<?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.24 (Ruby 3.1.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-masque-connect-ip-08" category="std" consensus="true" submissionType="IETF" updates="9298" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.16.0 -->
  <front>
    <title>Proxying IP in HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-masque-connect-ip-08"/>
    <author initials="T." surname="Pauly" fullname="Tommy Pauly" role="editor">
      <organization>Apple Inc.</organization>
      <address>
        <email>tpauly@apple.com</email>
      </address>
    </author>
    <author initials="D." surname="Schinazi" fullname="David Schinazi">
      <organization>Google LLC</organization>
      <address>
        <postal>
          <street>1600 Amphitheatre Parkway</street>
          <city>Mountain View</city>
          <region>CA</region>
          <code>94043</code>
          <country>United States of America</country>
        </postal>
        <email>dschinazi.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="A." surname="Chernyakhovsky" fullname="Alex Chernyakhovsky">
      <organization>Google LLC</organization>
      <address>
        <email>achernya@google.com</email>
      </address>
    </author>
    <author initials="M." surname="Kuehlewind" fullname="Mirja Kuehlewind">
      <organization>Ericsson</organization>
      <address>
        <email>mirja.kuehlewind@ericsson.com</email>
      </address>
    </author>
    <author initials="M." surname="Westerlund" fullname="Magnus Westerlund">
      <organization>Ericsson</organization>
      <address>
        <email>magnus.westerlund@ericsson.com</email>
      </address>
    </author>
    <date year="2023" month="March" day="01"/>
    <area>Transport</area>
    <workgroup>MASQUE</workgroup>
    <keyword>quic</keyword>
    <keyword>http</keyword>
    <keyword>datagram</keyword>
    <keyword>VPN</keyword>
    <keyword>proxy</keyword>
    <keyword>tunnels</keyword>
    <keyword>quic in udp in IP in quic</keyword>
    <keyword>turtles all the way down</keyword>
    <keyword>masque</keyword>
    <keyword>http-ng</keyword>
    <abstract>
      <t>This document describes how to proxy 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 a proxy. This
document updates RFC 9298.</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-ip/draft-ietf-masque-connect-ip.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-masque-connect-ip/"/>.
      </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-ip"/>.</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 and a similar mechanism
for UDP <xref target="CONNECT-UDP"/>. However, these mechanisms cannot tunnel other
IP protocols <xref target="IANA-PN"/> nor convey fields of the IP header.</t>
      <t>This document describes a protocol for tunnelling IP through an HTTP server acting
as an IP-specific proxy over HTTP. This can be used for various use cases
such as remote access VPN, site-to-site VPN, secure point-to-point communication,
or general-purpose packet tunnelling.</t>
      <t>IP proxying operates similarly to UDP proxying <xref target="CONNECT-UDP"/>,
whereby the proxy itself is identified with an absolute URL, optionally
containing the traffic's destination. Clients generate these URLs using a
URI Template <xref target="TEMPLATE"/>, as described in <xref target="client-config"/>.</t>
      <t>This protocol supports all existing versions of HTTP by using HTTP Datagrams
<xref target="HTTP-DGRAM"/>. When using HTTP/2 <xref target="H2"/> or HTTP/3 <xref target="H3"/>, it uses
HTTP Extended CONNECT as described in <xref target="EXT-CONNECT2"/> and
<xref target="EXT-CONNECT3"/>. When using HTTP/1.x <xref target="H1"/>, it uses HTTP Upgrade
as defined in <xref section="7.8" sectionFormat="of" target="HTTP"/>.</t>
      <t>This document updates <xref target="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>
      <t>In this document, we use the term "IP proxy" to refer to the HTTP server that
responds to the IP proxying request. If there are HTTP intermediaries (as defined
in <xref section="3.7" sectionFormat="of" target="HTTP"/>) between the client and the proxy, those are
referred to as "intermediaries" in this document.</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 IP proxying over HTTP via an URI Template
<xref target="TEMPLATE"/>. The URI template <bcp14>MAY</bcp14> contain two variables: "target" and
"ipproto"; see <xref target="scope"/>. The optionality of the variables needs to be considered
when defining the template so that either the variable is self-identifying or it
is possible to exclude it in the syntax.</t>
      <t>Examples are shown below:</t>
      <figure anchor="fig-template-examples">
        <name>URI Template Examples</name>
        <artwork><![CDATA[
https://example.org/.well-known/masque/ip/{target}/{ipproto}/
https://proxy.example.org:4443/masque/ip?t={target}&i={ipproto}
https://proxy.example.org:4443/masque/ip{?target,ipproto}
https://masque.example.org/?user=bob
]]></artwork>
      </figure>
      <t>The following requirements apply to the URI Template:</t>
      <ul spacing="normal">
        <li>The URI Template <bcp14>MUST</bcp14> be a level 3 template or lower.</li>
        <li>The URI Template <bcp14>MUST</bcp14> be in absolute form, and <bcp14>MUST</bcp14> include non-empty scheme,
authority and path components.</li>
        <li>The path component of the URI Template <bcp14>MUST</bcp14> start with a slash "/".</li>
        <li>All template variables <bcp14>MUST</bcp14> be within the path or query components of the URI.</li>
        <li>The URI template <bcp14>MAY</bcp14> contain the two variables "target" and "ipproto" and <bcp14>MAY</bcp14>
contain other variables. If the "target" or "ipproto" variables are included,
their values <bcp14>MUST NOT</bcp14> be empty. Clients can instead use "*" to indicate
wildcard or no-preference values; see <xref target="scope"/>.</li>
        <li>The URI Template <bcp14>MUST NOT</bcp14> contain any non-ASCII unicode characters and <bcp14>MUST</bcp14>
only contain ASCII characters in the range 0x21-0x7E inclusive (note that
percent-encoding is allowed; see Section 2.1 of <xref target="URI"/>.</li>
        <li>The URI Template <bcp14>MUST NOT</bcp14> use Reserved Expansion ("+" operator), Fragment
Expansion ("#" operator), Label Expansion with Dot- Prefix, Path Segment
Expansion with Slash-Prefix, nor Path-Style Parameter Expansion with
Semicolon-Prefix.</li>
      </ul>
      <t>Clients <bcp14>SHOULD</bcp14> validate the requirements above; however, clients <bcp14>MAY</bcp14> use a
general-purpose URI Template implementation that lacks this specific validation.
If a client detects that any of the requirements above are not met by a URI
Template, the client <bcp14>MUST</bcp14> reject its configuration and abort the request without
sending it to the IP proxy.</t>
      <t>As with UDP proxying, some client configurations for IP proxies will only
allow the user to configure the proxy host and proxy port. Clients with such limitations
<bcp14>MAY</bcp14> attempt to access IP proxying capabilities using the default template, which is
defined as: "https://$PROXY_HOST:$PROXY_PORT/.well-known/masque/ip/{target}/{ipproto}/",
where $PROXY_HOST and $PROXY_PORT are the configured host and port of the IP proxy,
respectively. IP proxy deployments <bcp14>SHOULD</bcp14> offer service at this location if they need
to interoperate with such clients.</t>
    </section>
    <section anchor="tunnelling-ip-over-http">
      <name>Tunnelling IP over HTTP</name>
      <t>To allow negotiation of a tunnel for IP over HTTP, this document defines the
"connect-ip" HTTP Upgrade Token. The resulting IP 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 IP tunnel associated with a single HTTP stream, a client issues a
request containing the "connect-ip" upgrade token.</t>
      <t>When sending its IP proxying request, the client <bcp14>SHALL</bcp14> perform URI template
expansion to determine the path and query of its request, see <xref target="client-config"/>.</t>
      <t>By virtue of the definition of the Capsule Protocol (see <xref section="3.2" sectionFormat="of" target="HTTP-DGRAM"/>), IP proxying requests do not carry any message content.
Similarly, successful IP proxying responses also do not carry any message
content.</t>
      <section anchor="ip-proxy-handling">
        <name>IP Proxy Handling</name>
        <t>Upon receiving an IP 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 IP proxy. The IP proxy can choose to
  reject the IP proxying request. Otherwise, it extracts the optional
  "target" and "ipproto" variables from the URI it has reconstructed
  from the request headers, decodes their percent-encoding, and establishes an
  IP tunnel.</li>
        </ul>
        <t>IP proxies <bcp14>MUST</bcp14> validate whether the decoded "target" and "ipproto" variables
meet the requirements in <xref target="scope"/>. If they do not, the IP proxy <bcp14>MUST</bcp14> treat
the request as malformed; see <xref section="8.1.1" sectionFormat="of" target="H2"/> and
<xref section="4.1.2" sectionFormat="of" target="H3"/>. If the "target" variable is a DNS name, the IP proxy
<bcp14>MUST</bcp14> perform DNS resolution (to query the corresponding IPv4 and/or IPv6
addresses via A and/or AAAA records) before replying to the HTTP request. If errors
occur during this process, the IP proxy <bcp14>MUST</bcp14> reject the request and <bcp14>SHOULD</bcp14>
send details using an appropriate Proxy-Status header field
<xref target="PROXY-STATUS"/>. For example, if DNS resolution returns an error,
the proxy can use the <tt>dns_error</tt> Proxy Error Type from
<xref section="2.3.2" sectionFormat="of" target="PROXY-STATUS"/>.</t>
        <t>The lifetime of the IP forwarding tunnel is tied to the IP proxying request stream.
The IP proxy <bcp14>MUST</bcp14> maintain all IP address and route assignments associated with the
IP forwarding tunnel while the request stream is open. IP proxies <bcp14>MAY</bcp14> choose to
tear down the tunnel due to a period of inactivity, but they <bcp14>MUST</bcp14> close the request
stream when doing so.</t>
        <t>A successful response (as defined in Sections <xref format="counter" target="resp1"/> and <xref format="counter" target="resp23"/>)
indicates that the IP proxy has established an IP tunnel and is willing to
proxy IP payloads. Any response other than a successful response
indicates that the request has failed; thus, the client <bcp14>MUST</bcp14> abort the request.</t>
        <t>Along with a successful response, the IP proxy can send capsules to assign
addresses and advertise routes to the client (<xref target="capsules"/>). The client can also
assign addresses and advertise routes to the IP proxy for network-to-network
routing.</t>
      </section>
      <section anchor="req1">
        <name>HTTP/1.1 Request</name>
        <t>When using HTTP/1.1 <xref target="H1"/>, an IP 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 IP 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-ip".</li>
        </ul>
        <t>An IP 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 URI Template
"https://example.org/.well-known/masque/ip/{target}/{ipproto}/" and
wishes to open an IP forwarding tunnel with no target or protocol limitations,
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/ip/*/*/ HTTP/1.1
Host: example.org
Connection: Upgrade
Upgrade: connect-ip
Capsule-Protocol: ?1
]]></sourcecode>
        </figure>
      </section>
      <section anchor="resp1">
        <name>HTTP/1.1 Response</name>
        <t>The IP proxy 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-ip".</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 connection.</t>
        <t>For example, the IP proxy 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-ip
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"/>, IP 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-ip".</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 URI Template after the URI
Template expansion process has been completed; see <xref target="client-config"/>.
Variables in the URI template can determine the scope of the request, such
as requesting full-tunnel IP packet forwarding, or a specific proxied flow;
see <xref target="scope"/>.</li>
        </ul>
        <t>An IP 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 URI Template
"https://example.org/.well-known/masque/ip/{target}/{ipproto}/" and
wishes to open an IP forwarding tunnel with no target or protocol limitations,
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-ip
:scheme = https
:path = /.well-known/masque/ip/*/*/
:authority = example.org
capsule-protocol = ?1
]]></sourcecode>
        </figure>
      </section>
      <section anchor="resp23">
        <name>HTTP/2 and HTTP/3 Responses</name>
        <t>The IP proxy 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.</t>
        <t>For example, the IP proxy 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 anchor="scope">
        <name>Limiting Request Scope</name>
        <t>Unlike UDP proxying requests, which require specifying a target host, IP proxying
requests can allow endpoints to send arbitrary IP packets to any host. The
client can choose to restrict a given request to a specific IP prefix or IP
protocol by adding parameters to its request. When the IP proxy knows that a
request is scoped to a target prefix or protocol, it can leverage this
information to optimize its resource allocation; for example, the IP proxy can
assign the same public IP address to two IP proxying requests that are scoped to
different prefixes and/or different protocols.</t>
        <t>The scope of the request is indicated by the client to the IP proxy via the
"target" and "ipproto" variables of the URI Template; see <xref target="client-config"/>.
Both the "target" and "ipproto" variables are optional; if they are not included,
they are considered to carry the wildcard value "*".</t>
        <dl spacing="compact">
          <dt>target:</dt>
          <dd>
            <t>The variable "target" contains a hostname or IP prefix of a specific host to
which the client wants to proxy packets. If the "target" variable is not
specified or its value is "*", the client is requesting to communicate with any
allowable host. "target" supports using DNS names, IPv6 prefixes and IPv4
prefixes. Note that IPv6 scoped addressing zone identifiers are not supported.
If the target is an IP prefix (IP address optionally followed by a
percent-encoded slash followed by the prefix length in bits), the request will
only support a single IP version. If the target is a hostname, the IP proxy is
expected to perform DNS resolution to determine which route(s) to advertise to
the client. The IP proxy <bcp14>SHOULD</bcp14> send a ROUTE_ADVERTISEMENT capsule that includes
routes for all addresses that were resolved for the requested hostname, that are
accessible to the IP proxy, and belong to an address family for which the IP proxy
also sends an Assigned Address.</t>
          </dd>
          <dt>ipproto:</dt>
          <dd>
            <t>The variable "ipproto" contains an IP protocol number, as defined in the
"Assigned Internet Protocol Numbers" IANA registry <xref target="IANA-PN"/>.
If present, it specifies that a client only wants to proxy a specific IP
protocol for this request. If the value is "*", or the variable is not
included, the client is requesting to use any IP protocol.</t>
          </dd>
        </dl>
        <t>Using the terms IPv6address, IPv4address, and reg-name from <xref target="URI"/>, the
"target" and "ipproto" variables <bcp14>MUST</bcp14> adhere to the format in <xref target="target-format"/>,
using notation from <xref target="ABNF"/>. Additionally:</t>
        <ul spacing="normal">
          <li>if "target" contains an IPv6 literal or prefix, the colons (":") <bcp14>MUST</bcp14> be
percent-encoded. For example, if the target host is "2001:db8::42", it will be
encoded in the URI as "2001%3Adb8%3A%3A42".</li>
          <li>If present, the IP prefix length in "target" <bcp14>SHALL</bcp14> be preceded by a
percent-encoded slash ("/"): "%2F". The IP prefix length <bcp14>MUST</bcp14> represent a
decimal integer between 0 and the length of the IP address in bits, inclusive.</li>
          <li>"ipproto" <bcp14>MUST</bcp14> represent a decimal integer between 0 and 255 inclusive, or the
wildcard value "*".</li>
        </ul>
        <figure anchor="target-format">
          <name>URI Template Variable Format</name>
          <artwork type="ascii-art"><![CDATA[
target = IPv6prefix / IPv4prefix / reg-name / "*"
IPv6prefix = IPv6address ["%2F" 1*3DIGIT]
IPv4prefix = IPv4address ["%2F" 1*2DIGIT]
ipproto = 1*3DIGIT / "*"
]]></artwork>
        </figure>
        <t>IP proxies <bcp14>MAY</bcp14> perform access control using the scoping information provided
by the client: if the client is not authorized to access any of the destinations
included in the scope, then the IP proxy can immediately fail the request.</t>
        <t>Note that IP protocol numbers represent both upper layers (as defined in
<xref section="2" sectionFormat="of" target="IPv6"/>, examples include TCP and UDP) and IPv6
extension headers (as defined in <xref section="4" sectionFormat="of" target="IPv6"/>, examples include
Fragment and Options headers). IP proxies <bcp14>MAY</bcp14> reject requests to scope
to protocol numbers that are used for extension headers. Upon receiving
packets, implementations that support scoping by IP protocol number <bcp14>MUST</bcp14>
walk the chain of extensions to find the matching IP protocol number.</t>
      </section>
      <section anchor="capsules">
        <name>Capsules</name>
        <t>This document defines multiple new capsule types that allow endpoints to
exchange IP configuration information. Both endpoints <bcp14>MAY</bcp14> send any number of
these new capsules.</t>
        <section anchor="addressassign-capsule">
          <name>ADDRESS_ASSIGN Capsule</name>
          <t>The ADDRESS_ASSIGN capsule (see <xref target="iana-types"/> for the value of the capsule
type) allows an endpoint to inform its peer of the list of IP addresses or
prefixes it has assigned to it. Every capsule contains the full list of IP
prefixes currently assigned to the receiver. Any of these addresses can be
used as the source address on IP packets originated by the receiver of this
capsule.</t>
          <figure anchor="addr-assign-format">
            <name>ADDRESS_ASSIGN Capsule Format</name>
            <artwork><![CDATA[
ADDRESS_ASSIGN Capsule {
  Type (i) = ADDRESS_ASSIGN,
  Length (i),
  Assigned Address (..) ...,
}
]]></artwork>
          </figure>
          <t>The ADDRESS_ASSIGN capsule contains a sequence of zero or more Assigned
Addresses.</t>
          <figure anchor="assigned-addr-format">
            <name>Assigned Address Format</name>
            <artwork><![CDATA[
Assigned Address {
  Request ID (i),
  IP Version (8),
  IP Address (32..128),
  IP Prefix Length (8),
}
]]></artwork>
          </figure>
          <t>Each Assigned Address contains the following fields:</t>
          <dl spacing="compact">
            <dt>Request ID:</dt>
            <dd>
              <t>Request identifier, encoded as a variable-length integer. If this address
assignment is in response to an Address Request (see <xref target="addr_req"/>), then this
field <bcp14>SHALL</bcp14> contain the value of the corresponding field in the request.
Otherwise, this field <bcp14>SHALL</bcp14> be zero.</t>
            </dd>
            <dt>IP Version:</dt>
            <dd>
              <t>IP Version of this address assignment, encoded as an unsigned 8-bit integer.
<bcp14>MUST</bcp14> be either 4 or 6.</t>
            </dd>
            <dt>IP Address:</dt>
            <dd>
              <t>Assigned IP address. If the IP Version field has value 4, the IP Address
field <bcp14>SHALL</bcp14> have a length of 32 bits. If the IP Version field has value 6, the
IP Address field <bcp14>SHALL</bcp14> have a length of 128 bits.</t>
            </dd>
            <dt>IP Prefix Length:</dt>
            <dd>
              <t>The number of bits in the IP Address that are used to define the prefix that
is being assigned, encoded as an unsigned 8-bit integer. This <bcp14>MUST</bcp14> be less than
or equal to the length of the IP Address field, in bits. If the prefix length
is equal to the length of the IP Address, the receiver of this capsule is
allowed to send packets from a single source address. If the prefix length is
less than the length of the IP address, the receiver of this capsule is allowed
to send packets from any source address that falls within the prefix.</t>
            </dd>
          </dl>
          <t>If any of the capsule fields are malformed upon reception, the receiver of the
capsule <bcp14>MUST</bcp14> follow the error handling procedure defined in
<xref section="3.3" sectionFormat="of" target="HTTP-DGRAM"/>.</t>
          <t>If an ADDRESS_ASSIGN capsule does not contain an address that was previously
transmitted in another ADDRESS_ASSIGN capsule, that indicates that the address
has been removed. An ADDRESS_ASSIGN capsule can also be empty, indicating that
all addresses have been removed.</t>
          <t>In some deployments of IP proxying in HTTP, an endpoint needs to be assigned an address
by its peer before it knows what source address to set on its own packets. For
example, in the Remote Access VPN case (<xref target="example-remote"/>) the client cannot send
IP packets until it knows what address to use. In these deployments, the
endpoint that is expecting an address assignment <bcp14>MUST</bcp14> send an ADDRESS_REQUEST
capsule. This isn't required if the endpoint does not need any address
assignment, for example when it is configured out-of-band with static addresses.</t>
          <t>While ADDRESS_ASSIGN capsules are commonly sent in response to ADDRESS_REQUEST
capsules, endpoints <bcp14>MAY</bcp14> send ADDRESS_ASSIGN capsules unprompted.</t>
          <t>Note that the IP forwarding tunnels described in this document are not fully
featured "interfaces" in the IPv6 addressing architecture sense
<xref target="IPv6-ADDR"/>. In particular, they do not necessarily have IPv6
link-local addresses. Additionally, IPv6 stateless autoconfiguration or router
advertisement messages are not used in such interfaces, and neither is neighbor
discovery.</t>
        </section>
        <section anchor="addr_req">
          <name>ADDRESS_REQUEST Capsule</name>
          <t>The ADDRESS_REQUEST capsule (see <xref target="iana-types"/> for the value of the capsule
type) allows an endpoint to request assignment of IP addresses from its peer.
The capsule allows the endpoint to optionally indicate a preference for which
address it would get assigned.</t>
          <figure anchor="addr-req-format">
            <name>ADDRESS_REQUEST Capsule Format</name>
            <artwork><![CDATA[
ADDRESS_REQUEST Capsule {
  Type (i) = ADDRESS_REQUEST,
  Length (i),
  Requested Address (..) ...,
}
]]></artwork>
          </figure>
          <t>The ADDRESS_REQUEST capsule contains a sequence of one or more Requested
Addresses.</t>
          <figure anchor="requested-addr-format">
            <name>Requested Address Format</name>
            <artwork><![CDATA[
Requested Address {
  Request ID (i),
  IP Version (8),
  IP Address (32..128),
  IP Prefix Length (8),
}
]]></artwork>
          </figure>
          <t>Each Requested Address contains the following fields:</t>
          <dl spacing="compact">
            <dt>Request ID:</dt>
            <dd>
              <t>Request identifier, encoded as a variable-length integer. This is the
identifier of this specific address request. Each request from a given endpoint
carries a different identifier. Request IDs <bcp14>MUST NOT</bcp14> be reused by an endpoint,
and <bcp14>MUST NOT</bcp14> be zero.</t>
            </dd>
            <dt>IP Version:</dt>
            <dd>
              <t>IP Version of this address request, encoded as an unsigned 8-bit integer.
<bcp14>MUST</bcp14> be either 4 or 6.</t>
            </dd>
            <dt>IP Address:</dt>
            <dd>
              <t>Requested IP address. If the IP Version field has value 4, the IP Address
field <bcp14>SHALL</bcp14> have a length of 32 bits. If the IP Version field has value 6, the
IP Address field <bcp14>SHALL</bcp14> have a length of 128 bits.</t>
            </dd>
            <dt>IP Prefix Length:</dt>
            <dd>
              <t>Length of the IP Prefix requested, in bits, encoded as an unsigned 8-bit
integer. <bcp14>MUST</bcp14> be less than or equal to the length of the IP Address field, in
bits.</t>
            </dd>
          </dl>
          <t>If the IP Address is all-zero (0.0.0.0 or ::), this indicates that the sender is
requesting an address of that address family but does not have a preference for
a specific address. In that scenario, the prefix length still indicates the
sender's preference for the prefix length it is requesting.</t>
          <t>If any of the capsule fields are malformed upon reception, the receiver of the
capsule <bcp14>MUST</bcp14> follow the error handling procedure defined in
<xref section="3.3" sectionFormat="of" target="HTTP-DGRAM"/>.</t>
          <t>Upon receiving the ADDRESS_REQUEST capsule, an endpoint <bcp14>SHOULD</bcp14> assign one or
more IP addresses to its peer, and then respond with an ADDRESS_ASSIGN capsule
to inform the peer of the assignment. For each Requested Address, the receiver
of the ADDRESS_REQUEST capsule <bcp14>SHALL</bcp14> respond with an Assigned Address with a
matching Request ID. If the requested address was assigned, the IP Address and
IP Prefix Length fields in the Assigned Address response <bcp14>SHALL</bcp14> be set to the
assigned values. If the requested address was not assigned, the IP Address <bcp14>SHALL</bcp14>
be all-zero and the IP Prefix Length <bcp14>SHALL</bcp14> be the maximum length (0.0.0.0/32 or
::/128) to indicate that no address was assigned. These address rejections <bcp14>SHOULD NOT</bcp14> be
included in subsequent ADDRESS_ASSIGN capsules. Note that other Assigned Address
entries that do not correspond to any Request ID can also be contained in the
same ADDRESS_ASSIGN response.</t>
          <t>If an endpoint receives an ADDRESS_REQUEST capsule that contains zero Requested
Addresses, it <bcp14>MUST</bcp14> abort the IP proxying request stream.</t>
          <t>Note that the ordering of Requested Addresses does not carry any semantics.
Similarly, the Request ID is only meant as a unique identifier, it does not
convey any priority or importance.</t>
        </section>
        <section anchor="routeadvertisement-capsule">
          <name>ROUTE_ADVERTISEMENT Capsule</name>
          <t>The ROUTE_ADVERTISEMENT capsule (see <xref target="iana-types"/> for the value of the capsule
type) allows an endpoint to communicate to its peer that it is willing to route
traffic to a set of IP address ranges. This indicates that the sender has an
existing route to each address range, and notifies its peer that if the receiver
of the ROUTE_ADVERTISEMENT capsule sends IP packets for one of these ranges in
HTTP Datagrams, the sender of the capsule will forward them along its
preexisting route. Any address which is in one of the address ranges can be used
as the destination address on IP packets originated by the receiver of this
capsule.</t>
          <figure anchor="route-adv-format">
            <name>ROUTE_ADVERTISEMENT Capsule Format</name>
            <artwork><![CDATA[
ROUTE_ADVERTISEMENT Capsule {
  Type (i) = ROUTE_ADVERTISEMENT,
  Length (i),
  IP Address Range (..) ...,
}
]]></artwork>
          </figure>
          <t>The ROUTE_ADVERTISEMENT capsule contains a sequence of zero or more IP Address
Ranges.</t>
          <figure anchor="addr-range-format">
            <name>IP Address Range Format</name>
            <artwork><![CDATA[
IP Address Range {
  IP Version (8),
  Start IP Address (32..128),
  End IP Address (32..128),
  IP Protocol (8),
}
]]></artwork>
          </figure>
          <t>Each IP Address Range contains the following fields:</t>
          <dl spacing="compact">
            <dt>IP Version:</dt>
            <dd>
              <t>IP Version of this range, encoded as an unsigned 8-bit integer. <bcp14>MUST</bcp14> be
either 4 or 6.</t>
            </dd>
            <dt>Start IP Address and End IP Address:</dt>
            <dd>
              <t>Inclusive start and end IP address of the advertised range. If the IP Version
field has value 4, these fields <bcp14>SHALL</bcp14> have a length of 32 bits. If the IP
Version field has value 6, these fields <bcp14>SHALL</bcp14> have a length of 128 bits. The
Start IP Address <bcp14>MUST</bcp14> be less than or equal to the End IP Address.</t>
            </dd>
            <dt>IP Protocol:</dt>
            <dd>
              <t>The Internet Protocol Number for traffic that can be sent to this range,
encoded as an unsigned 8-bit integer. If the value is 0, all protocols are
allowed. ICMP traffic is always allowed, regardless of the value of this field.</t>
            </dd>
          </dl>
          <t>If any of the capsule fields are malformed upon reception, the receiver of the
capsule <bcp14>MUST</bcp14> follow the error handling procedure defined in
<xref section="3.3" sectionFormat="of" target="HTTP-DGRAM"/>.</t>
          <t>Upon receiving the ROUTE_ADVERTISEMENT capsule, an endpoint <bcp14>MAY</bcp14> update its local
state regarding what its peer is willing to route (subject to local policy), such
as by installing entries in a routing table.</t>
          <t>Each ROUTE_ADVERTISEMENT contains the full list of address ranges. If multiple
ROUTE_ADVERTISEMENT capsules are sent in one direction, each ROUTE_ADVERTISEMENT
capsule supersedes prior ones. In other words, if a given address range was
present in a prior capsule but the most recently received ROUTE_ADVERTISEMENT
capsule does not contain it, the receiver will consider that range withdrawn.</t>
          <t>If multiple ranges using the same IP protocol were to overlap, some routing
table implementations might reject them. To prevent overlap, the ranges are
ordered; this places the burden on the sender and makes verification by the
receiver much simpler. If an IP Address Range A precedes an IP address range B
in the same ROUTE_ADVERTISEMENT capsule, they <bcp14>MUST</bcp14> follow these requirements:</t>
          <ul spacing="normal">
            <li>IP Version of A <bcp14>MUST</bcp14> be less than or equal than IP Version of B</li>
            <li>If the IP Version of A and B are equal, the IP Protocol of A <bcp14>MUST</bcp14> be less than
or equal than IP Protocol of B.</li>
            <li>If the IP Version and IP Protocol of A and B are both equal, the End IP
Address of A <bcp14>MUST</bcp14> be strictly less than the Start IP Address of B.</li>
          </ul>
          <t>If an endpoint receives a ROUTE_ADVERTISEMENT capsule that does not meet these
requirements, it <bcp14>MUST</bcp14> abort the IP proxying request stream.</t>
          <t>Since setting the IP protocol to zero indicates all protocols are allowed, the
requirements above make it possible for two routes to overlap when one has
IP protocol set to zero and the other set to non-zero. Endpoints <bcp14>MUST NOT</bcp14> send
a ROUTE_ADVERTISEMENT capsule with routes that overlap in such a way.
Validating this requirement is <bcp14>OPTIONAL</bcp14>, but if an endpoint detects the
violation, it <bcp14>MUST</bcp14> abort the IP proxying request stream.</t>
        </section>
      </section>
    </section>
    <section anchor="context-identifiers">
      <name>Context Identifiers</name>
      <t>The mechanism for proxying IP in HTTP defined in this document allows future
extensions to exchange HTTP Datagrams that carry different semantics from IP
payloads. Some of these extensions can augment IP payloads with additional
data or compress IP header fields, while others can exchange data that is
completely separate from IP payloads. In order to accomplish this, all HTTP
Datagrams associated with IP proxying request streams start with a Context ID
field; see <xref target="payload-format"/>.</t>
      <t>Context IDs are 62-bit integers (0 to 2<sup>62</sup>-1). Context IDs are encoded
as variable-length integers; see <xref section="16" sectionFormat="of" target="QUIC"/>. The Context ID
value of 0 is reserved for IP 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 IP 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 IP 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>IP Proxying HTTP Datagram Format</name>
        <artwork><![CDATA[
IP Proxying HTTP Datagram Payload {
  Context ID (i),
  Payload (..),
}
]]></artwork>
      </figure>
      <t>The IP 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>IP packets are encoded using HTTP Datagrams with the Context ID set to zero.
When the Context ID is set to zero, the Payload field contains a full IP packet
(from the IP Version field until the last byte of the IP Payload).</t>
      <t>Clients <bcp14>MAY</bcp14> optimistically start sending proxied IP packets before receiving the
response to its IP proxying request, noting however that those may not be
processed by the IP proxy if it responds to the request with a failure, or if the
datagrams are received by the IP proxy before the request. Since receiving
addresses and routes is required in order to know that a packet can be sent
through the tunnel, such optimistic packets might be dropped by the IP proxy if it
chooses to provide different addressing or routing information than what the
client assumed.</t>
      <t>When an endpoint receives an HTTP Datagram containing an IP packet, it
will parse the packet's IP header, perform any local policy checks (e.g., source
address validation), check their routing table to pick an outbound interface,
and then send the IP packet on that interface or pass it to a local application.
The endpoint can also choose to drop any received packets instead of forwarding
them. If a received IP packet fails any correctness or policy checks, that is a
forwarding error, not a protocol violation as far as IP proxying is concerned;
see <xref target="error-signal"/>.</t>
      <t>In the other direction, when an endpoint receives an IP packet, it checks to see
if the packet matches the routes mapped for an IP tunnel, and performs the same
forwarding checks as above before transmitting the packet over HTTP Datagrams.</t>
      <t>Note that endpoints will decrement the IP Hop Count (or TTL) upon
encapsulation but not decapsulation. In other words, the Hop Count is
decremented right before an IP packet is transmitted in an HTTP Datagram. This
prevents infinite loops in the presence of routing loops, and matches the
choices in IPsec <xref target="IPSEC"/>.</t>
      <t>Implementers need to ensure that they do not forward any link-local traffic
beyond the IP proxying interface that it was received on. IP proxying endpoints also
need to properly reply to packets destined to link-local multicast addresses.</t>
      <t>IPv6 requires that every link have an MTU of at least 1280 bytes
<xref target="IPv6"/>. Since IP proxying in HTTP conveys IP packets in HTTP Datagrams and
those can in turn be sent in QUIC DATAGRAM frames which cannot be fragmented
<xref target="DGRAM"/>, the MTU of an IP tunnel can be limited by the MTU of
the QUIC connection that IP proxying is operating over. This can lead to
situations where the IPv6 minimum link MTU is violated. IP proxying endpoints
that support IPv6 <bcp14>MUST</bcp14> ensure that the IP tunnel link MTU is at least
1280 (i.e., that they can send HTTP Datagrams with payloads of at least 1280
bytes). This can be accomplished using various techniques:</t>
      <ul spacing="normal">
        <li>if both IP proxying endpoints know for certain that HTTP intermediaries are not in use,
the endpoints can pad the QUIC INITIAL packets of the underlying QUIC
connection that IP proxying is running over. (Assuming QUIC version 1 is in
use, the overhead is 1 byte type, 20 bytes maximal connection ID length, 4
bytes maximal packet number length, 1 byte DATAGRAM frame type, 8 bytes
maximal quarter stream ID, one byte for the zero Context ID, and 16 bytes for
the AEAD authentication tag, for a total of 51 bytes of overhead which
corresponds to padding QUIC INITIAL packets to 1331 bytes or more.)</li>
        <li>IP proxying endpoints can also send ICMPv6 echo requests with 1232 bytes of
data to ascertain the link MTU and tear down the tunnel if they do not receive
a response. Unless endpoints have an out of band means of guaranteeing that
the previous techniques is sufficient, they <bcp14>MUST</bcp14> use this method. If an
endpoint does not know an IPv6 address of its peer, it can send the ICMPv6
echo request to the link local all nodes multicast address (ff02::1).</li>
      </ul>
      <t>If an endpoint is using QUIC DATAGRAM frames to convey IPv6 packets, and it
detects that the QUIC MTU is too low to allow sending 1280 bytes, it <bcp14>MUST</bcp14> abort
the IP proxying request stream.</t>
      <t>Endpoints <bcp14>MAY</bcp14> implement additional filtering policies on the IP packets they
forward.</t>
    </section>
    <section anchor="error-signal">
      <name>Error Signalling</name>
      <t>Since IP proxying endpoints often forward IP packets onwards to other network
interfaces, they need to handle errors in the forwarding process. For example,
forwarding can fail if the endpoint does not have a route for the destination
address, or if it is configured to reject a destination prefix by policy, or if
the MTU of the outgoing link is lower than the size of the packet to be
forwarded. In such scenarios, IP proxying endpoints <bcp14>SHOULD</bcp14> use ICMP
<xref target="ICMP"/> <xref target="ICMPv6"/> to signal the forwarding error to its peer
by generating ICMP packets and sending them using HTTP Datagrams.</t>
      <t>Endpoints are free to select the most appropriate ICMP errors to send. Some
examples that are relevant for IP proxying include:</t>
      <ul spacing="normal">
        <li>For invalid source addresses, send Destination Unreachable (<xref section="3.1" sectionFormat="of" target="ICMPv6"/>) with code 5, "Source address failed ingress/egress policy".</li>
        <li>For unroutable destination addresses, send Destination Unreachable (<xref section="3.1" sectionFormat="of" target="ICMPv6"/>) with a code 0, "No route to destination", or code 1,
"Communication with destination administratively prohibited".</li>
        <li>For packets that cannot fit within the MTU of the outgoing link, send Packet
Too Big (<xref section="3.2" sectionFormat="of" target="ICMPv6"/>).</li>
      </ul>
      <t>In order to receive these errors, endpoints need to be prepared to receive ICMP
packets. If an endpoint does not send ROUTE_ADVERTISEMENT capsules, such as a
client opening an IP flow through an IP proxy, it <bcp14>SHOULD</bcp14> process proxied ICMP
packets from its peer in order to receive these errors. Note that ICMP messages
can originate from a source address different from that of the IP proxying peer.</t>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>IP proxying in HTTP enables many different use cases that can benefit from IP packet
proxying and tunnelling. These examples are provided to help illustrate some of
the ways in which IP proxying in HTTP can be used.</t>
      <section anchor="example-remote">
        <name>Remote Access VPN</name>
        <t>The following example shows a point-to-network VPN setup, where a client
receives a set of local addresses, and can send to any remote host through
the IP proxy. Such VPN setups can be either full-tunnel or split-tunnel.</t>
        <figure anchor="diagram-tunnel">
          <name>VPN Tunnel Setup</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="128" width="512" viewBox="0 0 512 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 416,32 L 416,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 416,32 L 448,32" fill="none" stroke="black"/>
                <path d="M 80,48 L 248,48" fill="none" stroke="black"/>
                <path d="M 192,64 L 216,64" fill="none" stroke="black"/>
                <path d="M 320,64 L 448,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 416,96 L 448,96" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="456,96 444,90.4 444,101.6" fill="black" transform="rotate(0,448,96)"/>
                <polygon class="arrowhead" points="456,64 444,58.4 444,69.6" fill="black" transform="rotate(0,448,64)"/>
                <polygon class="arrowhead" points="456,32 444,26.4 444,37.6" fill="black" transform="rotate(0,448,32)"/>
                <polygon class="arrowhead" points="224,64 212,58.4 212,69.6" fill="black" transform="rotate(0,216,64)"/>
                <polygon class="arrowhead" points="200,64 188,58.4 188,69.6" fill="black" transform="rotate(180,192,64)"/>
                <g class="text">
                  <text x="100" y="36">IP</text>
                  <text x="120" y="36">A</text>
                  <text x="212" y="36">IP</text>
                  <text x="232" y="36">B</text>
                  <text x="468" y="36">IP</text>
                  <text x="488" y="36">D</text>
                  <text x="284" y="52">IP</text>
                  <text x="340" y="52">IP</text>
                  <text x="360" y="52">C</text>
                  <text x="44" y="68">Client</text>
                  <text x="100" y="68">IP</text>
                  <text x="140" y="68">Subnet</text>
                  <text x="176" y="68">C</text>
                  <text x="232" y="68">?</text>
                  <text x="288" y="68">Proxy</text>
                  <text x="468" y="68">IP</text>
                  <text x="488" y="68">E</text>
                  <text x="468" y="100">IP</text>
                  <text x="496" y="100">...</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+--------+ IP A          IP B +--------+           +---> IP D
|        +--------------------+   IP   | IP C      |
| Client | IP Subnet C <--> ? |  Proxy +-----------+---> IP E
|        +--------------------+        |           |
+--------+                    +--------+           +---> IP ...

]]></artwork>
          </artset>
        </figure>
        <t>In this case, the client does not specify any scope in its request. The IP proxy
assigns the client an IPv4 address (192.0.2.11) and a full-tunnel route of all
IPv4 addresses (0.0.0.0/0). The client can then send to any IPv4 host using a
source address in its assigned prefix.</t>
        <figure anchor="fig-full-tunnel">
          <name>VPN Full-Tunnel Example</name>
          <artwork><![CDATA[
[[ From Client ]]             [[ From IP Proxy ]]

SETTINGS
  H3_DATAGRAM = 1

                              SETTINGS
                                ENABLE_CONNECT_PROTOCOL = 1
                                H3_DATAGRAM = 1

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

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

STREAM(44): DATA
Capsule Type = ADDRESS_REQUEST
(Request ID = 1
 IP Version = 4
 IP Address = 0.0.0.0
 IP Prefix Length = 32)

                              STREAM(44): DATA
                              Capsule Type = ADDRESS_ASSIGN
                              (Request ID = 1
                               IP Version = 4
                               IP Address = 192.0.2.11
                               IP Prefix Length = 32)

                              STREAM(44): DATA
                              Capsule Type = ROUTE_ADVERTISEMENT
                              (IP Version = 4
                               Start IP Address = 0.0.0.0
                               End IP Address = 255.255.255.255
                               IP Protocol = 0) // Any

DATAGRAM
Quarter Stream ID = 11
Context ID = 0
Payload = Encapsulated IP Packet

                              DATAGRAM
                              Quarter Stream ID = 11
                              Context ID = 0
                              Payload = Encapsulated IP Packet
]]></artwork>
        </figure>
        <t>A setup for a split-tunnel VPN (the case where the client can only access a
specific set of private subnets) is quite similar. In this case, the advertised
route is restricted to 192.0.2.0/24, rather than 0.0.0.0/0.</t>
        <figure anchor="fig-split-tunnel">
          <name>VPN Split-Tunnel Capsule Example</name>
          <artwork><![CDATA[
[[ From Client ]]             [[ From IP Proxy ]]

                              STREAM(44): DATA
                              Capsule Type = ADDRESS_ASSIGN
                              (Request ID = 0
                               IP Version = 4
                               IP Address = 192.0.2.42
                               IP Prefix Length = 32)

                              STREAM(44): DATA
                              Capsule Type = ROUTE_ADVERTISEMENT
                              (IP Version = 4
                               Start IP Address = 192.0.2.0
                               End IP Address = 192.0.2.255
                               IP Protocol = 0) // Any
]]></artwork>
        </figure>
      </section>
      <section anchor="site-to-site-vpn">
        <name>Site-to-Site VPN</name>
        <t>The following example shows how to connect a branch office network to a
corporate network such that all machines on those networks can communicate.
In this example, the IP proxying client is attached to the branch office
network 192.0.2.0/24, and the IP proxy is attached to the corporate network
203.0.113.0/24. There are legacy clients on the branch office network that
only allow maintenance requests from machines on their subnet, so the IP
Proxy is provisioned with an IP address from that subnet.</t>
        <figure anchor="diagram-s2s">
          <name>Site-to-site VPN Example</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="128" width="560" viewBox="0 0 560 128" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 112,32 L 112,96" fill="none" stroke="black"/>
                <path d="M 144,32 L 144,96" fill="none" stroke="black"/>
                <path d="M 216,32 L 216,96" fill="none" stroke="black"/>
                <path d="M 328,32 L 328,96" fill="none" stroke="black"/>
                <path d="M 392,32 L 392,96" fill="none" stroke="black"/>
                <path d="M 424,32 L 424,96" fill="none" stroke="black"/>
                <path d="M 88,32 L 112,32" fill="none" stroke="black"/>
                <path d="M 144,32 L 216,32" fill="none" stroke="black"/>
                <path d="M 328,32 L 392,32" fill="none" stroke="black"/>
                <path d="M 424,32 L 456,32" fill="none" stroke="black"/>
                <path d="M 216,48 L 328,48" fill="none" stroke="black"/>
                <path d="M 88,64 L 144,64" fill="none" stroke="black"/>
                <path d="M 392,64 L 456,64" fill="none" stroke="black"/>
                <path d="M 216,80 L 328,80" fill="none" stroke="black"/>
                <path d="M 88,96 L 112,96" fill="none" stroke="black"/>
                <path d="M 144,96 L 216,96" fill="none" stroke="black"/>
                <path d="M 328,96 L 392,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,96 84,90.4 84,101.6" fill="black" transform="rotate(180,88,96)"/>
                <polygon class="arrowhead" points="96,64 84,58.4 84,69.6" fill="black" transform="rotate(180,88,64)"/>
                <polygon class="arrowhead" points="96,32 84,26.4 84,37.6" fill="black" transform="rotate(180,88,32)"/>
                <g class="text">
                  <text x="40" y="36">192.0.2.1</text>
                  <text x="512" y="36">203.0.113.9</text>
                  <text x="356" y="52">IP</text>
                  <text x="40" y="68">192.0.2.2</text>
                  <text x="180" y="68">Client</text>
                  <text x="236" y="68">IP</text>
                  <text x="284" y="68">Proxying</text>
                  <text x="360" y="68">Proxy</text>
                  <text x="512" y="68">203.0.113.8</text>
                  <text x="40" y="100">192.0.2.3</text>
                  <text x="512" y="100">203.0.113.7</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
192.0.2.1 <--+   +--------+             +-------+   +---> 203.0.113.9
             |   |        +-------------+  IP   |   |
192.0.2.2 <--+---+ Client | IP Proxying | Proxy +---+---> 203.0.113.8
             |   |        +-------------+       |   |
192.0.2.3 <--+   +--------+             +-------+   +---> 203.0.113.7

]]></artwork>
          </artset>
        </figure>
        <t>In this case, the client does not specify any scope in its request. The IP
proxy assigns the client an IPv4 address (203.0.113.100) and a split-tunnel
route to the corporate network (203.0.113.0/24). The client assigns the IP
proxy an IPv4 address (192.0.2.200) and a split-tunnel route to the branch
office network (192.0.2.0/24). This allows hosts on both networks to
communicate with each other, and allows the IP proxy to perform maintenance
on legacy hosts in the branch office.</t>
        <figure anchor="fig-s2s">
          <name>Site-to-site VPN Capsule Example</name>
          <artwork><![CDATA[
[[ From Client ]]             [[ From IP Proxy ]]

SETTINGS
  H3_DATAGRAM = 1

                              SETTINGS
                                ENABLE_CONNECT_PROTOCOL = 1
                                H3_DATAGRAM = 1

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

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

STREAM(44): DATA
Capsule Type = ADDRESS_ASSIGN
(Request ID = 0
IP Version = 4
IP Address = 192.0.2.200
IP Prefix Length = 32)

STREAM(44): DATA
Capsule Type = ROUTE_ADVERTISEMENT
(IP Version = 4
Start IP Address = 192.0.2.0
End IP Address = 192.0.2.255
IP Protocol = 0) // Any

                              STREAM(44): DATA
                              Capsule Type = ADDRESS_ASSIGN
                              (Request ID = 0
                               IP Version = 4
                               IP Address = 203.0.113.100
                               IP Prefix Length = 32)

                              STREAM(44): DATA
                              Capsule Type = ROUTE_ADVERTISEMENT
                              (IP Version = 4
                               Start IP Address = 203.0.113.0
                               End IP Address = 203.0.113.255
                               IP Protocol = 0) // Any

DATAGRAM
Quarter Stream ID = 11
Context ID = 0
Payload = Encapsulated IP Packet

                              DATAGRAM
                              Quarter Stream ID = 11
                              Context ID = 0
                              Payload = Encapsulated IP Packet
]]></artwork>
        </figure>
      </section>
      <section anchor="ip-flow-forwarding">
        <name>IP Flow Forwarding</name>
        <t>The following example shows an IP flow forwarding setup, where a client requests
to establish a forwarding tunnel to target.example.com using SCTP (IP protocol
132), and receives a single local address and remote address it can use for
transmitting packets. A similar approach could be used for any other IP protocol
that isn't easily proxied with existing HTTP methods, such as ICMP, ESP, etc.</t>
        <figure anchor="diagram-flow">
          <name>Proxied Flow Setup</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="128" width="440" viewBox="0 0 440 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 240,32 L 240,96" fill="none" stroke="black"/>
                <path d="M 312,32 L 312,96" fill="none" stroke="black"/>
                <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
                <path d="M 240,32 L 312,32" fill="none" stroke="black"/>
                <path d="M 80,48 L 240,48" fill="none" stroke="black"/>
                <path d="M 160,64 L 184,64" fill="none" stroke="black"/>
                <path d="M 312,64 L 392,64" fill="none" stroke="black"/>
                <path d="M 80,80 L 240,80" fill="none" stroke="black"/>
                <path d="M 8,96 L 80,96" fill="none" stroke="black"/>
                <path d="M 240,96 L 312,96" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="400,64 388,58.4 388,69.6" fill="black" transform="rotate(0,392,64)"/>
                <polygon class="arrowhead" points="192,64 180,58.4 180,69.6" fill="black" transform="rotate(0,184,64)"/>
                <polygon class="arrowhead" points="168,64 156,58.4 156,69.6" fill="black" transform="rotate(180,160,64)"/>
                <g class="text">
                  <text x="100" y="36">IP</text>
                  <text x="120" y="36">A</text>
                  <text x="204" y="36">IP</text>
                  <text x="224" y="36">B</text>
                  <text x="276" y="52">IP</text>
                  <text x="332" y="52">IP</text>
                  <text x="352" y="52">C</text>
                  <text x="44" y="68">Client</text>
                  <text x="124" y="68">IP</text>
                  <text x="144" y="68">C</text>
                  <text x="200" y="68">D</text>
                  <text x="280" y="68">Proxy</text>
                  <text x="412" y="68">IP</text>
                  <text x="432" y="68">D</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+--------+ IP A         IP B +--------+
|        +-------------------+   IP   | IP C
| Client |    IP C <--> D    |  Proxy +---------> IP D
|        +-------------------+        |
+--------+                   +--------+

]]></artwork>
          </artset>
        </figure>
        <t>In this case, the client specfies both a target hostname and an IP protocol
number in the scope of its request, indicating that it only needs to communicate
with a single host. The IP proxy is able to perform DNS resolution on behalf
of the client and allocate a specific outbound socket for the client instead of
allocating an entire IP address to the client. In this regard, the request is
similar to a traditional CONNECT proxy request.</t>
        <t>The IP proxy assigns a single IPv6 address to the client (2001:db8:1234::a) and
a route to a single IPv6 host (2001:db8:3456::b), scoped to SCTP. The client can
send and receive SCTP IP packets to the remote host.</t>
        <figure anchor="fig-flow">
          <name>Proxied SCTP Flow Example</name>
          <artwork><![CDATA[
[[ From Client ]]             [[ From IP Proxy ]]

SETTINGS
  H3_DATAGRAM = 1

                              SETTINGS
                                ENABLE_CONNECT_PROTOCOL = 1
                                H3_DATAGRAM = 1

STREAM(44): HEADERS
:method = CONNECT
:protocol = connect-ip
:scheme = https
:path = /proxy?target=target.example.com&ipproto=132
:authority = proxy.example.com
capsule-protocol = ?1

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

                              STREAM(44): DATA
                              Capsule Type = ADDRESS_ASSIGN
                              (Request ID = 0
                               IP Version = 6
                               IP Address = 2001:db8:1234::a
                               IP Prefix Length = 128)

                              STREAM(44): DATA
                              Capsule Type = ROUTE_ADVERTISEMENT
                              (IP Version = 6
                               Start IP Address = 2001:db8:3456::b
                               End IP Address = 2001:db8:3456::b
                               IP Protocol = 132)

DATAGRAM
Quarter Stream ID = 11
Context ID = 0
Payload = Encapsulated SCTP/IP Packet

                              DATAGRAM
                              Quarter Stream ID = 11
                              Context ID = 0
                              Payload = Encapsulated SCTP/IP Packet
]]></artwork>
        </figure>
      </section>
      <section anchor="proxied-connection-racing">
        <name>Proxied Connection Racing</name>
        <t>The following example shows a setup where a client is proxying UDP packets
through an IP proxy in order to control connection establishment racing
through an IP proxy, as defined in Happy Eyeballs <xref target="HEv2"/>. This example is
a variant of the proxied flow, but highlights how IP-level proxying can enable
new capabilities even for TCP and UDP.</t>
        <figure anchor="diagram-racing">
          <name>Proxied Connection Racing Setup</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="144" width="472" viewBox="0 0 472 144" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 8,32 L 8,112" fill="none" stroke="black"/>
                <path d="M 80,32 L 80,112" fill="none" stroke="black"/>
                <path d="M 240,32 L 240,112" fill="none" stroke="black"/>
                <path d="M 312,32 L 312,112" fill="none" stroke="black"/>
                <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
                <path d="M 240,32 L 312,32" fill="none" stroke="black"/>
                <path d="M 80,48 L 240,48" fill="none" stroke="black"/>
                <path d="M 320,48 L 424,48" fill="none" stroke="black"/>
                <path d="M 144,64 L 168,64" fill="none" stroke="black"/>
                <path d="M 144,80 L 168,80" fill="none" stroke="black"/>
                <path d="M 80,96 L 240,96" fill="none" stroke="black"/>
                <path d="M 320,96 L 424,96" fill="none" stroke="black"/>
                <path d="M 8,112 L 80,112" fill="none" stroke="black"/>
                <path d="M 240,112 L 312,112" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="432,96 420,90.4 420,101.6" fill="black" transform="rotate(0,424,96)"/>
                <polygon class="arrowhead" points="432,48 420,42.4 420,53.6" fill="black" transform="rotate(0,424,48)"/>
                <polygon class="arrowhead" points="328,96 316,90.4 316,101.6" fill="black" transform="rotate(180,320,96)"/>
                <polygon class="arrowhead" points="328,48 316,42.4 316,53.6" fill="black" transform="rotate(180,320,48)"/>
                <polygon class="arrowhead" points="176,80 164,74.4 164,85.6" fill="black" transform="rotate(0,168,80)"/>
                <polygon class="arrowhead" points="176,64 164,58.4 164,69.6" fill="black" transform="rotate(0,168,64)"/>
                <polygon class="arrowhead" points="152,80 140,74.4 140,85.6" fill="black" transform="rotate(180,144,80)"/>
                <polygon class="arrowhead" points="152,64 140,58.4 140,69.6" fill="black" transform="rotate(180,144,64)"/>
                <g class="text">
                  <text x="100" y="36">IP</text>
                  <text x="120" y="36">A</text>
                  <text x="204" y="36">IP</text>
                  <text x="224" y="36">B</text>
                  <text x="332" y="36">IP</text>
                  <text x="352" y="36">C</text>
                  <text x="444" y="52">IP</text>
                  <text x="464" y="52">E</text>
                  <text x="44" y="68">Client</text>
                  <text x="108" y="68">IP</text>
                  <text x="128" y="68">C</text>
                  <text x="184" y="68">E</text>
                  <text x="276" y="68">IP</text>
                  <text x="128" y="84">D</text>
                  <text x="184" y="84">F</text>
                  <text x="280" y="84">Proxy</text>
                  <text x="444" y="100">IP</text>
                  <text x="464" y="100">F</text>
                  <text x="332" y="116">IP</text>
                  <text x="352" y="116">D</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+--------+ IP A         IP B +--------+ IP C
|        +-------------------+        |<------------> IP E
| Client |  IP C <--> E      |   IP   |
|        |     D <--> F      |  Proxy |
|        +-------------------+        |<------------> IP F
+--------+                   +--------+ IP D

]]></artwork>
          </artset>
        </figure>
        <t>As with proxied flows, the client specfies both a target hostname and an IP
protocol number in the scope of its request. When the IP proxy performs DNS
resolution on behalf of the client, it can send the various remote address
options to the client as separate routes. It can also ensure that the client has
both IPv4 and IPv6 addresses assigned.</t>
        <t>The IP proxy assigns the client both an IPv4 address (192.0.2.3) and an IPv6
address (2001:db8:1234::a) to the client, as well as an IPv4 route
(198.51.100.2) and an IPv6 route (2001:db8:3456::b), which represent the resolved
addresses of the target hostname, scoped to UDP. The client can send and receive
UDP IP packets to either one of the IP proxy addresses to enable Happy Eyeballs
through the IP proxy.</t>
        <figure anchor="fig-listen">
          <name>Proxied Connection Racing Example</name>
          <artwork><![CDATA[
[[ From Client ]]             [[ From IP Proxy ]]

SETTINGS
  H3_DATAGRAM = 1

                              SETTINGS
                                ENABLE_CONNECT_PROTOCOL = 1
                                H3_DATAGRAM = 1

STREAM(44): HEADERS
:method = CONNECT
:protocol = connect-ip
:scheme = https
:path = /proxy?target=target.example.com&ipproto=17
:authority = proxy.example.com
capsule-protocol = ?1

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

                              STREAM(44): DATA
                              Capsule Type = ADDRESS_ASSIGN
                              (Request ID = 0
                               IP Version = 4
                               IP Address = 192.0.2.3
                               IP Prefix Length = 32),
                              (Request ID = 0
                               IP Version = 6
                               IP Address = 2001:db8::1234:1234
                               IP Prefix Length = 128)

                              STREAM(44): DATA
                              Capsule Type = ROUTE_ADVERTISEMENT
                              (IP Version = 4
                               Start IP Address = 198.51.100.2
                               End IP Address = 198.51.100.2
                               IP Protocol = 17),
                              (IP Version = 6
                               Start IP Address = 2001:db8:3456::b
                               End IP Address = 2001:db8:3456::b
                               IP Protocol = 17)
...

DATAGRAM
Quarter Stream ID = 11
Context ID = 0
Payload = Encapsulated IPv6 Packet

DATAGRAM
Quarter Stream ID = 11
Context ID = 0
Payload = Encapsulated IPv4 Packet

]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="extensibility-considerations">
      <name>Extensibility Considerations</name>
      <t>Extensions to IP proxying in HTTP can define behavior changes to this mechanism. Such
extensions <bcp14>SHOULD</bcp14> define new capsule types to exchange configuration information
if needed. It is <bcp14>RECOMMENDED</bcp14> for extensions that modify addressing to specify
that their extension capsules be sent before the ADDRESS_ASSIGN capsule and that
they do not take effect until the ADDRESS_ASSIGN capsule is parsed. This allows
modifications to address assignement to operate atomically. Similarly,
extensions that modify routing <bcp14>SHOULD</bcp14> behave similarly with regards to the
ROUTE_ADVERTISEMENT capsule.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>There are significant risks in allowing arbitrary clients to establish a tunnel
that permits sending to arbitrary hosts, regardless of whether tunnels are
scoped to specific hosts or not. Bad actors could abuse this capability
to send traffic and have it attributed to the IP proxy. IP proxies <bcp14>SHOULD</bcp14>
restrict its use to authenticated users. Depending on the deployment,
possible authentication mechanisms include mutual TLS between clients
and proxies, 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. As another example, proxies can
restrict address (prefix) assignment to clients based on certain client attributes
such as geographic location.</t>
      <t>Address assignment can have privacy implications for endpoints. For example,
if a proxy partitions its address space by the number of authenticated clients
and then assigns distinct address ranges to each client, target hosts could use
this information to determine when IP packets correspond to the same client.
Avoiding such tracking vectors may be important for certain proxy deployments.
Proxies <bcp14>SHOULD</bcp14> avoid persistent per-client address (prefix) assignment when possible.</t>
      <t>Falsifying IP source addresses in sent traffic has been common for denial of
service attacks. Implementations of this mechanism need to ensure that they do
not facilitate such attacks. In particular, there are scenarios where an
endpoint knows that its peer is only allowed to send IP packets from a given
prefix. For example, that can happen through out of band configuration
information, or when allowed prefixes are shared via ADDRESS_ASSIGN capsules. In
such scenarios, endpoints <bcp14>MUST</bcp14> follow the recommendations from
<xref target="BCP38"/> to prevent source address spoofing.</t>
      <t>Limiting request scope (see <xref target="scope"/>) allows two clients to share one
of the proxy's external IP addresses if their requests are scoped to different
IP protocol numbers. If the proxy receives an ICMP packet destined for that
external IP address, it has the option to forward it back to the clients.
However, some of these ICMP packets carry part of the original IP packet
that triggered the ICMP response. Forwarding such packets can accidentally
divulge information about one client's traffic to another client. To avoid this,
proxies that forward ICMP on shared external IP addresses <bcp14>MUST</bcp14> inspect
the invoking packet included in the ICMP packet and only forward the ICMP
packet to the client whose scoping matches the invoking packet.</t>
      <t>Since there are known risks with some IPv6 extension headers (e.g.,
<xref target="ROUTING-HDR"/>), implementers need to follow the latest guidance
regarding handling of IPv6 extension headers.</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-ip" 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-ip</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>Proxying of IP 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>Creation of the MASQUE URI Suffixes Registry</name>
        <t>This document requests that IANA create a new "MASQUE URI Suffixes" registry
maintained at IANA_URL_TBD. This new registry governs the path segment that
immediately follows "masque" in paths that start with "/.well-known/masque/",
see &lt;<eref target="https://www.iana.org/assignments/well-known-uris"/>&gt; for the registration
of "masque" in the "Well-Known URIs" registry. This new registry contains three
columns:</t>
        <dl>
          <dt>Path Segment:</dt>
          <dd>
            <t>An ASCII string containing only characters allowed in tokens; see
<xref section="5.6.2" sectionFormat="of" target="HTTP"/>. Entries in this registry <bcp14>MUST</bcp14> all have distinct
entries in this column.</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>A description of the entry.</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>An optional reference defining the use of the entry.</t>
          </dd>
        </dl>
        <t>The registration policy for this registry is Expert Review; see
<xref section="4.5" sectionFormat="of" target="IANA-POLICY"/>.</t>
        <t>There are initially two entries in this registry:</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">udp</td>
              <td align="left">UDP Proxying</td>
              <td align="left">RFC 9298</td>
            </tr>
            <tr>
              <td align="left">ip</td>
              <td align="left">IP Proxying</td>
              <td align="left">This Document</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="iana-uri">
        <name>Updates to masque Well-Known URI</name>
        <t>This document will request IANA to update the entry for the "masque"
URI suffix in the "Well-Known URIs" registry maintained at
&lt;<eref target="https://www.iana.org/assignments/well-known-uris"/>&gt;.</t>
        <t>IANA is requested to update the "Reference" field to include this
document in addition to previous values from that field.</t>
        <t>IANA is requested to replace the "Related Information" field with
"For sub-suffix allocations, see registry at IANA_URL_TBD." where
IANA_URL_TBD is the URL of the new registry described in <xref target="iana-suffix"/>.</t>
      </section>
      <section anchor="iana-types">
        <name>Capsule Type Registrations</name>
        <t>This document requests IANA to add the following values to the "HTTP Capsule Types"
registry maintained at
&lt;<eref target="https://www.iana.org/assignments/http-capsule-protocol"/>&gt;.</t>
        <table anchor="iana-capsules-table">
          <name>New Capsules</name>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Capsule Type</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x01</td>
              <td align="left">ADDRESS_ASSIGN</td>
              <td align="left">Address Assignment</td>
            </tr>
            <tr>
              <td align="left">0x02</td>
              <td align="left">ADDRESS_REQUEST</td>
              <td align="left">Address Request</td>
            </tr>
            <tr>
              <td align="left">0x03</td>
              <td align="left">ROUTE_ADVERTISEMENT</td>
              <td align="left">Route Advertisement</td>
            </tr>
          </tbody>
        </table>
        <t>All of these new entries use the following values for these fields:</t>
        <dl>
          <dt>Status:</dt>
          <dd>
            <t>provisional (permanent when this document is approved)</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>This Document</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Contact:</dt>
          <dd>
            <t>masque@ietf.org</t>
          </dd>
          <dt>Notes:</dt>
          <dd>
            <t>Empty</t>
          </dd>
        </dl>
        <t>RFC Editor: please remove the rest of this subsection before publication.</t>
        <t>Since this document has not yet been published, it might still change before
publication as RFC. Any implementer that wishes to deploy IP proxying in
production before publication <bcp14>MUST</bcp14> use the following temporary codepoints
instead: 0x2575D601 for ADDRESS_ASSIGN, 0x2575D602 for ADDRESS_REQUEST, and
0x2575D603 for ROUTE_ADVERTISEMENT.</t>
      </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="TEMPLATE">
          <front>
            <title>URI Template</title>
            <author fullname="J. Gregorio" initials="J." surname="Gregorio">
              <organization/>
            </author>
            <author fullname="R. Fielding" initials="R." surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Hadley" initials="M." surname="Hadley">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <author fullname="D. Orchard" initials="D." surname="Orchard">
              <organization/>
            </author>
            <date month="March" year="2012"/>
            <abstract>
              <t>A URI Template is a compact sequence of characters for describing a range of Uniform Resource Identifiers through variable expansion. This specification defines the URI Template syntax and the process for expanding a URI Template into a URI reference, along with guidelines for the use of URI Templates on the Internet.   [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6570"/>
          <seriesInfo name="DOI" value="10.17487/RFC6570"/>
        </reference>
        <reference anchor="HTTP-DGRAM">
          <front>
            <title>HTTP Datagrams and the Capsule Protocol</title>
            <author fullname="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>
        <reference anchor="URI">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee">
              <organization/>
            </author>
            <author fullname="R. Fielding" initials="R." surname="Fielding">
              <organization/>
            </author>
            <author fullname="L. Masinter" initials="L." surname="Masinter">
              <organization/>
            </author>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource.  This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet.  The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier.  This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="PROXY-STATUS">
          <front>
            <title>The Proxy-Status HTTP Response Header Field</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <author fullname="P. Sikora" initials="P." surname="Sikora">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <abstract>
              <t>This document defines the Proxy-Status HTTP response field to convey the details of an intermediary's response handling, including generated errors.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9209"/>
          <seriesInfo name="DOI" value="10.17487/RFC9209"/>
        </reference>
        <reference anchor="ABNF">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker">
              <organization/>
            </author>
            <author fullname="P. Overell" initials="P." surname="Overell">
              <organization/>
            </author>
            <date month="January" year="2008"/>
            <abstract>
              <t>Internet technical specifications often need to define a formal syntax.  Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications.  The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power.  The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges.  This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="IPv6">
          <front>
            <title>Internet Protocol, Version 6 (IPv6) Specification</title>
            <author fullname="S. Deering" initials="S." surname="Deering">
              <organization/>
            </author>
            <author fullname="R. Hinden" initials="R." surname="Hinden">
              <organization/>
            </author>
            <date month="July" year="2017"/>
            <abstract>
              <t>This document specifies version 6 of the Internet Protocol (IPv6). It obsoletes RFC 2460.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="86"/>
          <seriesInfo name="RFC" value="8200"/>
          <seriesInfo name="DOI" value="10.17487/RFC8200"/>
        </reference>
        <reference anchor="DGRAM">
          <front>
            <title>An Unreliable Datagram Extension to QUIC</title>
            <author fullname="T. Pauly" initials="T." surname="Pauly">
              <organization/>
            </author>
            <author fullname="E. Kinnear" initials="E." surname="Kinnear">
              <organization/>
            </author>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi">
              <organization/>
            </author>
            <date month="March" year="2022"/>
            <abstract>
              <t>This document defines an extension to the QUIC transport protocol to add support for sending and receiving unreliable datagrams over a QUIC connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9221"/>
          <seriesInfo name="DOI" value="10.17487/RFC9221"/>
        </reference>
        <reference anchor="ICMP">
          <front>
            <title>Internet Control Message Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel">
              <organization/>
            </author>
            <date month="September" year="1981"/>
          </front>
          <seriesInfo name="STD" value="5"/>
          <seriesInfo name="RFC" value="792"/>
          <seriesInfo name="DOI" value="10.17487/RFC0792"/>
        </reference>
        <reference anchor="ICMPv6">
          <front>
            <title>Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification</title>
            <author fullname="A. Conta" initials="A." surname="Conta">
              <organization/>
            </author>
            <author fullname="S. Deering" initials="S." surname="Deering">
              <organization/>
            </author>
            <author fullname="M. Gupta" initials="M." role="editor" surname="Gupta">
              <organization/>
            </author>
            <date month="March" year="2006"/>
            <abstract>
              <t>This document describes the format of a set of control messages used in ICMPv6 (Internet Control Message Protocol).  ICMPv6 is the Internet Control Message Protocol for Internet Protocol version 6 (IPv6).  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="89"/>
          <seriesInfo name="RFC" value="4443"/>
          <seriesInfo name="DOI" value="10.17487/RFC4443"/>
        </reference>
        <reference anchor="BCP38">
          <front>
            <title>Network Ingress Filtering: Defeating Denial of Service Attacks which employ IP Source Address Spoofing</title>
            <author fullname="P. Ferguson" initials="P." surname="Ferguson">
              <organization/>
            </author>
            <author fullname="D. Senie" initials="D." surname="Senie">
              <organization/>
            </author>
            <date month="May" year="2000"/>
            <abstract>
              <t>This paper discusses a simple, effective, and straightforward method for using ingress traffic filtering to prohibit DoS (Denial of Service) attacks which use forged IP addresses to be propagated from 'behind' an Internet Service Provider's (ISP) aggregation point.  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="38"/>
          <seriesInfo name="RFC" value="2827"/>
          <seriesInfo name="DOI" value="10.17487/RFC2827"/>
        </reference>
        <reference anchor="IANA-POLICY">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton">
              <organization/>
            </author>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <author fullname="T. Narten" initials="T." surname="Narten">
              <organization/>
            </author>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters.  To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper.  For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed.  This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="IANA-PN" target="https://www.iana.org/assignments/protocol-numbers">
          <front>
            <title>Protocol Numbers</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date/>
          </front>
        </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="IPv6-ADDR">
          <front>
            <title>IP Version 6 Addressing Architecture</title>
            <author fullname="R. Hinden" initials="R." surname="Hinden">
              <organization/>
            </author>
            <author fullname="S. Deering" initials="S." surname="Deering">
              <organization/>
            </author>
            <date month="February" year="2006"/>
            <abstract>
              <t>This specification defines the addressing architecture of the IP Version 6 (IPv6) protocol.  The document includes the IPv6 addressing model, text representations of IPv6 addresses, definition of IPv6 unicast addresses, anycast addresses, and multicast addresses, and an IPv6 node's required addresses.</t>
              <t>This document obsoletes RFC 3513, "IP Version 6 Addressing Architecture".   [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4291"/>
          <seriesInfo name="DOI" value="10.17487/RFC4291"/>
        </reference>
        <reference anchor="IPSEC">
          <front>
            <title>Security Architecture for the Internet Protocol</title>
            <author fullname="S. Kent" initials="S." surname="Kent">
              <organization/>
            </author>
            <author fullname="K. Seo" initials="K." surname="Seo">
              <organization/>
            </author>
            <date month="December" year="2005"/>
            <abstract>
              <t>This document describes an updated version of the "Security Architecture for IP", which is designed to provide security services for traffic at the IP layer.  This document obsoletes RFC 2401 (November 1998).  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4301"/>
          <seriesInfo name="DOI" value="10.17487/RFC4301"/>
        </reference>
        <reference anchor="HEv2">
          <front>
            <title>Happy Eyeballs Version 2: Better Connectivity Using Concurrency</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi">
              <organization/>
            </author>
            <author fullname="T. Pauly" initials="T." surname="Pauly">
              <organization/>
            </author>
            <date month="December" year="2017"/>
            <abstract>
              <t>Many communication protocols operating over the modern Internet use hostnames.  These often resolve to multiple IP addresses, each of which may have different performance and connectivity characteristics.  Since specific addresses or address families (IPv4 or IPv6) may be blocked, broken, or sub-optimal on a network, clients that attempt multiple connections in parallel have a chance of establishing a connection more quickly.  This document specifies requirements for algorithms that reduce this user-visible delay and provides an example algorithm, referred to as "Happy Eyeballs".  This document obsoletes the original algorithm description in RFC 6555.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8305"/>
          <seriesInfo name="DOI" value="10.17487/RFC8305"/>
        </reference>
        <reference anchor="ROUTING-HDR">
          <front>
            <title>Deprecation of Type 0 Routing Headers in IPv6</title>
            <author fullname="J. Abley" initials="J." surname="Abley">
              <organization/>
            </author>
            <author fullname="P. Savola" initials="P." surname="Savola">
              <organization/>
            </author>
            <author fullname="G. Neville-Neil" initials="G." surname="Neville-Neil">
              <organization/>
            </author>
            <date month="December" year="2007"/>
            <abstract>
              <t>The functionality provided by IPv6's Type 0 Routing Header can be exploited in order to achieve traffic amplification over a remote path for the purposes of generating denial-of-service traffic.  This document updates the IPv6 specification to deprecate the use of IPv6 Type 0 Routing Headers, in light of this security concern.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5095"/>
          <seriesInfo name="DOI" value="10.17487/RFC5095"/>
        </reference>
        <reference anchor="PROXY-REQS">
          <front>
            <title>Requirements for a MASQUE Protocol to Proxy IP Traffic</title>
            <author fullname="Alex Chernyakhovsky" initials="A." surname="Chernyakhovsky">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Dallas McCall" initials="D." surname="McCall">
              <organization>Google LLC</organization>
            </author>
            <author fullname="David Schinazi" initials="D." surname="Schinazi">
              <organization>Google LLC</organization>
            </author>
            <date day="27" month="August" year="2021"/>
            <abstract>
              <t>   There is interest among MASQUE working group participants in
   designing a protocol that can proxy IP traffic over HTTP.  This
   document describes the set of requirements for such a protocol.

   Discussion of this work is encouraged to happen on the MASQUE IETF
   mailing list masque@ietf.org or on the GitHub repository which
   contains the draft: https://github.com/ietf-wg-masque/draft-ietf-
   masque-ip-proxy-reqs.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-masque-ip-proxy-reqs-03"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The design of this method was inspired by discussions in the MASQUE working
group around <xref target="PROXY-REQS"/>. The authors would
like to thank participants in those discussions for their feedback.
Additionally, <contact fullname="Mike Bishop"/>, <contact fullname="Lucas Pardue"/>, and <contact fullname="Alejandro Sedeño"/>
provided valuable feedback on the document.</t>
      <t>Most of the text on client configuration is based on the corresponding text in
<xref target="CONNECT-UDP"/>.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
