<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-seemann-masque-connect-udp-rendezvous-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="UDP Rendezvous">UDP Rendezvous over HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-seemann-masque-connect-udp-rendezvous-00"/>
    <author fullname="Marten Seemann">
      <organization/>
      <address>
        <email>martenseemann@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="August" day="16"/>
    <area>Web and Internet Transport</area>
    <workgroup>MASQUE</workgroup>
    <keyword>masque</keyword>
    <keyword>connect-udp</keyword>
    <keyword>rendezvous</keyword>
    <abstract>
      <?line 35?>

<t>This document defines an Extended CONNECT protocol for relaying UDP between two
clients authenticated by the same proxy. A Listener registers with the proxy,
and a Client uses the resulting Rendezvous ID to connect to it. No public UDP
address is allocated.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://marten-seemann.github.io/draft-seemann-masque-connect-udp-rendezvous/draft-seemann-masque-connect-udp-rendezvous.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-seemann-masque-connect-udp-rendezvous/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Multiplexed Application Substrate over QUIC Encryption 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/marten-seemann/draft-seemann-masque-connect-udp-rendezvous"/>.</t>
    </note>
  </front>
  <middle>
    <?line 43?>

<section anchor="intro">
      <name>Introduction</name>
      <t>CONNECT-UDP (<xref target="RFC9298"/>) allows an HTTP client to proxy UDP payloads to a
fixed remote host and port.</t>
      <t>This document defines a sibling protocol to CONNECT-UDP for deployments where
both endpoints can connect to the same proxy. A Listener opens a long-lived
rendezvous request and receives a Rendezvous ID. A Client opens a separate
rendezvous request carrying that ID. The proxy associates both requests and
forwards HTTP Datagrams (<xref target="RFC9297"/>) between them.</t>
      <t>One Listener request can serve multiple Clients.</t>
      <t>Authentication and distribution of Rendezvous IDs are out of scope.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>This document uses the following terms:</t>
      <dl>
        <dt>Listener:</dt>
        <dd>
          <t>The endpoint that creates a listener request. A Listener can communicate with
multiple Clients on one request.</t>
        </dd>
        <dt>Client:</dt>
        <dd>
          <t>The endpoint that creates a join request. A join request connects to exactly
one Listener.</t>
        </dd>
        <dt>Rendezvous ID:</dt>
        <dd>
          <t>An opaque identifier issued by the proxy for a Listener request.</t>
        </dd>
      </dl>
      <t>The Listener and Client are both HTTP clients.</t>
    </section>
    <section anchor="protocol">
      <name>Protocol</name>
      <section anchor="requests">
        <name>Requests</name>
        <t>This protocol uses HTTP Extended CONNECT (<xref target="RFC8441"/>, <xref target="RFC9220"/>) with the
<tt>:protocol</tt> pseudo-header field set to <tt>connect-udp-rendezvous</tt>. It is defined
for HTTP/2 and HTTP/3, but not HTTP/1.1. An endpoint <bcp14>MUST NOT</bcp14> send a rendezvous
request until it has received SETTINGS_ENABLE_CONNECT_PROTOCOL with value 1.</t>
        <t>Endpoints are configured with an HTTPS URI identifying the rendezvous proxy.
A rendezvous request uses this URI as its target.</t>
        <t>Requests and successful responses use the Capsule Protocol as described in
<xref section="3.2" sectionFormat="of" target="RFC9297"/>. The request and successful response <bcp14>MUST</bcp14> contain a
Capsule-Protocol field with value <tt>?1</tt>. A successful response has a status code
in the 2xx range. An endpoint <bcp14>MUST</bcp14> abort the request if these requirements are
not met. The proxy <bcp14>MUST NOT</bcp14> interpret the service URI as a UDP target or open a
UDP socket.</t>
      </section>
      <section anchor="rendezvous-field">
        <name>The Connect-UDP-Rendezvous HTTP Field</name>
        <t>Connect-UDP-Rendezvous is an Item Structured Header Field (<xref target="RFC9651"/>). Its
