<?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.30 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-munizaga-quic-alternative-server-address-00" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title>QUIC Alternative Server Address Frames</title>
    <seriesInfo name="Internet-Draft" value="draft-munizaga-quic-alternative-server-address-00"/>
    <author fullname="Marco Munizaga">
      <organization>Ethereum Foundation</organization>
      <address>
        <email>marco@marcopolo.io</email>
      </address>
    </author>
    <author fullname="Marten Seemann">
      <organization>Smallstep</organization>
      <address>
        <email>martenseemann@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="March" day="02"/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 55?>

<t>This document specifies an extension to QUIC to allow a server to advertise
alternative addresses.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://marcopolo.github.io/alternative-server-address/draft-munizaga-quic-alternative-server-address.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-munizaga-quic-alternative-server-address/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        QUIC Working Group mailing list (<eref target="mailto:quic@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/quic/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/quic/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/MarcoPolo/alternative-server-address"/>.</t>
    </note>
  </front>
  <middle>
    <?line 60?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The QUIC transport protocol allows a client to migrate connections at any time
to any new address (<xref section="9" sectionFormat="of" target="QUIC-TRANSPORT"/>). This allows the connection
to survive changes to the client's address. A client can use this mechanism to
keep redundant paths available or transparently move to a different local
address. A server, in contrast, can not use alternative addresses as redundant
paths and has no way to dynamically signal a preferred address. In some
deployments, specifically peer to peer settings, adding this symmetry is useful.</t>
      <t>This document specifies an extension to QUIC that allows a server to inform a
client of alternative, possibly preferred, addresses.</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?>

</section>
    <section anchor="motivation">
      <name>Motivation</name>
      <t>In peer to peer networks, the role of server and client is arbitrary. An
endpoint may serve as a client in one connection and a server in another.
A peer acting as a server would like to communicate to its peer its alternative
addresses. The server peer does this for both redundancy (a peer may advertise a
globally reachable relayed unicast address as a backup) and to signal preference
(a peer may be using a proxy, and wish to migrate to a new proxy).</t>
      <t>While it is not the primary goal, this extension may also assist in NAT
traversal by migrating to a dynamically chosen server address. A server could
have a client connect over a relay, and later migrate to a direct connection
after applying NAT traversal techniques. The specific NAT traversal techniques
are out of scope of this document.</t>
      <t>TODO: Is the above NAT paragraph useful? Would it be better to leave this
implied?</t>
    </section>
    <section anchor="negotiating-extension-use">
      <name>Negotiating Extension Use</name>
      <t>alternative_address (0xff0969d85c):</t>
      <t>Clients advertise their support of this extension by sending the
alternative_address (0xff0969d85c) transport parameter (<xref section="7.4" sectionFormat="of" target="QUIC-TRANSPORT"/>) with an empty value. Sending this transport parameter signals
to the server that the client understands the ALTERNATIVE_V4_ADDRESS and
ALTERNATIVE_V6_ADDRESS frames.</t>
      <t>Servers <bcp14>MUST NOT</bcp14> send this transport parameter. A client that supports this
extension and receives this transport parameter <bcp14>MUST</bcp14> abort the connection with a
TRANSPORT_PARAMETER_ERROR.</t>
      <t>Endpoints <bcp14>MUST NOT</bcp14> remember the value of this extension for 0-RTT.</t>
    </section>
    <section anchor="server-initiated-paths">
      <name>Server initiated Paths</name>
      <t>In connections that use this extension, clients <bcp14>MUST NOT</bcp14> discard probing packets
received from an unknown server address. Clients <bcp14>MUST</bcp14> validate the path per
<xref section="9.1" sectionFormat="of" target="QUIC-TRANSPORT"/>.</t>
      <t>TODO alternatively, should clients treat a server address identified by an
alternative address frame as known, and accept probing packets from this
address? This would require the server to know its address before hand, which
could be annoying if the server is behind a NAT and initially reached over a relay.</t>
    </section>
    <section anchor="alternative-address-frames">
      <name>Alternative Address Frames</name>
      <t>A server uses the following frames to inform the client of an alternative
address. The Preferred bit signals this address is preferred over the currently
in-use server address. The Retire bit signals that this address is no longer an
alternative address for this server (TODO what happens if the server sends a
Retire bit on the current address?). Clients <bcp14>SHOULD</bcp14> close paths associated
with addresses for which the Retire bit is set.</t>
      <t>When the Retire bit is not set, clients <bcp14>SHOULD</bcp14> open a path to the provided
