<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" docName="draft-ietf-tsvwg-udp-options-dplpmtud-15" number="9869" consensus="true" ipr="trust200902" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" tocDepth="4" symRefs="true" sortRefs="true" prepTime="2025-10-07T15:51:53" indexInclude="true" scripts="Common,Latin">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-tsvwg-udp-options-dplpmtud-15" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9869" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="UDP Options with DPLPMTUD">Datagram Packetization Layer Path MTU Discovery (DPLPMTUD) for UDP Options</title>
    <seriesInfo name="RFC" value="9869" stream="IETF"/>
    <author fullname="Godred Fairhurst" initials="G" surname="Fairhurst">
      <organization showOnFrontPage="true">University of Aberdeen</organization>
      <address>
        <postal>
          <street>School of Engineering</street>
          <street>Fraser Noble Building</street>
          <city>Aberdeen</city>
          <code>AB24 3UE</code>
          <country>United Kingdom</country>
        </postal>
        <email>gorry@erg.abdn.ac.uk</email>
      </address>
    </author>
    <author fullname="Tom Jones" initials="T" surname="Jones">
      <organization showOnFrontPage="true">University of Aberdeen</organization>
      <address>
        <postal>
          <street>School of Engineering</street>
          <street>Fraser Noble Building</street>
          <city>Aberdeen</city>
          <code>AB24 3UE</code>
          <country>United Kingdom</country>
        </postal>
        <email>tom@erg.abdn.ac.uk</email>
      </address>
    </author>
    <date month="10" year="2025"/>
    <area>WIT</area>
    <workgroup>tsvwg</workgroup>
    <keyword>UDP</keyword>
    <keyword>UDP-Options</keyword>
    <keyword>PMTUD</keyword>
    <keyword>PLPMTUD</keyword>
    <keyword>DPLPMTUD</keyword>
    <keyword>Datagram</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">This document specifies how a UDP Options sender implements Datagram
      Packetization Layer Path MTU Discovery (DPLPMTUD)
      as a robust method for Path MTU Discovery (PMTUD). This
      method uses the UDP Options packetization layer. It allows an
      application to discover the largest size of datagram that can be sent
      across a network path. It also provides a way to allow the application
      to periodically verify the current Maximum Packet Size (MPS) supported by a
      path and to update this when required.</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by
            the Internet Engineering Steering Group (IESG).  Further
            information on Internet Standards is available in Section 2 of 
            RFC 7841.
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc9869" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2025 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Revised BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Revised BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-terminology">Terminology</xref></t>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-dplpmtud-for-udp-options">DPLPMTUD for UDP Options</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2">
              <li pn="section-toc.1-1.3.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.3.2.1.1"><xref derivedContent="3.1" format="counter" sectionFormat="of" target="section-3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-packet-formats">Packet Formats</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.2">
                <t indent="0" pn="section-toc.1-1.3.2.2.1"><xref derivedContent="3.2" format="counter" sectionFormat="of" target="section-3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-sending-probe-packets-with-">Sending Probe Packets with the Request Option</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.3">
                <t indent="0" pn="section-toc.1-1.3.2.3.1"><xref derivedContent="3.3" format="counter" sectionFormat="of" target="section-3.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-receiving-udp-options-probe">Receiving UDP Options Probe Packets and Sending the RES Option</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-dplpmtud-sender-procedures-">DPLPMTUD Sender Procedures for UDP Options</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2">
              <li pn="section-toc.1-1.4.2.1">
                <t indent="0" pn="section-toc.1-1.4.2.1.1"><xref derivedContent="4.1" format="counter" sectionFormat="of" target="section-4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-confirmation-of-connectivit">Confirmation of Connectivity Across a Path</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.2">
                <t indent="0" pn="section-toc.1-1.4.2.2.1"><xref derivedContent="4.2" format="counter" sectionFormat="of" target="section-4.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-sending-probe-packets-to-in">Sending Probe Packets to Increase the PLPMTU</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.3">
                <t indent="0" pn="section-toc.1-1.4.2.3.1"><xref derivedContent="4.3" format="counter" sectionFormat="of" target="section-4.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-validating-the-path-with-ud">Validating the Path with UDP Options</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.4">
                <t indent="0" pn="section-toc.1-1.4.2.4.1"><xref derivedContent="4.4" format="counter" sectionFormat="of" target="section-4.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-probe-packets-that-do-not-i">Probe Packets That Do Not Include Application Data</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.5">
                <t indent="0" pn="section-toc.1-1.4.2.5.1"><xref derivedContent="4.5" format="counter" sectionFormat="of" target="section-4.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-probe-packets-that-include-">Probe Packets That Include Application Data</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-receiving-events-from-the-n">Receiving Events from the Network</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2">
              <li pn="section-toc.1-1.5.2.1">
                <t indent="0" pn="section-toc.1-1.5.2.1.1"><xref derivedContent="5.1" format="counter" sectionFormat="of" target="section-5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-changes-in-the-path">Changes in the Path</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.2">
                <t indent="0" pn="section-toc.1-1.5.2.2.1"><xref derivedContent="5.2" format="counter" sectionFormat="of" target="section-5.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-validation-of-ptb-messages">Validation of PTB Messages</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-examples-with-different-rec">Examples with Different Receiver Behaviors</xref></t>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" format="counter" sectionFormat="of" target="section-8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="9" format="counter" sectionFormat="of" target="section-9"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.9.2">
              <li pn="section-toc.1-1.9.2.1">
                <t indent="0" pn="section-toc.1-1.9.2.1.1"><xref derivedContent="9.1" format="counter" sectionFormat="of" target="section-9.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.9.2.2">
                <t indent="0" pn="section-toc.1-1.9.2.2.1"><xref derivedContent="9.2" format="counter" sectionFormat="of" target="section-9.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.10">
            <t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgements</xref></t>
          </li>
          <li pn="section-toc.1-1.11">
            <t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">The User Datagram Protocol (UDP) <xref target="RFC0768" format="default" sectionFormat="of" derivedContent="RFC0768"/> offers a
            minimal transport service on top of IP and is frequently used as a
            substrate for other protocols. Section <xref target="RFC8085" sectionFormat="bare" section="3.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8085#section-3.2" derivedContent="RFC8085"/> of UDP Guidelines <xref target="RFC8085" format="default" sectionFormat="of" derivedContent="RFC8085"/> recommends that applications implement some
            form of Path MTU Discovery (PMTUD) to avoid the generation of IP fragments:</t>
      <blockquote pn="section-1-2">Consequently, an application <bcp14>SHOULD</bcp14> either use the path MTU
            information provided by the IP layer or implement Path MTU Discovery
            (PMTUD) itself [RFC1191] [RFC1981] [RFC4821] to determine whether the
   path to a destination will support its desired message size without
   fragmentation.</blockquote>
      <t indent="0" pn="section-1-3">The UDP API <xref target="RFC8304" format="default" sectionFormat="of" derivedContent="RFC8304"/> offers calls for
            applications to receive ICMP Packet Too Big (PTB) messages and to
            control the maximum size of datagrams that are sent, but it does not offer
            any automated mechanisms for an application to discover the MPS
            supported by a path. Upper Layer protocols, which
            include applications, can
            implement mechanisms for PMTUD above the UDP API.</t>
      <t indent="0" pn="section-1-4">Packetization Layer Path MTU Discovery (PLPMTUD) <xref target="RFC4821" format="default" sectionFormat="of" derivedContent="RFC4821"/>
            describes a method for a bidirectional Packetization Layer (PL)
            to search for the largest Packetization Layer PMTU (PLPMTU) supported on
            a path. DPLPMTUD <xref target="RFC8899" format="default" sectionFormat="of" derivedContent="RFC8899"/>
            specifies this support for datagram transports. PLPMTUD and DPLPMTUD
            gain robustness by using a probing mechanism that does not solely rely on
            ICMP PTB messages and works on paths that drop ICMP PTB messages.</t>
      <t indent="0" pn="section-1-5">UDP Options <xref target="RFC9868" format="default" sectionFormat="of" derivedContent="RFC9868"/> supplies
            functionality that can be used to implement DPLPMTUD within the
            transport service or in an Upper Layer protocol (including an application)
            that uses UDP Options. 
            This document specifies how DPLPMTUD using UDP Options
            is implemented (<xref target="RFC8899" sectionFormat="of" section="6.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8899#section-6.1" derivedContent="RFC8899"/>)
            and requires support to be enabled at both the sender and receiver.
      </t>
      <t indent="0" pn="section-1-6">Implementing DPLPMTUD within the
            transport service above UDP Options avoids the need for
            each Upper Layer protocol to implement the DPLPMTUD
            method. It provides a standard method for applications to discover the
            current MPS for a path and to detect when this
            changes. It can be used with Equal-Cost Multipath (ECMP) routing
           and/or multihoming. If multipath or multihoming is supported,
           a state machine is needed for each path.</t>
      <t indent="0" pn="section-1-7">DPLPMTUD is not specified for multicast. The method requires
           explicit acknowledgement of probe packets provided by UDP Options,
           which is primarily intended for unicast use (see 
           <xref target="RFC9868" sectionFormat="of" section="23" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9868#section-23" derivedContent="RFC9868"/>).</t>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-terminology">Terminology</name>
      <t indent="0" pn="section-2-1">
    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" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> 
    when, and only when, they appear in all capitals, as shown here.
      </t>
      <t indent="0" pn="section-2-2">This document uses the terms defined for DPLPMTUD (Sections <xref target="RFC8899" sectionFormat="bare" section="2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8899#section-2" derivedContent="RFC8899"/> and <xref target="RFC8899" sectionFormat="bare" section="5" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8899#section-5" derivedContent="RFC8899"/> of <xref target="RFC8899" format="default" sectionFormat="of" derivedContent="RFC8899"/>).
      </t>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-dplpmtud-for-udp-options">DPLPMTUD for UDP Options</name>
      <t indent="0" pn="section-3-1">A UDP Options sender implementing DPLPMTUD uses the method specified
            in <xref target="RFC8899" format="default" sectionFormat="of" derivedContent="RFC8899"/>. In this specification, DPLPMTUD is
            realized using a pair of
            UDP Options:
            the Request (REQ) Option and the Response (RES) Option
            (<xref target="RFC9868" sectionFormat="of" section="11.7" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9868#section-11.7" derivedContent="RFC9868"/>).
            The method also uses the End of Options List (EOL) Option
            (<xref target="RFC9868" sectionFormat="of" section="11.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9868#section-11.1" derivedContent="RFC9868"/>) to
            introduce padding to set the size of a probe packet.</t>
      <t indent="0" pn="section-3-2">Use of DPLPMTUD <bcp14>MUST</bcp14> be explicitly enabled by the application, for instance,
            once an application has established connectivity and is ready
            to exchange data with the remote Upper Layer protocol.
            Similarly, a DPLPMTUD receiver <bcp14>MUST NOT</bcp14> respond to a UDP REQ
            Option until DPLPMTUD has been enabled. This is to help
            protect from misuse of the mechanism for other forms of probing.</t>
      <t indent="0" pn="section-3-3">Probe packets consume network capacity and incur endpoint
            processing (<xref target="RFC8899" sectionFormat="of" section="4.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8899#section-4.1" derivedContent="RFC8899"/>).
            Implementations ought to send a probe packet with a UDP REQ
            Option only when required by their local DPLPMTUD state machine,
            i.e., when confirming the base PMTU for the path,
            probing to increase the PLPMTU, or confirming the current
            PLPMTU.</t>
      <t indent="0" pn="section-3-4">DPLPMTUD can be implemented
            over UDP Options in two ways:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3-5">
        <li pn="section-3-5.1">
          <t indent="0" pn="section-3-5.1.1">Implementation within the UDP transport service.</t>
        </li>
        <li pn="section-3-5.2">
          <t indent="0" pn="section-3-5.2.1">Implementation in an Upper Layer protocol (or application) that uses UDP Options.</t>
        </li>
      </ul>
      <t indent="0" pn="section-3-6">When DPLPMTUD is implemented within the UDP
            transport service, the DPLPMTUD state machine
            is responsible for sending probe packets to determine a PLPMTU, as described
            in this document. This determines an MPS,
            the largest size of application data block that can be sent across a network path
            using a single datagram. The Upper Layer protocol is responsible for deciding
            when a session enables DPLPMTUD.</t>
      <t indent="0" pn="section-3-7">The discovered PLPMTU can be used to either:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3-8">
        <li pn="section-3-8.1">
          <t indent="0" pn="section-3-8.1.1"> set the maximum datagram size for the current path or</t>
        </li>
        <li pn="section-3-8.2">
          <t indent="0" pn="section-3-8.2.1"> set the maximum fragment size when a sender uses the
                    UDP Fragmentation Option to divide a datagram into
                    multiple UDP fragments for transmission. The size of each UDP fragment
                    is then less than or equal to the size of the discovered largest IP packet that can
                    be received across the current path.
          </t>
        </li>
      </ul>
      <t indent="0" pn="section-3-9">The figure below shows an implementation of DPLPMTUD within the UDP
            transport service.
            It illustrates key interactions between the layers.
            This design requires an API primitive to allow the application to
            control whether the DPLPMTUD state machine is enabled for a specific
      UDP port. By default, this API <bcp14>MUST</bcp14> disable DPLPMTUD processing.</t>
      <artset pn="section-3-10">
        <artwork type="svg" align="left" pn="section-3-10.1">
	  <svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="352" width="560" viewBox="0 0 560 352" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
            <path d="M 8,16 L 8,64" fill="none" stroke="black"/>
            <path d="M 8,112 L 8,192" fill="none" stroke="black"/>
            <path d="M 8,256 L 8,288" fill="none" stroke="black"/>
            <path d="M 40,72 L 40,112" fill="none" stroke="black"/>
            <path d="M 40,200 L 40,256" fill="none" stroke="black"/>
            <path d="M 40,296 L 40,336" fill="none" stroke="black"/>
            <path d="M 232,64 L 232,104" fill="none" stroke="black"/>
            <path d="M 232,192 L 232,248" fill="none" stroke="black"/>
            <path d="M 232,288 L 232,336" fill="none" stroke="black"/>
            <path d="M 272,16 L 272,64" fill="none" stroke="black"/>
            <path d="M 272,112 L 272,192" fill="none" stroke="black"/>
            <path d="M 272,256 L 272,288" fill="none" stroke="black"/>
            <path d="M 8,16 L 272,16" fill="none" stroke="black"/>
            <path d="M 8,64 L 272,64" fill="none" stroke="black"/>
            <path d="M 8,112 L 272,112" fill="none" stroke="black"/>
            <path d="M 8,192 L 272,192" fill="none" stroke="black"/>
            <path d="M 8,256 L 272,256" fill="none" stroke="black"/>
            <path d="M 8,288 L 272,288" fill="none" stroke="black"/>
            <polygon class="arrowhead" points="240,336 228,330.4 228,341.6" fill="black" transform="rotate(90,232,336)"/>
            <polygon class="arrowhead" points="240,248 228,242.4 228,253.6" fill="black" transform="rotate(90,232,248)"/>
            <polygon class="arrowhead" points="240,104 228,98.4 228,109.6" fill="black" transform="rotate(90,232,104)"/>
            <polygon class="arrowhead" points="48,296 36,290.4 36,301.6" fill="black" transform="rotate(270,40,296)"/>
            <polygon class="arrowhead" points="48,200 36,194.4 36,205.6" fill="black" transform="rotate(270,40,200)"/>
            <polygon class="arrowhead" points="48,72 36,66.4 36,77.6" fill="black" transform="rotate(270,40,72)"/>
            <g class="text">
              <text x="140" y="36">Upper Layer Protocol</text>
              <text x="140" y="52">or Application</text>
              <text x="352" y="84">Messages (with UDP Options)</text>
              <text x="80" y="100">receive</text>
              <text x="196" y="100">send</text>
              <text x="376" y="100">Primitives for MPS, Min_PMTU, etc.</text>
              <text x="108" y="132">DPLPMTUD State Machine</text>
              <text x="136" y="148">Maximum Packet Size (MPS)</text>
              <text x="148" y="164">PLPMTU, Probed-Size, Min_PMTU</text>
              <text x="144" y="180">Token Values &amp; Probes, etc.</text>
              <text x="352" y="212">Messages (with UDP Options)</text>
              <text x="392" y="228">Send/Receive: Probes with Options</text>
              <text x="80" y="244">receive</text>
              <text x="196" y="244">send</text>
              <text x="392" y="244">Events: ICMP, Interface MTU, etc.</text>
              <text x="104" y="276">UDP Options Transport</text>
              <text x="356" y="308">Datagrams (with UDP Options)</text>
              <text x="408" y="324">Fragmented Datagrams with UDP Options</text>
              <text x="80" y="340">receive</text>
              <text x="196" y="340">send</text>
              <text x="392" y="340">Events: ICMP, Interface MTU, etc.</text>
            </g>
          </svg>
        </artwork>
        <artwork align="left" name="" type="ascii-art" alt="" pn="section-3-10.2">
+--------------------------------+
|      Upper Layer Protocol      |
|         or Application         |
+---------------------------+----+
    ^                       | Messages (with UDP Options)
    | receive         send  v Primitives for MPS, Min_PMTU, etc.
+---+----------------------------+
| DPLPMTUD State Machine         |
|   Maximum Packet Size (MPS)    |
|   PLPMTU, Probed-Size, Min_PMTU|
|   Token Values &amp; Probes, etc.  |
+---------------------------+----+
    ^                       | Messages (with UDP Options)
    |                       |   Send/Receive: Probes with Options
    | receive         send  v   Events: ICMP, Interface MTU, etc.
+---+----------------------------+
| UDP Options Transport          |
+---------------------------+----+
    ^                       | Datagrams (with UDP Options)
    |                       |   Fragmented Datagrams with UDP Options
    | receive         send  v   Events: ICMP, Interface MTU, etc.
</artwork>
      </artset>
      <aside pn="section-3-11">
        <t indent="0" pn="section-3-11.1">Note: UDP allows an Upper Layer protocol
            to send datagrams with or without payload data (with or without
            UDP Options). These
            are delivered across the network to the remote Upper Layer.
            When DPLPMTUD is implemented within the UDP
            transport service, probe packets that include a REQ or RES UDP Option
            can be sent with no UDP payload.
            In this case, these probe packets were not generated by a sending
            application; therefore, the corresponding received datagrams are
      not delivered to the remote application.</t>
      </aside>
      <t indent="0" pn="section-3-12">When DPLPMTUD is instead implemented by an Upper Layer protocol,
            the format and content
            of probe packets are determined by the Upper Layer protocol.
            This design is also permitted to use the REQ and RES Options
            provided by UDP Options.</t>
      <t indent="0" pn="section-3-13">If DPLPMTUD is active at more than one layer,
            then the values of the tokens used in REQ Options need to be coordinated
            with any values used for other DPLPMTUD probe packets to ensure
            that each probe packet can be identified by a unique token.
            When configurable, a configuration ought to avoid
            performing such discovery both within UDP Options
            and also by an Upper Layer protocol 
            that sends and receives probe packets via UDP Options.
            <xref target="RFC8899" sectionFormat="of" section="6.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8899#section-6.1" derivedContent="RFC8899"/> recommends that:
            "An application <bcp14>SHOULD</bcp14> avoid using DPLPMTUD when the underlying
            transport system provides this capability."</t>
      <section anchor="formats" numbered="true" toc="include" removeInRFC="false" pn="section-3.1">
        <name slugifiedName="name-packet-formats">Packet Formats</name>
        <t indent="0" pn="section-3.1-1">The UDP Options used in this document are described in
                <xref target="RFC9868" format="default" sectionFormat="of" derivedContent="RFC9868"/> and are used
                in the following ways:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3.1-2">
          <li pn="section-3.1-2.1">
            <t indent="0" pn="section-3.1-2.1.1">The REQ Option is set by a sending PL to solicit a response from a
                    remote receiver. A four-byte (four-octet) token identifies each request.</t>
          </li>
          <li pn="section-3.1-2.2">
            <t indent="0" pn="section-3.1-2.2.1">A sending PL can use the EOL Option together with a minimum
                    datagram length to pad probe packets.</t>
          </li>
          <li pn="section-3.1-2.3">
            <t indent="0" pn="section-3.1-2.3.1">The RES Option is sent by a UDP Options receiver in response to a
                    previously received REQ Option. Each RES Option echoes the last received
                    four-byte token.</t>
          </li>
          <li pn="section-3.1-2.4">
            <t indent="0" pn="section-3.1-2.4.1"> If a UDP Options  endpoint creates and sends a datagram
                    with a RES Option solely as response to a received REQ Option,
                    the responder <bcp14>MUST</bcp14> limit the rate of these responses
                    (e.g., limiting each pair of ports to send 1 per measured RTT or
                    1 per second). This rate limit is to mitigate the DoS vector
                    without significantly impacting the operation of DPLPMTUD.
                    An example in <xref target="examples" format="default" sectionFormat="of" derivedContent="Section 6"/>
                    describes a case where this might be used.</t>
          </li>
          <li pn="section-3.1-2.5">
            <t indent="0" pn="section-3.1-2.5.1">
                    Reception of a RES Option by the REQ sender confirms that a specific
                    probe packet has been received by the remote UDP Options receiver.</t>
          </li>
        </ul>
        <t indent="0" pn="section-3.1-3">The token allows a UDP Options sender to distinguish
            between acknowledgements for initial probe packets and
            acknowledgements confirming receipt of subsequent probe packets
            (e.g., travelling along alternate paths with a larger RTT).
            Each probe packet <bcp14>MUST</bcp14> be uniquely
            identifiable by the UDP Options sender within the Maximum Segment
            Lifetime (MSL) <xref target="RFC8085" format="default" sectionFormat="of" derivedContent="RFC8085"/>.
            The UDP Options sender <bcp14>MUST NOT</bcp14> reuse
            a token value within the MSL. A
            four-byte value for the token field provides sufficient space for
            multiple unique probe packets to be made within the MSL. Since UDP Options
            operates over UDP, the token values only need to be unique for
            the specific 5-tuple over which it is operating.
        </t>
        <t indent="0" pn="section-3.1-4">The value of the four-byte token field <bcp14>SHOULD</bcp14> be initialized
            to a randomized value to enhance protection from off-path attacks,
            as described in <xref target="RFC8085" sectionFormat="of" section="5.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8085#section-5.1" derivedContent="RFC8085"/>.</t>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-3.2">
        <name slugifiedName="name-sending-probe-packets-with-">Sending Probe Packets with the Request Option</name>
        <t indent="0" pn="section-3.2-1">DPLPMTUD relies upon sending a probe packet
            with a specific size.
            Each probe packet includes the UDP Options area containing
            a REQ Option
            and any other required options concluded with an EOL Option
            (<xref target="RFC9868" sectionFormat="of" section="11.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9868#section-11.1" derivedContent="RFC9868"/>),
            followed by any padding needed to inflate to the required probe size.</t>
        <t indent="0" pn="section-3.2-2">A probe packet can therefore be up to the maximum size
            supported by the local interface (i.e., the Interface MTU).
            Item 2 in <xref section="3" target="RFC8899" format="default" sectionFormat="of" derivedLink="https://rfc-editor.org/rfc/rfc8899#section-3" derivedContent="RFC8899"/> requires the network interface
            below DPLPMTUD to provide a way to transmit a probe packet
            that is larger than the current PLPMTU.
            The size of this probe packet <bcp14>MUST NOT</bcp14> be constrained by the maximum PMTU
            set by network layer mechanisms (such as discovered by PMTUD
            <xref target="RFC1191" format="default" sectionFormat="of" derivedContent="RFC1191"/><xref target="RFC8201" format="default" sectionFormat="of" derivedContent="RFC8201"/> or the PMTU size
            held in the IP-layer cache),
            as noted in item 2 in <xref target="RFC8899" sectionFormat="of" section="3" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8899#section-3" derivedContent="RFC8899"/>).</t>
        <t indent="0" pn="section-3.2-3">UDP datagrams used as DPLPMTUD probe packets, as described in this
            document, <bcp14>MUST NOT</bcp14> be fragmented at the UDP or IP layer.
            Therefore, <xref target="RFC8899" sectionFormat="of" section="3" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8899#section-3" derivedContent="RFC8899"/>
            requires: "In IPv4, a probe packet <bcp14>MUST</bcp14> be sent with the
            Don't Fragment (DF) bit set in the IP header and without network layer
            endpoint fragmentation."</t>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-3.3">
        <name slugifiedName="name-receiving-udp-options-probe">Receiving UDP Options Probe Packets and Sending the RES Option</name>
        <t indent="0" pn="section-3.3-1">When DPLPMTUD is enabled, a UDP Options receiver responds
            by sending a UDP datagram with the RES Option when
            it receives a UDP Options datagram with
            the REQ Option.</t>
        <t indent="0" pn="section-3.3-2">The operation of DPLPMTUD can depend on the support at
            the remote UDP Options endpoint, the way in which DPLPMTUD
            is implemented, and in some cases, the application data that is
            exchanged over the UDP transport service.
            When UDP Options is not supported by the remote receiver,
            DPLPMTUD will be unable to confirm the path or to discover the PLPMTU.
            This will result in the minimum configured PLPMTU (MIN_PLPMTU).
            More explanation of usage is provided in <xref target="examples" format="default" sectionFormat="of" derivedContent="Section 6"/>.
        </t>
        <aside pn="section-3.3-3">
          <t indent="0" pn="section-3.3-3.1">Note: A receiver that only responds when there is a datagram
            queued for transmission by the Upper Layer could potentially
            receive multiple datagrams with a REQ Option before it can
            respond. When sent, the RES Option will only acknowledge the
            latest received token value. A sender would then conclude
            that any earlier REQ Options were not successfully received.
            However, DPLPMTUD does not usually result in sending more than one
            probe packet per timeout interval, and a delay in responding
            will already have been treated as a failed probe attempt.
            Therefore, this does not significantly impact performance,
            although a more prompt response would have resulted in
        DPLPMTUD recording reception of all probe packets.</t>
        </aside>
      </section>
    </section>
    <section anchor="UDPOPT-PLPMTUD" numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-dplpmtud-sender-procedures-">DPLPMTUD Sender Procedures for UDP Options</name>
      <t indent="0" pn="section-4-1"> DPLPMTUD utilizes three types of probe. These are described in the following sections:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4-2">
        <li pn="section-4-2.1">
          <t indent="0" pn="section-4-2.1.1">Probes to confirm the path can support the BASE_PLPMTU (<xref target="RFC8899" sectionFormat="of" section="5.1.4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8899#section-5.1.4" derivedContent="RFC8899"/>).</t>
        </li>
        <li pn="section-4-2.2">
          <t indent="0" pn="section-4-2.2.1">Probes to detect whether the path can support a larger PLPMTU.</t>
        </li>
        <li pn="section-4-2.3">
          <t indent="0" pn="section-4-2.3.1">Probes to validate that the path supports the current PLPMTU.</t>
        </li>
      </ul>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-4.1">
        <name slugifiedName="name-confirmation-of-connectivit">Confirmation of Connectivity Across a Path</name>
        <t indent="0" pn="section-4.1-1">The DPLPMTUD method requires a PL to confirm connectivity over the
        path (<xref target="RFC8899" sectionFormat="of" section="5.1.4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8899#section-5.1.4" derivedContent="RFC8899"/>),
        but UDP itself does not offer a mechanism for this.</t>
        <t indent="0" pn="section-4.1-2">UDP Options can provide this required functionality. A UDP Options
                    sender implementing this specification <bcp14>MUST</bcp14> elicit a positive
                    confirmation of connectivity for the path by sending a probe packet
                    padded to size BASE_PLPMTU. This confirmation probe <bcp14>MUST</bcp14>
                    include the REQ UDP Option to elicit a response from the remote DPLPMTUD.
                    Reception of a datagram with the corresponding RES Option confirms
                    the reception of a packet of the probed size that has successfully
                    traversed the path to the receiver.
                    This also confirms that the
                    remote endpoint supports the RES Option.</t>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-4.2">
        <name slugifiedName="name-sending-probe-packets-to-in">Sending Probe Packets to Increase the PLPMTU</name>
        <t indent="0" pn="section-4.2-1">From time to time, DPLPMTUD enters the SEARCHING state, described
        in <xref target="RFC8899" sectionFormat="of" section="5.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8899#section-5.2" derivedContent="RFC8899"/>, (e.g.,
        after expiry of the PMTU_RAISE_TIMER) to detect whether the current
        path can support a larger PLPMTU.  When the remote endpoint advertises
        a UDP Maximum Datagram Size (MDS) Option (see <xref target="RFC9868" sectionFormat="of" section="11.5" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9868#section-11.5" derivedContent="RFC9868"/>), this value <bcp14>MAY</bcp14> be used as a hint to
        initialize this search to increase the PLPMTU.</t>
        <t indent="0" pn="section-4.2-2"> Probe packets seeking to increase the PLPMTU <bcp14>SHOULD NOT</bcp14> carry application data (see "Probing using padding data" in
        <xref target="RFC8899" sectionFormat="of" section="4.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8899#section-4.1" derivedContent="RFC8899"/>), since they
        will be lost whenever their size exceeds the actual PMTU.  <xref target="RFC8899" format="default" sectionFormat="of" derivedContent="RFC8899"/> requires a probe packet to elicit
        a positive acknowledgement that the path has delivered a datagram of
        the specific probed size; therefore, a probe packet
        <bcp14>MUST</bcp14> include the REQ Option when using transport
	options for UDP <xref target="RFC9868" format="default" sectionFormat="of" derivedContent="RFC9868"/>.</t>
        <t indent="0" pn="section-4.2-3">At the receiver, a received probe packet that does not carry
        application data does not form a part of the end-to-end transport data
        and is not delivered to the Upper Layer protocol (i.e., application or
        protocol layered above UDP). A zero-length payload notification could
        still be delivered to the application (see <xref target="RFC8085" sectionFormat="of" section="5" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8085#section-5" derivedContent="RFC8085"/>), although
        <xref target="RFC9868" sectionFormat="of" section="18" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9868#section-18" derivedContent="RFC9868"/>
                discusses the implications when using UDP Options.</t>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-4.3">
        <name slugifiedName="name-validating-the-path-with-ud">Validating the Path with UDP Options</name>
        <t indent="0" pn="section-4.3-1">A PL using DPLPMTUD <bcp14>MUST</bcp14> validate that a path
        continues to support the PLPMTU discovered in a previous search for a
        suitable PLPMTU value, as defined in <xref target="RFC8899" sectionFormat="of" section="6.1.4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8899#section-6.1.4" derivedContent="RFC8899"/>.  This validation sends probe
        packets in the DPLPMTUD SEARCH_COMPLETE state (<xref target="RFC8899" sectionFormat="of" section="5.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8899#section-5.2" derivedContent="RFC8899"/>) to detect black-holing
        of data 
        (<xref target="RFC8899" sectionFormat="of" section="4.3" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8899#section-4.3" derivedContent="RFC8899"/> defines a
        DPLPMTUD black hole).</t>
        <t indent="0" pn="section-4.3-2">Path validation can be implemented within UDP Options by generating
        a probe packet of size PLPMTU, which <bcp14>MUST</bcp14> include a REQ
        Option to elicit a positive confirmation that the path has delivered
        this probe packet.  A probe packet used to validate the path
        <bcp14>MAY</bcp14> use either "Probing using padding data" to
        construct a probe packet that does not carry any application data or
        "Probing using application data and padding data"; see <xref target="RFC8899" sectionFormat="of" section="4.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8899#section-4.1" derivedContent="RFC8899"/>.  When using
        "Probing using padding data", the UDP Options API does not indicate
        receipt of the zero-length probe packet (see <xref target="RFC9868" sectionFormat="of" section="6" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9868#section-6" derivedContent="RFC9868"/>).
        </t>
      </section>
      <section anchor="no-app-data" numbered="true" toc="include" removeInRFC="false" pn="section-4.4">
        <name slugifiedName="name-probe-packets-that-do-not-i">Probe Packets That Do Not Include Application Data</name>
        <t indent="0" pn="section-4.4-1"> A simple implementation of the method might be designed to only
        use probe packets in a UDP datagram that includes no application
        data. The size of each probe packet is padded to the required probe
        size including the REQ Option. This implements "Probing using padding
        data" (<xref target="RFC8899" sectionFormat="of" section="4.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8899#section-4.1" derivedContent="RFC8899"/>) and
        avoids having to retransmit application data when a probe fails.  This
        could be achieved by setting a minimum datagram length, such that the
        options list ends in EOL (<xref target="RFC9868" sectionFormat="of" section="11.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9868#section-11.1" derivedContent="RFC9868"/>) with any additional space
        zero-filled as needed (see <xref target="RFC9868" sectionFormat="of" section="15" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9868#section-15" derivedContent="RFC9868"/>).  In this use, the probe packets do
        not form a part of the end-to-end transport data and a receiver does
        not deliver them to the Upper Layer protocol.
        </t>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-4.5">
        <name slugifiedName="name-probe-packets-that-include-">Probe Packets That Include Application Data</name>
        <t indent="0" pn="section-4.5-1">
                An implementation always uses the format in <xref target="no-app-data" format="default" sectionFormat="of" derivedContent="Section 4.4"/>
                when DPLPMTUD searches to increase the PLPMTU.</t>
        <t indent="0" pn="section-4.5-2">
                An alternative format is permitted for a probe packet that is used to confirm
                the connectivity or to validate the path.
                These probe packets <bcp14>MAY</bcp14> carry application data.
                (UDP payload data is permitted because these probe packets perform
                black-hole detection
                and will therefore usually have a higher probability of successful
                transmission, similar to other packets sent by the Upper Layer protocol.)
                <xref target="RFC8899" sectionFormat="of" section="4.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8899#section-4.1" derivedContent="RFC8899"/> provides a discussion of
                the merits and demerits of including application data. For example, this
                reduces the need to send additional datagrams.
        </t>
        <t indent="0" pn="section-4.5-3">This type of probe packet <bcp14>MAY</bcp14> use
                a control message format defined by the Upper Layer protocol,
                provided that the message does not need to
                be delivered reliably. The REQ Option <bcp14>MUST</bcp14> be
                included when the sending Upper Layer protocol performs DPLPMTUD.
                The DPLPMTUD method tracks the transmission
                of probe packets (using the REQ Option token).</t>
        <t indent="0" pn="section-4.5-4">A receiver that responds to DPLPMTUD <bcp14>MUST</bcp14> process the REQ Option and
                include the corresponding RES Option with an Upper Layer protocol message
                that it returns to the requester (examples of receiver processing are
                provided in <xref target="examples" format="default" sectionFormat="of" derivedContent="Section 6"/>).</t>
        <t indent="0" pn="section-4.5-5">Probe packets that use this format form a part of the end-to-end
                transport data and can be used to manage the PLPMTU in just
                one direction or can be used for both directions.</t>
      </section>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-receiving-events-from-the-n">Receiving Events from the Network</name>
      <t indent="0" pn="section-5-1">This specification does not rely upon reception of events from the network,
        but an implementation can utilize these events when they are provided.</t>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-5.1">
        <name slugifiedName="name-changes-in-the-path">Changes in the Path</name>
        <t indent="0" pn="section-5.1-1">A change in the path or the loss of a probe packet can result in
        DPLPMTUD updating the PLPMTU. DPLPMTUD <xref target="RFC8899" format="default" sectionFormat="of" derivedContent="RFC8899"/> recommends that methods are robust to path changes
        that could have occurred since the path characteristics were last
        confirmed and to the possibility of inconsistent path information
        being received. For example, a notification that a path has changed
        could trigger path validation to provide black-hole protection (<xref target="RFC8899" sectionFormat="of" section="4.3" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8899#section-4.3" derivedContent="RFC8899"/>).</t>
        <t indent="0" pn="section-5.1-2">An Upper Layer protocol could trigger DPLPMTUD to validate the path
        when it observes a high packet loss rate (or a repeated protocol
        timeout) <xref target="RFC8899" format="default" sectionFormat="of" derivedContent="RFC8899"/>.</t>
        <t indent="0" pn="section-5.1-3"><xref target="RFC8899" sectionFormat="of" section="3" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8899#section-3" derivedContent="RFC8899"/> requires
        any methods designed to share the PLPMTU between PLs (such as updating
        the IP cache PMTU for an interface/destination) to be robust to the
        wide variety of underlying network forwarding behaviors. For example,
        an implementation could avoid sharing PMTU information that could
        potentially relate to packets sent with the same address over a
        different interface.</t>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-5.2">
        <name slugifiedName="name-validation-of-ptb-messages">Validation of PTB Messages</name>
        <t indent="0" pn="section-5.2-1"> Support for receiving ICMP PTB messages is
            <bcp14>OPTIONAL</bcp14> for DPLPMTUD. A UDP Options sender
            can therefore ignore received ICMP PTB messages.</t>
        <t indent="0" pn="section-5.2-2">Before processing an ICMP PTB message, the
            DPLPMTUD method needs to perform two checks to ensure
            that the message was received
            in response to a sent probe packet:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5.2-3">
          <li pn="section-5.2-3.1">
            <t indent="0" pn="section-5.2-3.1.1">DPLPMTUD first utilizes the quoted information in each PTB
            message.  The receiver <bcp14>MUST</bcp14> validate the protocol
            information in the quoted packet carried in an ICMP PTB message
            payload to validate the message originated from the sending node
            (see <xref target="RFC8899" sectionFormat="of" section="4.6.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8899#section-4.6.1" derivedContent="RFC8899"/>).</t>
          </li>
          <li pn="section-5.2-3.2">
            <t indent="0" pn="section-5.2-3.2.1">The receiver <bcp14>SHOULD</bcp14> utilize information that is
            not simple for an off-path attacker to determine (see
            <xref target="RFC8899" sectionFormat="of" section="4.6.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8899#section-4.6.1" derivedContent="RFC8899"/>).
            Specifically, a UDP Options receiver <bcp14>SHOULD</bcp14> confirm
            that the token contained in the UDP REQ Option of the quoted
            packet has a value that corresponds to a probe packet that was
            recently sent by the current endpoint.</t>
          </li>
        </ul>
        <t indent="0" pn="section-5.2-4">An
            implementation unable to support this validation <bcp14>MUST</bcp14> ignore
            received ICMP PTB messages.</t>
      </section>
    </section>
    <section anchor="examples" numbered="true" toc="include" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-examples-with-different-rec">Examples with Different Receiver Behaviors</name>
      <t indent="0" pn="section-6-1"> When enabled, a DPLPMTUD endpoint that implements UDP Options
        normally responds with a
        UDP datagram with a RES Option when requested by a sender.</t>
      <t indent="0" pn="section-6-2">The following examples describe various possible receiver behaviors:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-6-3">
        <li pn="section-6-3.1">
          <t indent="0" pn="section-6-3.1.1">No DPLPMTUD receiver support:
            One case is when a sender supports this specification,
            but no RES Option is received from the remote endpoint.
            In this example, the method
            is unable to discover the PLPMTU. This will result in using the
            MIN_PLPMTU.
            Such a remote endpoint might be not configured to process UDP Options or
            might not return a datagram with a RES Option for some other reason
            (e.g., packet loss, insufficient space
            to include the option, filtering on the path, etc.).</t>
        </li>
        <li pn="section-6-3.2">
          <t indent="0" pn="section-6-3.2.1">DPLPMTUD receiver uses application datagrams:
            In a second case, both the sender and receiver
            support DPLPMTUD using the specification,
            and the receiver only returns a RES Option with the next UDP datagram
            that is sent to the requester.
            Therefore, reception of a REQ Option does not systematically trigger a response.
            This allows DPLPMTUD to operate when there is a flow of datagrams in both directions,
            provided there is periodic feedback (e.g., one acknowledgement packet per RTT).
            It requires the PLPMTU at the receiver
            to be sufficiently large enough that the RES Option can be included in the feedback packets
            that are sent in the return direction.
            This method avoids opportunities to misuse the method as a DoS attack.
            However, when there is a low
            rate of transmission (or no datagrams are sent) in the return direction,
            this will prevent prompt delivery of the RES Option.
            At the DPLPMTUD sender, this results in probe packets failing to be
            acknowledged in time
            and could result in a smaller PLPMTU than is actually supported by
            the path or in using the MIN_PLPMTU.</t>
        </li>
        <li pn="section-6-3.3">
          <t indent="0" pn="section-6-3.3.1">Unidirectional transfer: Another case is where an application only transfers data
            in one direction (or predominantly in one direction).
            In this case, the wait at the receiver for a datagram to be queued before
            returning a RES Option could easily result in a probe timeout
            at the DPLPMTUD sender.
            In this case, DPLPMTUD could allow exchanging datagrams without
            a payload (as discussed in earlier sections) to return the RES Option.</t>
        </li>
        <li pn="section-6-3.4">
          <t indent="0" pn="section-6-3.4.1">DPLPMTUD receiver permitted to send responses in UDP datagrams with no payload:
            A DPLPMTUD receiver can generate a datagram (e.g., with zero payload data)
            solely to return a RES Option
            (e.g., sent when no other datagrams are queued for transmission).
            This would allow an endpoint to probe the set of UDP ports that have
            been configured with support for this specification
            using a DPLPMTUD probe packet.
            Although this results in some additional traffic overhead,
            it has the advantage that it
            can ensure timely progress of DPLPMTUD.
            <xref target="formats" format="default" sectionFormat="of" derivedContent="Section 3.1"/> specifies: "If a UDP Options endpoint creates and
            sends a datagram with a RES Option solely as response to a received REQ Option,
            the responder <bcp14>MUST</bcp14> limit the rate of these responses
            (e.g., limiting each pair of ports to send 1 per measured RTT or 1 per second)".
            This rate limit is to mitigate the DoS vector, without significantly impacting
            the operation of DPLPMTUD.</t>
        </li>
      </ul>
    </section>
    <section anchor="IANA" numbered="true" toc="include" removeInRFC="false" pn="section-7">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-7-1">This document has no IANA actions.</t>
    </section>
    <section anchor="Security" numbered="true" toc="include" removeInRFC="false" pn="section-8">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-8-1">The security considerations for using UDP Options are described in
            <xref target="RFC9868" format="default" sectionFormat="of" derivedContent="RFC9868"/>. The
            method does not change the integrity protection offered by the UDP
            Options method.</t>
      <t indent="0" pn="section-8-2">The security considerations for using DPLPMTUD are described in <xref target="RFC8899" format="default" sectionFormat="of" derivedContent="RFC8899"/>. On-path attackers could maliciously drop
            or modify probe packets to seek to decrease the PMTU or
            to maliciously modify probe packets in an attempt to black-hole traffic.</t>
      <t indent="0" pn="section-8-3">The specification recommends that the token value in the REQ Option is
            initialized to a randomized value. This is to enhance protection from off-path
            attacks.
            If a subsequent probe packet uses a token value that is easily derived
            from the initial value
            (e.g., incrementing the value), a misbehaving on-path observer could then
            determine the token values used for subsequent probe packets from
            that sender, even if these probe packets are not transiting via the observer.
            This would allow probe packets to be forged, with an impact similar to other on-path
            attacks against probe packets.
            This attack could be mitigated by using an unpredictable
            token value for each probe packet.</t>
      <t indent="0" pn="section-8-4">The method does not change the
            ICMP PTB message validation method described by DPLPMTUD: A UDP Options
            sender that utilizes ICMP PTB messages received to a probe packet <bcp14>MUST</bcp14>
            use the quoted packet to validate the UDP port information in
            combination with the token contained in the UDP
            Option before processing the packet using the DPLPMTUD method.</t>
      <t indent="0" pn="section-8-5">Upper Layer protocols or applications that employ encryption
            ought to perform DPLPMTUD
            at a layer above UDP Options and not enable UDP Options support for DPLPMTUD.
            This allows the application to control when DPLPMTUD is used to control the additional
            traffic that this generates.
            This also ensures that DPLPMTUD probe packets are encrypted.</t>
    </section>
  </middle>
  <back>
    <references pn="section-9">
      <name slugifiedName="name-references">References</name>
      <references pn="section-9.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="RFC0768" target="https://www.rfc-editor.org/info/rfc768" quoteTitle="true" derivedAnchor="RFC0768">
          <front>
            <title>User Datagram Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel"/>
            <date month="August" year="1980"/>
          </front>
          <seriesInfo name="STD" value="6"/>
          <seriesInfo name="RFC" value="768"/>
          <seriesInfo name="DOI" value="10.17487/RFC0768"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="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 indent="0">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" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="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 indent="0">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="RFC8899" target="https://www.rfc-editor.org/info/rfc8899" quoteTitle="true" derivedAnchor="RFC8899">
          <front>
            <title>Packetization Layer Path MTU Discovery for Datagram Transports</title>
            <author fullname="G. Fairhurst" initials="G." surname="Fairhurst"/>
            <author fullname="T. Jones" initials="T." surname="Jones"/>
            <author fullname="M. Tüxen" initials="M." surname="Tüxen"/>
            <author fullname="I. Rüngeler" initials="I." surname="Rüngeler"/>
            <author fullname="T. Völker" initials="T." surname="Völker"/>
            <date month="September" year="2020"/>
            <abstract>
              <t indent="0">This document specifies Datagram Packetization Layer Path MTU Discovery (DPLPMTUD). This is a robust method for Path MTU Discovery (PMTUD) for datagram Packetization Layers (PLs). It allows a PL, or a datagram application that uses a PL, to discover whether a network path can support the current size of datagram. This can be used to detect and reduce the message size when a sender encounters a packet black hole. It can also probe a network path to discover whether the maximum packet size can be increased. This provides functionality for datagram transports that is equivalent to the PLPMTUD specification for TCP, specified in RFC 4821, which it updates. It also updates the UDP Usage Guidelines to refer to this method for use with UDP datagrams and updates SCTP.</t>
              <t indent="0">The document provides implementation notes for incorporating Datagram PMTUD into IETF datagram transports or applications that use datagram transports.</t>
              <t indent="0">This specification updates RFC 4960, RFC 4821, RFC 6951, RFC 8085, and RFC 8261.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8899"/>
          <seriesInfo name="DOI" value="10.17487/RFC8899"/>
        </reference>
        <reference anchor="RFC9868" target="https://www.rfc-editor.org/info/rfc9868" quoteTitle="true" derivedAnchor="RFC9868">
          <front>
            <title>Transport Options for UDP</title>
            <author initials="J." surname="Touch" fullname="Dr. Joseph D. Touch">
              <organization showOnFrontPage="true">Independent Consultant</organization>
            </author>
            <author initials="C." surname="Heard" fullname="C. M. Heard" role="editor">
              <organization showOnFrontPage="true">Unaffiliated</organization>
            </author>
            <date month="October" year="2025"/>
          </front>
          <seriesInfo name="RFC" value="9868"/>
          <seriesInfo name="DOI" value="10.17487/RFC9868"/>
        </reference>
      </references>
      <references pn="section-9.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="RFC1191" target="https://www.rfc-editor.org/info/rfc1191" quoteTitle="true" derivedAnchor="RFC1191">
          <front>
            <title>Path MTU discovery</title>
            <author fullname="J. Mogul" initials="J." surname="Mogul"/>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <date month="November" year="1990"/>
            <abstract>
              <t indent="0">This memo describes a technique for dynamically discovering the maximum transmission unit (MTU) of an arbitrary internet path. It specifies a small change to the way routers generate one type of ICMP message. For a path that passes through a router that has not been so changed, this technique might not discover the correct Path MTU, but it will always choose a Path MTU as accurate as, and in many cases more accurate than, the Path MTU that would be chosen by current practice. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1191"/>
          <seriesInfo name="DOI" value="10.17487/RFC1191"/>
        </reference>
        <reference anchor="RFC4821" target="https://www.rfc-editor.org/info/rfc4821" quoteTitle="true" derivedAnchor="RFC4821">
          <front>
            <title>Packetization Layer Path MTU Discovery</title>
            <author fullname="M. Mathis" initials="M." surname="Mathis"/>
            <author fullname="J. Heffner" initials="J." surname="Heffner"/>
            <date month="March" year="2007"/>
            <abstract>
              <t indent="0">This document describes a robust method for Path MTU Discovery (PMTUD) that relies on TCP or some other Packetization Layer to probe an Internet path with progressively larger packets. This method is described as an extension to RFC 1191 and RFC 1981, which specify ICMP-based Path MTU Discovery for IP versions 4 and 6, respectively. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4821"/>
          <seriesInfo name="DOI" value="10.17487/RFC4821"/>
        </reference>
        <reference anchor="RFC8085" target="https://www.rfc-editor.org/info/rfc8085" quoteTitle="true" derivedAnchor="RFC8085">
          <front>
            <title>UDP Usage Guidelines</title>
            <author fullname="L. Eggert" initials="L." surname="Eggert"/>
            <author fullname="G. Fairhurst" initials="G." surname="Fairhurst"/>
            <author fullname="G. Shepherd" initials="G." surname="Shepherd"/>
            <date month="March" year="2017"/>
            <abstract>
              <t indent="0">The User Datagram Protocol (UDP) provides a minimal message-passing transport that has no inherent congestion control mechanisms. This document provides guidelines on the use of UDP for the designers of applications, tunnels, and other protocols that use UDP. Congestion control guidelines are a primary focus, but the document also provides guidance on other topics, including message sizes, reliability, checksums, middlebox traversal, the use of Explicit Congestion Notification (ECN), Differentiated Services Code Points (DSCPs), and ports.</t>
              <t indent="0">Because congestion control is critical to the stable operation of the Internet, applications and other protocols that choose to use UDP as an Internet transport must employ mechanisms to prevent congestion collapse and to establish some degree of fairness with concurrent traffic. They may also need to implement additional mechanisms, depending on how they use UDP.</t>
              <t indent="0">Some guidance is also applicable to the design of other protocols (e.g., protocols layered directly on IP or via IP-based tunnels), especially when these protocols do not themselves provide congestion control.</t>
              <t indent="0">This document obsoletes RFC 5405 and adds guidelines for multicast UDP usage.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="145"/>
          <seriesInfo name="RFC" value="8085"/>
          <seriesInfo name="DOI" value="10.17487/RFC8085"/>
        </reference>
        <reference anchor="RFC8201" target="https://www.rfc-editor.org/info/rfc8201" quoteTitle="true" derivedAnchor="RFC8201">
          <front>
            <title>Path MTU Discovery for IP version 6</title>
            <author fullname="J. McCann" initials="J." surname="McCann"/>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <author fullname="J. Mogul" initials="J." surname="Mogul"/>
            <author fullname="R. Hinden" initials="R." role="editor" surname="Hinden"/>
            <date month="July" year="2017"/>
            <abstract>
              <t indent="0">This document describes Path MTU Discovery (PMTUD) for IP version 6. It is largely derived from RFC 1191, which describes Path MTU Discovery for IP version 4. It obsoletes RFC 1981.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="87"/>
          <seriesInfo name="RFC" value="8201"/>
          <seriesInfo name="DOI" value="10.17487/RFC8201"/>
        </reference>
        <reference anchor="RFC8304" target="https://www.rfc-editor.org/info/rfc8304" quoteTitle="true" derivedAnchor="RFC8304">
          <front>
            <title>Transport Features of the User Datagram Protocol (UDP) and Lightweight UDP (UDP-Lite)</title>
            <author fullname="G. Fairhurst" initials="G." surname="Fairhurst"/>
            <author fullname="T. Jones" initials="T." surname="Jones"/>
            <date month="February" year="2018"/>
            <abstract>
              <t indent="0">This is an informational document that describes the transport protocol interface primitives provided by the User Datagram Protocol (UDP) and the Lightweight User Datagram Protocol (UDP-Lite) transport protocols. It identifies the datagram services exposed to applications and how an application can configure and use the features offered by the Internet datagram transport service. RFC 8303 documents the usage of transport features provided by IETF transport protocols, describing the way UDP, UDP-Lite, and other transport protocols expose their services to applications and how an application can configure and use the features that make up these services. This document provides input to and context for that document, as well as offers a road map to documentation that may help users of the UDP and UDP-Lite protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8304"/>
          <seriesInfo name="DOI" value="10.17487/RFC8304"/>
        </reference>
      </references>
    </references>
    <section anchor="Acknowledgements" numbered="false" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t indent="0" pn="section-appendix.a-1"><contact fullname="Gorry Fairhurst"/> and <contact fullname="Tom       Jones"/> are supported by funding provided by the University of
      Aberdeen. The authors would like to thank <contact fullname="Magnus       Westerlund"/> and <contact fullname="Mohamed Boucadair"/> for their
      detailed comments and also other people who contributed to completing
      this document.</t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.b">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author fullname="Godred Fairhurst" initials="G" surname="Fairhurst">
        <organization showOnFrontPage="true">University of Aberdeen</organization>
        <address>
          <postal>
            <street>School of Engineering</street>
            <street>Fraser Noble Building</street>
            <city>Aberdeen</city>
            <code>AB24 3UE</code>
            <country>United Kingdom</country>
          </postal>
          <email>gorry@erg.abdn.ac.uk</email>
        </address>
      </author>
      <author fullname="Tom Jones" initials="T" surname="Jones">
        <organization showOnFrontPage="true">University of Aberdeen</organization>
        <address>
          <postal>
            <street>School of Engineering</street>
            <street>Fraser Noble Building</street>
            <city>Aberdeen</city>
            <code>AB24 3UE</code>
            <country>United Kingdom</country>
          </postal>
          <email>tom@erg.abdn.ac.uk</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