bare item is the Token <tt>listen</tt> or <tt>join</tt>. The <tt>id</tt> parameter, when present, is
a Byte Sequence.</t>
        <table>
          <name>Connect-UDP-Rendezvous Field Values</name>
          <thead>
            <tr>
              <th align="left">Message</th>
              <th align="left">Field Value</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Listener request</td>
              <td align="left">
                <tt>listen</tt></td>
            </tr>
            <tr>
              <td align="left">Successful Listener response</td>
              <td align="left">
                <tt>listen; id=:...:</tt></td>
            </tr>
            <tr>
              <td align="left">Join request</td>
              <td align="left">
                <tt>join; id=:...:</tt></td>
            </tr>
            <tr>
              <td align="left">Successful join response</td>
              <td align="left">
                <tt>join</tt></td>
            </tr>
          </tbody>
        </table>
        <t>The field <bcp14>MUST NOT</bcp14> appear in trailers. Unknown parameters are ignored. A
request with a missing field or a field that cannot be parsed or does not match
the table is malformed. The proxy <bcp14>MUST</bcp14> respond with a 400 (Bad Request) status
code.</t>
        <t>A Rendezvous ID is opaque to both endpoints. The proxy <bcp14>MUST NOT</bcp14> issue the same
ID for two live Listener requests.</t>
        <t>An endpoint that receives a successful response without the expected field
value <bcp14>MUST</bcp14> abort the request and <bcp14>MUST NOT</bcp14> send HTTP Datagrams on it.</t>
        <t>The proxy <bcp14>SHOULD</bcp14> use the same error response for an unknown Rendezvous ID and
an unauthorized association.</t>
      </section>
    </section>
    <section anchor="datagram-forwarding">
      <name>Datagram Forwarding</name>
      <t>HTTP Datagrams use the format defined in <xref section="5" sectionFormat="of" target="RFC9298"/> and the
Context ID allocation rules from <xref section="4" sectionFormat="of" target="RFC9298"/>. A join request uses
Context ID 0. When forwarding the first datagram on that request, the proxy
allocates a new non-zero odd Context ID on the Listener request and replaces
Context ID 0 with it. It uses that Context ID for all datagrams on the join
request; the reverse mapping applies to datagrams from the Listener. The proxy
<bcp14>MUST NOT</bcp14> reuse a Context ID on the same Listener request, modify a UDP payload,
or forward it to more than one association.</t>
      <t>When the Listener receives a datagram from the proxy with a previously unseen
odd Context ID that has not been closed, it registers that Context ID as a new
Client association before processing the datagram. The Listener <bcp14>MUST NOT</bcp14> send
an HTTP Datagram using the Context ID before receiving it from the proxy.</t>
      <t>A Listener request <bcp14>MUST NOT</bcp14> carry Context ID 0. A recipient <bcp14>MUST</bcp14> abort the
request stream if it receives one. Other unregistered Context IDs are handled
as specified in <xref section="5" sectionFormat="of" target="RFC9298"/>.</t>
      <t>The proxy <bcp14>MUST</bcp14> drop a datagram that does not fit on the outgoing connection.
UDP payloads <bcp14>MUST NOT</bcp14> exceed 65527 octets. An oversized payload on a join
request is handled as specified in <xref section="5" sectionFormat="of" target="RFC9298"/>; the proxy <bcp14>MUST</bcp14>
close the association if it receives an oversized payload from the Listener.</t>
      <t>A Client <bcp14>MAY</bcp14> send HTTP Datagrams before receiving the response to its join
request. The proxy <bcp14>MUST NOT</bcp14> forward a datagram before sending a successful
response. It <bcp14>MAY</bcp14> discard or buffer early datagrams. Buffering <bcp14>MUST</bcp14> be bounded;
buffered datagrams <bcp14>MUST</bcp14> be discarded if the request is rejected. A Client <bcp14>MUST</bcp14>
discard an HTTP/3 Datagram received before the response.</t>
      <section anchor="closing-associations">
        <name>Closing Associations</name>
        <t>The RENDEZVOUS_CLOSE capsule closes one association. It contains exactly one
Context ID encoded as a QUIC variable-length integer:</t>
        <figure anchor="rendezvous-close-format">
          <name>RENDEZVOUS_CLOSE Capsule Format</name>
          <artwork><![CDATA[
RENDEZVOUS_CLOSE Capsule {
  Type (i) = TBD1,
  Length (i),
  Context ID (i),
}
]]></artwork>
        </figure>
        <t>RENDEZVOUS_CLOSE capsules are only sent on Listener requests and <bcp14>MUST</bcp14> carry a