address. If the Preferred bit is set, clients should migrate to or otherwise
prioritze the path with the provided address.</t>
      <t>The alternative address frames are defined as follows:</t>
      <artwork><![CDATA[
ALTERNATIVE_V4_ADDRESS Frame {
  Type (i) = 0x1d5845e2,
  Preferred (1),
  Retire (1),
  unused (6)
  Status Sequence Number (i),
  IPv4 Address (32),
  IPv4 Port (16),
}
]]></artwork>
      <artwork><![CDATA[
ALTERNATIVE_V6_ADDRESS Frame {
  Type (i) = 0x1d5845e3,
  Preferred (1),
  Retire (1),
  unused (6)
  Status Sequence Number (i),
  IPv6 Address (128),
  IPv6 Port (16),
}
]]></artwork>
      <t>Following the common frame format described in <xref section="12.4" sectionFormat="of" target="QUIC-TRANSPORT"/>.</t>
      <t>The sequence number space is common to the two frame types, and monotonically
increasing values <bcp14>MUST</bcp14> be used when sending updates for a given IP and Port
tuple.</t>
      <t>TODO: Do we want a probing frame that identifies this path as preferred so it can be used to signal a request to migrate to this path? Do we want to reuse PATH_STATUS_BACKUP or PATH_STATUS_AVAILABLE to harmonize with the Multipath QUIC extension?</t>
    </section>
    <section anchor="frame-properties">
      <name>Frame properties</name>
      <t>all frames are ack-eliciting, and <bcp14>MUST</bcp14> only be sent in the application data
packet number space.</t>
      <t>The server <bcp14>SHOULD</bcp14> ensure that its peer has a sufficient number of available and
unused connection IDs, as the client will be unable to probe paths without an
unused connection ID. The server <bcp14>MAY</bcp14> bundle a NEW_CONNECTION_ID frame with a
alternative address frame. Likewise, the client should ensure the same to allow
the server to probe new paths.</t>
    </section>
    <section anchor="interaction-with-the-multipath-extension-for-quic">
      <name>Interaction with the Multipath Extension for QUIC</name>
      <t>This extension compliments the Multipath extension for QUIC by allowing the
server to contribute more information to the client for alternative paths.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="request-forgery-attacks">
        <name>Request Forgery Attacks</name>
        <t>The same considerations from <xref section="21.5" sectionFormat="of" target="QUIC-TRANSPORT"/> apply here as
well.</t>
      </section>
      <section anchor="ddos-thundering-herd">
        <name>DDoS - Thundering herd</name>
        <t>A malicious server could wait until it has received a large number of clients,
and request a migration from all of them at the same time to a victim endpoint.
If the clients all migrate at the same time, they may overload or otherwise
negatively impact the victim endpoint.</t>
        <t>Clients may mitigate this by randomly delaying the migration.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="quic-transport-parameter">
        <name>QUIC Transport Parameter</name>
        <t>This document registers the alternative_address transport parameter in the "QUIC
Transport Parameters" registry established in <xref section="22.3" sectionFormat="of" target="QUIC-TRANSPORT"/>. The following fields are registered:</t>
        <dl>
          <dt>Value:</dt>
          <dd>
            <t>0xff0969d85c</t>
          </dd>
          <dt>Parameter Name:</dt>
          <dd>
            <t>alternative_address</t>
          </dd>
          <dt>Status:</dt>
          <dd>
            <t>Provisional</t>
          </dd>
          <dt>Specification:</dt>
          <dd>
            <t>This document</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF (iesg@ietf.org)</t>
          </dd>
          <dt>Contact:</dt>
          <dd>
            <t>Marco Munizaga (marco@marcopolo.io)</t>
          </dd>
        </dl>
      </section>
      <section anchor="quic-frame-types">
        <name>QUIC Frame Types</name>
        <t>TODO</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="QUIC-TRANSPORT">
        <front>
          <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
          <author initials="J." surname="Iyengar" fullname="Jana Iyengar" role="editor">
            <organization>Fastly</organization>
          </author>
          <author initials="M." surname="Thomson" fullname="Martin Thomson" role="editor">
            <organization>Mozilla</organization>
          </author>
          <date year="2021" month="May"/>
        </front>
        <seriesInfo name="RFC" value="9000"/>
        <seriesInfo name="DOI" value="10.17487/RFC9000"/>
      </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>
    </references>
    <?line 252?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
    <section numbered="false" anchor="questions">
      <name>Questions</name>
      <ul spacing="normal">
        <li>
          <t>Any new security considerations from allowing a dynamically chosen preferred
address?</t>
        </li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
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
hR8AAA==

-->

</rfc>
