RFC 9869 PROPOSED STANDARD TRANSPORT · UDP · MTU

Datagram Packetization Layer Path MTU Discovery (DPLPMTUD) for UDP Options

How a UDP sender uses the REQ and RES options to find the largest datagram a path will carry.

On rfc-editor.org ↗
PUBLISHED
October 2025
AUTHORS
G. Fairhurst, T. Jones
STREAM
IETF
TOKEN SIZE
4 bytes
REQ AND RES OPTION LENGTH
6 bytes
RESPONSE RATE LIMIT
1 per measured round-trip time, or 1 per second
TOKEN UNIQUENESS
Unique within the maximum segment lifetime
FRAGMENTATION OF PROBES
Not allowed at the UDP or IP layer
IANA ACTIONS
None
DOI
10.17487/RFC9869

RFC text

Contents
Original text · RFC Editor View on rfc-editor.org ↗
Internet Engineering Task Force (IETF)                      G. Fairhurst
Request for Comments: 9869                                      T. Jones
Category: Standards Track                         University of Aberdeen
ISSN: 2070-1721                                             October 2025


   Datagram Packetization Layer Path MTU Discovery (DPLPMTUD) for UDP
                                Options

Abstract

   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.

Status of This Memo

   This is an Internet Standards Track document.

   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.

   Information about the current status of this document, any errata,
   and how to provide feedback on it may be obtained at
   https://www.rfc-editor.org/info/rfc9869.