non-zero odd Context ID. Receipt on another request, or with a zero or even
Context ID, is an error processing the Capsule Protocol. A proxy <bcp14>MUST</bcp14> treat
receipt for a Context ID it never allocated as the same error.</t>
        <t>A RENDEZVOUS_CLOSE capsule sent by the proxy can arrive before the first
datagram for that Context ID. The Listener <bcp14>MUST</bcp14> record the Context ID as closed
until the Listener request ends and discard later datagrams carrying it. Once
the Listener or proxy sends or receives this capsule, it <bcp14>MUST NOT</bcp14> send HTTP
Datagrams using that Context ID.</t>
        <t>Closing or resetting either direction of a rendezvous request causes the proxy
to close the other direction. Closing the Listener request also invalidates the
Rendezvous ID and closes every join request. Closing a join request causes the
proxy to send RENDEZVOUS_CLOSE if the Listener request remains open and a
Context ID was allocated, unless it received that capsule from the Listener. A
RENDEZVOUS_CLOSE from the Listener causes the proxy to close the corresponding
join request.</t>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>Proxy authentication does not provide end-to-end peer authentication,
confidentiality, or integrity. Applications that require these properties use
an end-to-end protocol such as QUIC or DTLS.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document requests registration of the following value in the "HTTP
Upgrade Tokens" registry:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">Description</th>
            <th align="left">Expected Version Tokens</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">connect-udp-rendezvous</td>
            <td align="left">Rendezvous Proxying of UDP Payloads</td>
            <td align="left">None</td>
            <td align="left">This document</td>
          </tr>
        </tbody>
      </table>
      <t>This document requests registration of the following field in the "Hypertext
Transfer Protocol (HTTP) Field Name Registry":</t>
      <table>
        <thead>
          <tr>
            <th align="left">Field Name</th>
            <th align="left">Status</th>
            <th align="left">Structured Type</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Connect-UDP-Rendezvous</td>
            <td align="left">provisional</td>
            <td align="left">Item</td>
            <td align="left">This document</td>
          </tr>
        </tbody>
      </table>
      <t>This document requests registration of the following value in the "HTTP
Capsule Types" registry:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">Capsule Type</th>
            <th align="left">Status</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">TBD1</td>
            <td align="left">RENDEZVOUS_CLOSE</td>
            <td align="left">provisional</td>
            <td align="left">This document</td>
          </tr>
        </tbody>
      </table>
      <t>The change controller is the IETF and the contact is the MASQUE Working Group
(masque@ietf.org).</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC9298">
        <front>
          <title>Proxying UDP in HTTP</title>
          <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
          <date month="August" year="2022"/>
          <abstract>
            <t>This document describes how to proxy UDP in HTTP, similar to how the HTTP CONNECT method allows proxying TCP in HTTP. More specifically, this document defines a protocol that allows an HTTP client to create a tunnel for UDP communications through an HTTP server that acts as a proxy.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9298"/>
        <seriesInfo name="DOI" value="10.17487/RFC9298"/>
      </reference>
      <reference anchor="RFC9297">
        <front>
          <title>HTTP Datagrams and the Capsule Protocol</title>
          <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
          <author fullname="L. Pardue" initials="L." surname="Pardue"/>
          <date month="August" year="2022"/>
          <abstract>
            <t>This document describes HTTP Datagrams, a convention for conveying multiplexed, potentially unreliable datagrams inside an HTTP connection.</t>
            <t>In HTTP/3, HTTP Datagrams can be sent unreliably using the QUIC DATAGRAM extension. When the QUIC DATAGRAM frame is unavailable or undesirable, HTTP Datagrams can be sent using the Capsule Protocol, which is a more general convention for conveying data in HTTP connections.</t>
            <t>HTTP Datagrams and the Capsule Protocol are intended for use by HTTP extensions, not applications.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9297"/>
        <seriesInfo name="DOI" value="10.17487/RFC9297"/>
      </reference>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
      <reference anchor="RFC8441">
        <front>
          <title>Bootstrapping WebSockets with HTTP/2</title>
          <author fullname="P. McManus" initials="P." surname="McManus"/>
          <date month="September" year="2018"/>
          <abstract>
            <t>This document defines a mechanism for running the WebSocket Protocol (RFC 6455) over a single stream of an HTTP/2 connection.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8441"/>
        <seriesInfo name="DOI" value="10.17487/RFC8441"/>
      </reference>
      <reference anchor="RFC9220">
        <front>
          <title>Bootstrapping WebSockets with HTTP/3</title>
          <author fullname="R. Hamilton" initials="R." surname="Hamilton"/>
          <date month="June" year="2022"/>
          <abstract>
            <t>The mechanism for running the WebSocket Protocol over a single stream of an HTTP/2 connection is equally applicable to HTTP/3, but the HTTP-version-specific details need to be specified. This document describes how the mechanism is adapted for HTTP/3.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9220"/>
        <seriesInfo name="DOI" value="10.17487/RFC9220"/>
      </reference>
      <reference anchor="RFC9651">
        <front>
          <title>Structured Field Values for HTTP</title>
          <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
          <author fullname="P-H. Kamp" surname="P-H. Kamp"/>
          <date month="September" year="2024"/>
          <abstract>
            <t>This document describes a set of data types and associated algorithms that are intended to make it easier and safer to define and handle HTTP header and trailer fields, known as "Structured Fields", "Structured Headers", or "Structured Trailers". It is intended for use by specifications of new HTTP fields.</t>
            <t>This document obsoletes RFC 8941.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9651"/>
        <seriesInfo name="DOI" value="10.17487/RFC9651"/>
      </reference>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA61a63LbNhb+j6fAKn+SHUuOc2lTpZd1bKfxjmO7ltxOd2en