Copyright Notice

   Copyright (c) 2025 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (https://trustee.ietf.org/license-info) 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.

Table of Contents

   1.  Introduction
   2.  Terminology
   3.  DPLPMTUD for UDP Options
     3.1.  Packet Formats
     3.2.  Sending Probe Packets with the Request Option
     3.3.  Receiving UDP Options Probe Packets and Sending the RES
           Option
   4.  DPLPMTUD Sender Procedures for UDP Options
     4.1.  Confirmation of Connectivity Across a Path
     4.2.  Sending Probe Packets to Increase the PLPMTU
     4.3.  Validating the Path with UDP Options
     4.4.  Probe Packets That Do Not Include Application Data
     4.5.  Probe Packets That Include Application Data
   5.  Receiving Events from the Network
     5.1.  Changes in the Path
     5.2.  Validation of PTB Messages
   6.  Examples with Different Receiver Behaviors
   7.  IANA Considerations
   8.  Security Considerations
   9.  References
     9.1.  Normative References
     9.2.  Informative References
   Acknowledgements
   Authors' Addresses

1.  Introduction

   The User Datagram Protocol (UDP) [RFC0768] offers a minimal transport
   service on top of IP and is frequently used as a substrate for other
   protocols.  Section 3.2 of UDP Guidelines [RFC8085] recommends that
   applications implement some form of Path MTU Discovery (PMTUD) to
   avoid the generation of IP fragments:

   |  Consequently, an application SHOULD 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.

   The UDP API [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.

   Packetization Layer Path MTU Discovery (PLPMTUD) [RFC4821] describes
   a method for a bidirectional Packetization Layer (PL) to search for
   the largest Packetization Layer PMTU (PLPMTU) supported on a path.
   DPLPMTUD [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.

   UDP Options [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
   (Section 6.1 of [RFC8899]) and requires support to be enabled at both
   the sender and receiver.

   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.

   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 Section 23 of
   [RFC9868]).

2.  Terminology

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in
   BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
   capitals, as shown here.

   This document uses the terms defined for DPLPMTUD (Sections 2 and 5
   of [RFC8899]).

3.  DPLPMTUD for UDP Options

   A UDP Options sender implementing DPLPMTUD uses the method specified
   in [RFC8899].  In this specification, DPLPMTUD is realized using a
   pair of UDP Options: the Request (REQ) Option and the Response (RES)
   Option (Section 11.7 of [RFC9868]).  The method also uses the End of
   Options List (EOL) Option (Section 11.1 of [RFC9868]) to introduce
   padding to set the size of a probe packet.

   Use of DPLPMTUD MUST 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 MUST NOT 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.

   Probe packets consume network capacity and incur endpoint processing
   (Section 4.1 of [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.

   DPLPMTUD can be implemented over UDP Options in two ways:

   *  Implementation within the UDP transport service.

   *  Implementation in an Upper Layer protocol (or application) that
      uses UDP Options.

   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.

   The discovered PLPMTU can be used to either:

   *  set the maximum datagram size for the current path or

   *  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.

   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 MUST disable DPLPMTUD
   processing.

   +--------------------------------+
   |      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 & 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.

      |  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.

   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.

   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.  Section 6.1 of [RFC8899]
   recommends that: "An application SHOULD avoid using DPLPMTUD when the
   underlying transport system provides this capability."

3.1.  Packet Formats

   The UDP Options used in this document are described in [RFC9868] and
   are used in the following ways:

   *  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.

   *  A sending PL can use the EOL Option together with a minimum
      datagram length to pad probe packets.

   *  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.

   *  If a UDP Options endpoint creates and sends a datagram with a RES
      Option solely as response to a received REQ Option, the responder
      MUST 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 Section 6
      describes a case where this might be used.

   *  Reception of a RES Option by the REQ sender confirms that a
      specific probe packet has been received by the remote UDP Options
      receiver.

   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 MUST be
   uniquely identifiable by the UDP Options sender within the Maximum
   Segment Lifetime (MSL) [RFC8085].  The UDP Options sender MUST NOT
   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.

   The value of the four-byte token field SHOULD be initialized to a
   randomized value to enhance protection from off-path attacks, as
   described in Section 5.1 of [RFC8085].

3.2.  Sending Probe Packets with the Request Option

   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
   (Section 11.1 of [RFC9868]), followed by any padding needed to
   inflate to the required probe size.

   A probe packet can therefore be up to the maximum size supported by
   the local interface (i.e., the Interface MTU).  Item 2 in Section 3
   of [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 MUST NOT be constrained by the
   maximum PMTU set by network layer mechanisms (such as discovered by
   PMTUD [RFC1191][RFC8201] or the PMTU size held in the IP-layer
   cache), as noted in item 2 in Section 3 of [RFC8899]).

   UDP datagrams used as DPLPMTUD probe packets, as described in this
   document, MUST NOT be fragmented at the UDP or IP layer.  Therefore,
   Section 3 of [RFC8899] requires: "In IPv4, a probe packet MUST be
   sent with the Don't Fragment (DF) bit set in the IP header and
   without network layer endpoint fragmentation."

3.3.  Receiving UDP Options Probe Packets and Sending the RES Option

   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.

   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 Section 6.

      |  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.

4.  DPLPMTUD Sender Procedures for UDP Options

   DPLPMTUD utilizes three types of probe.  These are described in the
   following sections:

   *  Probes to confirm the path can support the BASE_PLPMTU
      (Section 5.1.4 of [RFC8899]).

   *  Probes to detect whether the path can support a larger PLPMTU.

   *  Probes to validate that the path supports the current PLPMTU.

4.1.  Confirmation of Connectivity Across a Path

   The DPLPMTUD method requires a PL to confirm connectivity over the
   path (Section 5.1.4 of [RFC8899]), but UDP itself does not offer a
   mechanism for this.

   UDP Options can provide this required functionality.  A UDP Options
   sender implementing this specification MUST elicit a positive
   confirmation of connectivity for the path by sending a probe packet
   padded to size BASE_PLPMTU.  This confirmation probe MUST 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.

4.2.  Sending Probe Packets to Increase the PLPMTU

   From time to time, DPLPMTUD enters the SEARCHING state, described in
   Section 5.2 of [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 Section 11.5 of [RFC9868]), this
   value MAY be used as a hint to initialize this search to increase the
   PLPMTU.

   Probe packets seeking to increase the PLPMTU SHOULD NOT carry
   application data (see "Probing using padding data" in Section 4.1 of
   [RFC8899]), since they will be lost whenever their size exceeds the
   actual PMTU.  [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 MUST include the REQ
   Option when using transport options for UDP [RFC9868].

   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
   Section 5 of [RFC8085]), although Section 18 of [RFC9868] discusses
   the implications when using UDP Options.

4.3.  Validating the Path with UDP Options

   A PL using DPLPMTUD MUST validate that a path continues to support
   the PLPMTU discovered in a previous search for a suitable PLPMTU
   value, as defined in Section 6.1.4 of [RFC8899].  This validation
   sends probe packets in the DPLPMTUD SEARCH_COMPLETE state
   (Section 5.2 of [RFC8899]) to detect black-holing of data
   (Section 4.3 of [RFC8899] defines a DPLPMTUD black hole).

   Path validation can be implemented within UDP Options by generating a
   probe packet of size PLPMTU, which MUST 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 MAY 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 Section 4.1 of [RFC8899].  When using "Probing
   using padding data", the UDP Options API does not indicate receipt of
   the zero-length probe packet (see Section 6 of [RFC9868]).

4.4.  Probe Packets That Do Not Include Application Data

   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" (Section 4.1 of [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 (Section 11.1 of [RFC9868]) with any additional space zero-filled
   as needed (see Section 15 of [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.

4.5.  Probe Packets That Include Application Data

   An implementation always uses the format in Section 4.4 when DPLPMTUD
   searches to increase the PLPMTU.

   An alternative format is permitted for a probe packet that is used to
   confirm the connectivity or to validate the path.  These probe
   packets MAY 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.)  Section 4.1 of [RFC8899] provides a discussion of the
   merits and demerits of including application data.  For example, this
   reduces the need to send additional datagrams.

   This type of probe packet MAY 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 MUST be included when the
   sending Upper Layer protocol performs DPLPMTUD.  The DPLPMTUD method
   tracks the transmission of probe packets (using the REQ Option
   token).

   A receiver that responds to DPLPMTUD MUST 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 Section 6).

   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.

5.  Receiving Events from the Network

   This specification does not rely upon reception of events from the
   network, but an implementation can utilize these events when they are
   provided.

5.1.  Changes in the Path

   A change in the path or the loss of a probe packet can result in
   DPLPMTUD updating the PLPMTU.  DPLPMTUD [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 (Section 4.3 of [RFC8899]).

   An Upper Layer protocol could trigger DPLPMTUD to validate the path
   when it observes a high packet loss rate (or a repeated protocol
   timeout) [RFC8899].

   Section 3 of [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.

5.2.  Validation of PTB Messages

   Support for receiving ICMP PTB messages is OPTIONAL for DPLPMTUD.  A
   UDP Options sender can therefore ignore received ICMP PTB messages.

   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:

   *  DPLPMTUD first utilizes the quoted information in each PTB
      message.  The receiver MUST 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
      Section 4.6.1 of [RFC8899]).

   *  The receiver SHOULD utilize information that is not simple for an
      off-path attacker to determine (see Section 4.6.1 of [RFC8899]).
      Specifically, a UDP Options receiver SHOULD 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.

   An implementation unable to support this validation MUST ignore
   received ICMP PTB messages.

6.  Examples with Different Receiver Behaviors

   When enabled, a DPLPMTUD endpoint that implements UDP Options
   normally responds with a UDP datagram with a RES Option when
   requested by a sender.

   The following examples describe various possible receiver behaviors:

   *  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.).

   *  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.

   *  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.

   *  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.  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 MUST 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.

7.  IANA Considerations

   This document has no IANA actions.

8.  Security Considerations

   The security considerations for using UDP Options are described in
   [RFC9868].  The method does not change the integrity protection
   offered by the UDP Options method.

   The security considerations for using DPLPMTUD are described in
   [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.

   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.

   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 MUST 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.

   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.

9.  References

9.1.  Normative References

   [RFC0768]  Postel, J., "User Datagram Protocol", STD 6, RFC 768,
              DOI 10.17487/RFC0768, August 1980,
              <https://www.rfc-editor.org/info/rfc768>.

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <https://www.rfc-editor.org/info/rfc2119>.

   [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
              May 2017, <https://www.rfc-editor.org/info/rfc8174>.

   [RFC8899]  Fairhurst, G., Jones, T., Tüxen, M., Rüngeler, I., and T.
              Völker, "Packetization Layer Path MTU Discovery for
              Datagram Transports", RFC 8899, DOI 10.17487/RFC8899,
              September 2020, <https://www.rfc-editor.org/info/rfc8899>.

   [RFC9868]  Touch, J. and C. Heard, Ed., "Transport Options for UDP",
              RFC 9868, DOI 10.17487/RFC9868, October 2025,
              <https://www.rfc-editor.org/info/rfc9868>.

9.2.  Informative References

   [RFC1191]  Mogul, J. and S. Deering, "Path MTU discovery", RFC 1191,
              DOI 10.17487/RFC1191, November 1990,
              <https://www.rfc-editor.org/info/rfc1191>.

   [RFC4821]  Mathis, M. and J. Heffner, "Packetization Layer Path MTU
              Discovery", RFC 4821, DOI 10.17487/RFC4821, March 2007,
              <https://www.rfc-editor.org/info/rfc4821>.

   [RFC8085]  Eggert, L., Fairhurst, G., and G. Shepherd, "UDP Usage
              Guidelines", BCP 145, RFC 8085, DOI 10.17487/RFC8085,
              March 2017, <https://www.rfc-editor.org/info/rfc8085>.

   [RFC8201]  McCann, J., Deering, S., Mogul, J., and R. Hinden, Ed.,
              "Path MTU Discovery for IP version 6", STD 87, RFC 8201,
              DOI 10.17487/RFC8201, July 2017,
              <https://www.rfc-editor.org/info/rfc8201>.

   [RFC8304]  Fairhurst, G. and T. Jones, "Transport Features of the
              User Datagram Protocol (UDP) and Lightweight UDP (UDP-
              Lite)", RFC 8304, DOI 10.17487/RFC8304, February 2018,
              <https://www.rfc-editor.org/info/rfc8304>.

Acknowledgements

   Gorry Fairhurst and Tom Jones are supported by funding provided by
   the University of Aberdeen.  The authors would like to thank Magnus
   Westerlund and Mohamed Boucadair for their detailed comments and also
   other people who contributed to completing this document.

Authors' Addresses

   Godred Fairhurst
   University of Aberdeen
   School of Engineering
   Fraser Noble Building
   Aberdeen
   AB24 3UE
   United Kingdom
   Email: gorry@erg.abdn.ac.uk


   Tom Jones
   University of Aberdeen
   School of Engineering
   Fraser Noble Building
   Aberdeen
   AB24 3UE
   United Kingdom
   Email: tom@erg.abdn.ac.uk

ISO Plain Language

On this page
PROBLEMUDP has no way to discover the largest datagram that will cross a path without being fragmented. The UDP API lets an application react to an ICMP Packet Too Big message, but offers no way to find the limit by itself, and many paths drop those messages.
MECHANISMRFC 9869 uses the Request and Response options added by RFC 9868. The sender pads a datagram to a chosen size and includes a Request option carrying a four-byte token; the receiver answers with a Response option echoing the token. Each answer confirms that a datagram of that size reached the far end.
WHY IT MATTERSThe sender can raise the size it uses until a probe stops being answered, and can detect later black holes by re-probing the size it already found. The document has no IANA actions, and it requires both ends to enable the mechanism explicitly.

§1Introduction

UDP offers a minimal transport service on top of IP and is frequently used as a substrate for other protocols. Section 3.2 of the UDP usage guidelines in RFC 8085 recommends that applications implement some form of Path MTU Discovery to avoid the generation of IP fragments, either by using the path MTU information provided by the IP layer or by implementing Path MTU Discovery themselves to determine whether the path to a destination will support the desired message size without fragmentation.

The UDP API of RFC 8304 offers calls for applications to receive ICMP Packet Too Big messages and to control the maximum size of datagrams that are sent, but it offers no automated mechanism for an application to discover the maximum packet size supported by a path. Upper layer protocols, which include applications, can implement mechanisms for Path MTU Discovery above the UDP API.

Packetization Layer Path MTU Discovery in RFC 4821 describes a method for a bidirectional Packetization Layer to search for the largest Packetization Layer Path MTU supported on a path, and DPLPMTUD in RFC 8899 specifies that support for datagram transports. Both gain robustness by using a probing mechanism that does not solely rely on ICMP Packet Too Big messages, and that works on paths which drop those messages.

UDP Options in RFC 9868 supply functionality that can be used to implement DPLPMTUD within the transport service, or in an upper layer protocol or application that uses UDP Options. This document specifies how DPLPMTUD using UDP Options is implemented, and requires support to be enabled at both the sender and the receiver.

Implementing DPLPMTUD within the transport service above UDP Options avoids the need for each upper layer protocol to implement the method. It provides a standard way for applications to discover the current maximum packet size for a path and to detect when that changes. It can be used with equal-cost multipath routing and with multihoming, and if either is supported, a state machine is needed for each path. DPLPMTUD is not specified for multicast, because the method requires explicit acknowledgement of probe packets, which is primarily intended for unicast use.

UDP itself cannot tell an application how large a message the network will carry. The socket interface lets an application react when a router tells it a message was too big, but that message is often blocked on the way. This document uses the UDP options to find the limit by experiment: send a message of a given size and see whether the far end acknowledges it.

Where DPLPMTUD sits when it is implemented in the transport service
  1. Upper layer protocol or applicationDecides when to enable DPLPMTUD
  2. DPLPMTUD state machineHolds the maximum packet size, the probed size and the tokens
  3. UDP Options transportSends and receives the probes
  4. IPDelivers the datagrams

§3Using the Request and Response Options

A UDP Options sender implementing DPLPMTUD uses the method specified in RFC 8899, realised with a pair of UDP Options: the Request option and the Response option, plus the End of Options List option to introduce padding that sets the size of a probe packet.

Use of DPLPMTUD must be explicitly enabled by the application, for instance once the application has established connectivity and is ready to exchange data with the remote upper layer protocol. A DPLPMTUD receiver must not respond to a Request option until DPLPMTUD has been enabled, which helps protect against misuse of the mechanism for other forms of probing.

Probe packets consume network capacity and incur endpoint processing, so implementations ought to send a probe packet with a Request option only when their local DPLPMTUD state machine requires it: when confirming the base path MTU, when probing to increase the path MTU, or when confirming the current path MTU.

DPLPMTUD can be implemented over UDP Options in two ways: within the UDP transport service, or in an upper layer protocol or application that uses UDP Options. When it is implemented within the transport service, the DPLPMTUD state machine is responsible for sending the probe packets and determines the maximum packet size, the largest size of application data block that can be sent across a path in a single datagram; the upper layer protocol is responsible for deciding when a session enables DPLPMTUD. The discovered value can then set the maximum datagram size for the current path, or the maximum fragment size when the sender uses the UDP Fragmentation option to divide a datagram into several fragments.

The design requires an API primitive that lets the application control whether the DPLPMTUD state machine is enabled for a specific UDP port, and by default that API must disable DPLPMTUD processing. When DPLPMTUD is implemented by an upper layer protocol instead, the format and content of the probe packets are determined by that protocol, which is also permitted to use the same options. If DPLPMTUD is active at more than one layer, the token values need to be coordinated so that each probe packet has a unique token, and a configuration ought to avoid doing the discovery in both places at once, since RFC 8899 recommends that an application should avoid using DPLPMTUD when the underlying transport system provides this capability.

Two options do the work: a request that asks for an answer, and a response that carries the answer. The feature is off until the application turns it on, and the far end must also have turned it on before it answers anything. The discovery can be done inside the UDP layer itself, which saves every application from writing it, or inside the application, which gives the application control over what the probes look like.

The four things a sender needs to know
  • Enabled explicitlyThe application must turn DPLPMTUD on, and the receiver must not answer before it is enabled.
  • A token per probeA four-byte value identifies each probe and must not be reused within the maximum segment lifetime.
  • Answers are rate limitedA receiver that answers only with the response option sends at most one per round-trip time or one per second.
  • Probes are not application dataA probe without application data is not delivered to the upper layer at the far end.

§3.1Packet Formats

The Request option is set by a sending Packetization Layer to solicit a response from a remote receiver, and a four-byte token identifies each request. A sending layer can use the End of Options List option together with a minimum datagram length to pad the probe packets. The Response option is sent by a UDP Options receiver in response to a previously received Request option, and each Response option echoes the last received four-byte token. Reception of a Response option by the sender confirms that a specific probe packet has been received by the remote receiver.

If a UDP Options endpoint creates and sends a datagram with a Response option solely in response to a received Request option, the responder must limit the rate of these responses, for example by limiting each pair of ports to send one per measured round-trip time or one per second. This rate limit mitigates the denial-of-service vector without significantly affecting the operation of DPLPMTUD.

The token lets a sender distinguish between acknowledgements for initial probe packets and acknowledgements confirming the receipt of later probe packets travelling along an alternate path with a larger round-trip time. Each probe packet must be uniquely identifiable by the sender within the maximum segment lifetime, and the sender must not reuse a token value within that lifetime. Because UDP Options operates over UDP, the token values only need to be unique for the specific five-tuple over which it is operating. The value of the four-byte token field should be initialised to a randomised value, to enhance protection from off-path attacks.

Each request carries a four-byte random number. The answer repeats that number, so the sender knows which probe was acknowledged and can tell an answer to an old probe from an answer to a new one. A sender must not reuse a token within the maximum segment lifetime, so that a delayed answer cannot be mistaken for a current one.

The Request and Response options (RFC 9868, Figure 15)
REQ and RES options
FieldNameSizeValueDescription
KINDKind1 byte6 for the Request option, 7 for the Response option.
LENGTHLength1 byteAlways 6, the length of the whole option in bytes.
TOKENToken4 bytesA four-byte value that the response echoes back.

§3.2Sending and Answering Probes

DPLPMTUD relies on sending a probe packet of a specific size. Each probe packet includes the UDP Options area, containing a Request option and any other required options concluded with an End of Options List option, followed by the padding needed to inflate it to the required probe size. A probe packet can therefore be up to the maximum size supported by the local interface, the interface MTU, and its size must not be constrained by the maximum PMTU set by network layer mechanisms such as the IP-layer PMTU cache.

UDP datagrams used as DPLPMTUD probe packets must not be fragmented at the UDP or IP layer. In IPv4, a probe packet must be sent with the Don't Fragment bit set in the IP header and without network layer endpoint fragmentation.

When DPLPMTUD is enabled, a UDP Options receiver responds by sending a UDP datagram with the Response option when it receives a datagram with the Request option. The operation of DPLPMTUD can depend on the support at the remote endpoint, on the way DPLPMTUD is implemented, and in some cases on the application data exchanged over the transport service. When UDP Options is not supported by the remote receiver, DPLPMTUD will be unable to confirm the path or to discover the path MTU, and the result is the minimum configured path MTU.

A probe is an ordinary UDP datagram padded with zeroes to the size being tested, carrying a request option. The padding is added after the options, and the datagram is marked so that neither UDP nor IP will split it, because a split datagram would arrive at the far end in pieces and would not prove that the whole size fitted. The far end answers with the response option, and that answer is the proof.

Probing the path for the largest datagram it will carry (illustrative, not from the RFC)
SenderReceiver
  1. PROBE WITH REQA datagram padded to the size being tested, carrying a Request option with a token.
  2. RESThe receiver echoes the token, which confirms that size reached the far end.
  3. LARGER PROBEThe sender repeats with a bigger datagram to look for a larger size.
  4. RESAn answer at the new size shows the path carries it.

§4Sender Procedures

DPLPMTUD uses three types of probe: probes to confirm that the path can support the base path MTU, probes to detect whether the path can support a larger path MTU, and probes to validate that the path still supports the current path MTU.

To confirm connectivity across a path, the sender must elicit a positive confirmation by sending a probe packet padded to the size of the base path MTU. This confirmation probe must include the Request option to elicit a response from the remote DPLPMTUD. Reception of a datagram with the corresponding Response option confirms that a packet of the probed size successfully traversed the path, and also confirms that the remote endpoint supports the Response option.

To increase the path MTU, the sender periodically enters the searching state, for example after the timer that raises the PMTU expires, to detect whether the current path can support a larger value. When the remote endpoint advertises the UDP Maximum Datagram Size option, that value may be used as a hint to initialise the search. Probe packets seeking to increase the path MTU should not carry application data, because they will be lost whenever their size exceeds the actual path MTU, and they must include the Request option so that the path is asked for a positive acknowledgement of a datagram of the specific probed size. At the receiver, a probe packet that carries no application data is not part of the end-to-end transport data and is not delivered to the upper layer, although a zero-length payload notification could still be delivered.

To validate the path, the sender must check that the path still supports the path MTU discovered earlier, which detects black-holing of data. Path validation generates a probe packet of the discovered size that must include a Request option to elicit a positive confirmation that the path delivered it. Such a probe may either carry no application data or carry application data with padding.

A simple implementation uses only probe packets with no application data, padding each one to the required size including the Request option. This avoids having to retransmit application data when a probe fails, and can be achieved by setting a minimum datagram length so that the options list ends in End of Options List with the additional space zero-filled. An alternative format is permitted for a probe used to confirm connectivity or to validate the path: those probes may carry application data, which reduces the need to send additional datagrams. A probe of that kind may use a control message format defined by the upper layer protocol, provided the message does not need to be delivered reliably, and must include the Request option when the sending upper layer protocol performs DPLPMTUD. A receiver that responds to DPLPMTUD must process the Request option and include the corresponding Response option with an upper layer protocol message that it returns to the requester.

The sender probes three times for three reasons. To start, it checks that the path works at the basic size. Then, now and then, it tries a larger size to see whether the path will take it, and keeps the largest size that is answered. Later, it repeats a probe at the size it settled on, so that a path which has quietly started dropping large packets is noticed. Probes that test a larger size carry no application data, because those are the ones expected to be lost.

§6Examples with Different Receiver Behaviours

The document describes four possible receiver behaviours. In the first, there is no DPLPMTUD receiver support: no Response option is received from the remote endpoint, so the method cannot discover the path MTU and the result is the minimum configured value. Such a remote endpoint might not be configured to process UDP Options, or might not return a datagram with a Response option for some other reason such as packet loss, insufficient space to include the option, or filtering on the path.

In the second, the DPLPMTUD receiver uses application datagrams: both ends support the method, but the receiver only returns a Response option with the next UDP datagram it sends, so the reception of a request does not systematically trigger a response. This lets DPLPMTUD work when there is a flow of datagrams in both directions, provided there is periodic feedback, for example one acknowledgement packet per round-trip time. It requires the path MTU at the receiver to be large enough for the Response option to fit in the feedback packets sent in the return direction, and it avoids opportunities to misuse the method as a denial-of-service attack. When there is a low rate of transmission, or none at all, in the return direction, it prevents prompt delivery of the Response option, which at the sender results in probe packets failing to be acknowledged in time and can give a smaller path MTU than the path actually supports, or the minimum configured value.

In the third, the transfer is unidirectional. When an application only transfers data in one direction, or predominantly in one direction, the wait at the receiver for a datagram to be queued before returning a Response option can easily result in a probe timeout at the sender. In this case, DPLPMTUD can allow exchanging datagrams without a payload to return the Response option.

In the fourth, the DPLPMTUD receiver is permitted to send responses in UDP datagrams with no payload. A receiver can then generate a datagram, for example with zero payload data, solely to return a Response option, sent when no other datagrams are queued for transmission. This allows an endpoint to probe the set of UDP ports configured to support this specification. It costs some additional traffic but ensures timely progress of DPLPMTUD, and the rate limit of one response per measured round-trip time or one per second applies to it.

What the sender learns depends on how the far end behaves. If the far end never answers, the sender settles on the smallest size it is allowed to use. If the far end only answers when it happens to send something anyway, the answer arrives late or not at all when traffic is one-way, so the sender may end up with a smaller size than the path really supports. If the far end is allowed to send an empty datagram purely to answer, the answer comes back promptly, at the cost of a little extra traffic.

What the sender learns from each receiver behaviour
Receiver behaviourWhat the sender sees
No DPLPMTUD supportNo response option, so the path MTU stays at the minimum configured value
Answers only with application datagramsThe response arrives with the next outbound datagram, which needs regular traffic in the return direction
One-way traffic onlyThe probe can time out while waiting for a datagram to send
Allowed to answer with an empty datagramThe response comes back promptly, at the cost of some extra traffic

§8Security Considerations

The security considerations for using UDP Options are described in RFC 9868, and the method does not change the integrity protection the UDP Options method offers. The security considerations for using DPLPMTUD are described in RFC 8899. On-path attackers could maliciously drop or modify probe packets to seek to decrease the path MTU, or to modify probe packets in an attempt to black-hole traffic.

The document recommends that the token value in the Request option is initialised to a randomised value, to enhance protection from off-path attacks. If a subsequent probe packet uses a token value that is easily derived from the initial value, for instance by incrementing it, a misbehaving on-path observer could determine the token values used for later probe packets from that sender, even if those probe packets are not passing through the observer. That would allow probe packets to be forged, with an impact similar to other on-path attacks against probe packets. Using an unpredictable token value for each probe packet mitigates this.

Section 5.2 covers ICMP Packet Too Big messages. Support for receiving them is optional for DPLPMTUD, so a UDP Options sender can ignore them. Before processing such a message, the method needs two checks to ensure that it was received in response to a sent probe packet. First, the receiver must validate the protocol information in the quoted packet carried in the message, to validate that the message originated from the sending node. Second, the receiver should use information that is not simple for an off-path attacker to determine, by confirming that the token in the Request option of the quoted packet corresponds to a probe packet that was recently sent by the current endpoint. An implementation unable to support this validation must ignore received ICMP Packet Too Big messages.

Someone on the path can drop or alter probes, and that is a problem for path MTU discovery in general, not just for UDP. Two habits reduce the risk. The random token in each request should not be predictable from the previous one, or an observer could work out future tokens and forge probes. And when a router reports that a datagram was too big, the sender should check that the quoted packet is one it actually sent, and ignore the report if it cannot.

§8References