hkhIYkMRXIC0rdrus+yz7JPtdw5ACpTkbruzfxIRBA7O9TsXut/viyqrcj2U
vcvDc3mhi1T/cm1qJ821tvLDeHzeE2oysfp6Y0tPJKrSM2OXQ+mqVIjUJIVa
gFZq1bTqO60Xqij6C+X+Wet+YopCJ1W/Tsu+bYn0nz8Xrp4sMucyU1TLEseP
j8bvRVEvJtoORYo7hgKHnS5c7YaysrUW4OalUFYrcPWDnkhVpPK4qLQtdCXH
VhWuNLbqiZvZUH7cH313eSQ+6eWNselQyL70LNGviCt6XDEmrnVR42YpZ9bU
Je75WOdVVub6VqdyvyzzDOKDZzmqJ66yYNPr7LvL4wN5VCR2WdLrHih4sXo/
GPspK2byWyJI6wuV5Vj33Pwl09V0YOyM3iibzPFmXlWlG+7u0kZayq71oNm2
Swu7E2tunN71JHbp6Cyr5vWEydpKF40Zdv+AUYhMDoFc1eEhJjfw1wwy80cI
/5G9g3m1yHtCqLqaG0tmA1dSTus89172kRmSI0+MX2qvUc9quOUvM1ocJGYh
RGHsAka7hl3FYDAQot/vS8XmSyohxvPMSXhxvdBFJVM9zQrt4Fvy6LYivlJ5
cHZ6enQwlqU1lUlMLqfGwmlytSTDUnxMdHWjwVZ1Y0SSZyAEChABP8hhQGOy
lHiUDkIQndvlQO7Lk8zhCk3EZvTTOnkDDfNO3rQjyMeVPGCasnbgjF5a7cgv
cXsUvMeHsjKNb9PPrBrIUyPLegK3JT6FSlMcdRISqzw3zBoUwhpZZGmaayGe
UExZk9YJO/rdk4weH4QIauiTwE/v7v508f7gixdfvHl4eMbEblhpBB7Sq4BY
YClYRaVa5kaljlaVmGYUUFYvDCJoblzFwUzhO3jUItJlEAQyt3YAqZgpMkuq
y9wsF2yBm7m2WkwMNAotlSajxQRMRjr6DaOYEu6Ea3NTzPo5/CcVK0cF7/Di
wLfVicZ72tyxB5ELpmuIOV0qgo1tpBJlLbtUNVcVHx83jiCVcybJKDwlCxTO
kM5TAcFvlIVuWfuHqlIzqxYustLnZKXWS+d6ATWfFTr2wIaHAjzaay0XAfmC
BA4n9lcuTa5BoqcgYLNJzQtm2pUf3FkAZF3RG5dAB+RsT+SBKa6JjimYf3lI
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
9ncWz5rP3ROVfBL/AeTUo7gLIwAA

-->

</rfc>
