rfc9869v1.txt   rfc9869.txt 
skipping to change at line 18 skipping to change at line 18
Options Options
Abstract Abstract
This document specifies how a UDP Options sender implements Datagram This document specifies how a UDP Options sender implements Datagram
Packetization Layer Path MTU Discovery (DPLPMTUD) as a robust method Packetization Layer Path MTU Discovery (DPLPMTUD) as a robust method
for Path MTU Discovery (PMTUD). This method uses the UDP Options for Path MTU Discovery (PMTUD). This method uses the UDP Options
packetization layer. It allows an application to discover the packetization layer. It allows an application to discover the
largest size of datagram that can be sent across a network path. It largest size of datagram that can be sent across a network path. It
also provides a way to allow the application to periodically verify also provides a way to allow the application to periodically verify
the current maximum packet size supported by a path and to update the current Maximum Packet Size (MPS) supported by a path and to
this when required. update this when required.
Status of This Memo Status of This Memo
This is an Internet Standards Track document. This is an Internet Standards Track document.
This document is a product of the Internet Engineering Task Force This document is a product of the Internet Engineering Task Force
(IETF). It represents the consensus of the IETF community. It has (IETF). It represents the consensus of the IETF community. It has
received public review and has been approved for publication by the received public review and has been approved for publication by the
Internet Engineering Steering Group (IESG). Further information on Internet Engineering Steering Group (IESG). Further information on
Internet Standards is available in Section 2 of RFC 7841. Internet Standards is available in Section 2 of RFC 7841.
skipping to change at line 87 skipping to change at line 87
1. Introduction 1. Introduction
The User Datagram Protocol (UDP) [RFC0768] offers a minimal transport The User Datagram Protocol (UDP) [RFC0768] offers a minimal transport
service on top of IP and is frequently used as a substrate for other service on top of IP and is frequently used as a substrate for other
protocols. Section 3.2 of UDP Guidelines [RFC8085] recommends that protocols. Section 3.2 of UDP Guidelines [RFC8085] recommends that
applications implement some form of Path MTU Discovery (PMTUD) to applications implement some form of Path MTU Discovery (PMTUD) to
avoid the generation of IP fragments: avoid the generation of IP fragments:
| Consequently, an application SHOULD either use the path MTU | Consequently, an application SHOULD either use the path MTU
| information provided by the IP layer or implement Path MTU | information provided by the IP layer or implement Path MTU
| Discovery (PMTUD) ... | 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 The UDP API [RFC8304] offers calls for applications to receive ICMP
Packet Too Big (PTB) messages and to control the maximum size of Packet Too Big (PTB) messages and to control the maximum size of
datagrams that are sent, but it does not offer any automated datagrams that are sent, but it does not offer any automated
mechanisms for an application to discover the maximum packet size mechanisms for an application to discover the MPS supported by a
supported by a path. Upper Layer protocols, which include path. Upper Layer protocols, which include applications, can
applications, can implement mechanisms for PMTUD above the UDP API. implement mechanisms for PMTUD above the UDP API.
Packetization Layer Path MTU Discovery (PLPMTUD) [RFC4821] describes Packetization Layer Path MTU Discovery (PLPMTUD) [RFC4821] describes
a method for a bidirectional Packetization Layer (PL) to search for a method for a bidirectional Packetization Layer (PL) to search for
the largest Packetization Layer PMTU (PLPMTU) supported on a path. the largest Packetization Layer PMTU (PLPMTU) supported on a path.
DPLPMTUD [RFC8899] specifies this support for datagram transports. DPLPMTUD [RFC8899] specifies this support for datagram transports.
PLPMTUD and DPLPMTUD gain robustness by using a probing mechanism PLPMTUD and DPLPMTUD gain robustness by using a probing mechanism
that does not solely rely on ICMP PTB messages and works on paths that does not solely rely on ICMP PTB messages and works on paths
that drop ICMP PTB messages. that drop ICMP PTB messages.
UDP Options [RFC9868] supplies functionality that can be used to UDP Options [RFC9868] supplies functionality that can be used to
implement DPLPMTUD within the transport service or in an Upper Layer implement DPLPMTUD within the transport service or in an Upper Layer
protocol (including an application) that uses UDP Options. This protocol (including an application) that uses UDP Options. This
document specifies how DPLPMTUD using UDP Options is implemented document specifies how DPLPMTUD using UDP Options is implemented
(Section 6.1 of [RFC8899]) and requires support to be enabled at both (Section 6.1 of [RFC8899]) and requires support to be enabled at both
the sender and receiver. the sender and receiver.
Implementing DPLPMTUD within the transport service above UDP Options Implementing DPLPMTUD within the transport service above UDP Options
avoids the need for each Upper Layer protocol to implement the avoids the need for each Upper Layer protocol to implement the
DPLPMTUD method. It provides a standard method for applications to DPLPMTUD method. It provides a standard method for applications to
discover the current maximum packet size for a path and to detect discover the current MPS for a path and to detect when this changes.
when this changes. It can be used with Equal-Cost Multipath (ECMP) It can be used with Equal-Cost Multipath (ECMP) routing and/or
routing and/or multihoming. If multipath or multihoming is multihoming. If multipath or multihoming is supported, a state
supported, a state machine is needed for each path. machine is needed for each path.
DPLPMTUD is not specified for multicast. The method requires DPLPMTUD is not specified for multicast. The method requires
explicit acknowledgement of probe packets provided by UDP Options, explicit acknowledgement of probe packets provided by UDP Options,
which is primarily intended for unicast use (see Section 23 of which is primarily intended for unicast use (see Section 23 of
[RFC9868]). [RFC9868]).
2. Terminology 2. Terminology
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
skipping to change at line 167 skipping to change at line 169
DPLPMTUD can be implemented over UDP Options in two ways: DPLPMTUD can be implemented over UDP Options in two ways:
* Implementation within the UDP transport service. * Implementation within the UDP transport service.
* Implementation in an Upper Layer protocol (or application) that * Implementation in an Upper Layer protocol (or application) that
uses UDP Options. uses UDP Options.
When DPLPMTUD is implemented within the UDP transport service, the When DPLPMTUD is implemented within the UDP transport service, the
DPLPMTUD state machine is responsible for sending probe packets to DPLPMTUD state machine is responsible for sending probe packets to
determine a PLPMTU, as described in this document (and hence the determine a PLPMTU, as described in this document. This determines
Maximum Packet Size (MPS), the largest size of application data block an MPS, the largest size of application data block that can be sent
that can be sent across a network path using a single datagram). The across a network path using a single datagram. The Upper Layer
Upper Layer protocol is responsible for deciding when a session protocol is responsible for deciding when a session enables DPLPMTUD.
enables DPLPMTUD.
The discovered PLPMTU can be used to either: The discovered PLPMTU can be used to either:
* set the maximum datagram size for the current path or * set the maximum datagram size for the current path or
* set the maximum fragment size when a sender uses the UDP * set the maximum fragment size when a sender uses the UDP
Fragmentation Option to divide a datagram into multiple UDP Fragmentation Option to divide a datagram into multiple UDP
fragments for transmission. The size of each UDP fragment is then fragments for transmission. The size of each UDP fragment is then
less than or equal to the size of the discovered largest IP packet less than or equal to the size of the discovered largest IP packet
that can be received across the current path. that can be received across the current path.
skipping to change at line 372 skipping to change at line 373
larger PLPMTU. When the remote endpoint advertises a UDP Maximum larger PLPMTU. When the remote endpoint advertises a UDP Maximum
Datagram Size (MDS) option (see Section 11.5 of [RFC9868]), this 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 value MAY be used as a hint to initialize this search to increase the
PLPMTU. PLPMTU.
Probe packets seeking to increase the PLPMTU SHOULD NOT carry Probe packets seeking to increase the PLPMTU SHOULD NOT carry
application data (see "Probing using padding data" in Section 4.1 of application data (see "Probing using padding data" in Section 4.1 of
[RFC8899]), since they will be lost whenever their size exceeds the [RFC8899]), since they will be lost whenever their size exceeds the
actual PMTU. [RFC8899] requires a probe packet to elicit a positive actual PMTU. [RFC8899] requires a probe packet to elicit a positive
acknowledgement that the path has delivered a datagram of the acknowledgement that the path has delivered a datagram of the
specific probed size; therefore, when using [RFC9868], a probe packet specific probed size; therefore, a probe packet MUST include the REQ
MUST include the REQ Option. Option when using transport options for UDP [RFC9868].
At the receiver, a received probe packet that does not carry At the receiver, a received probe packet that does not carry
application data does not form a part of the end-to-end transport 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., data and is not delivered to the Upper Layer protocol (i.e.,
application or protocol layered above UDP). A zero-length payload application or protocol layered above UDP). A zero-length payload
notification could still be delivered to the application (see notification could still be delivered to the application (see
Section 5 of [RFC8085]), although Section 18 of [RFC9868] discusses Section 5 of [RFC8085]), although Section 18 of [RFC9868] discusses
the implications when using UDP Options. the implications when using UDP Options.
4.3. Validating the Path with UDP Options 4.3. Validating the Path with UDP Options
A PL using DPLPMTUD MUST validate that a path continues to support A PL using DPLPMTUD MUST validate that a path continues to support
the PLPMTU discovered in a previous search for a suitable PLPMTU the PLPMTU discovered in a previous search for a suitable PLPMTU
value, as defined in Section 6.1.4 of [RFC8899]. This validation value, as defined in Section 6.1.4 of [RFC8899]. This validation
sends probe packets in the DPLPMTUD SEARCH_COMPLETE state to detect sends probe packets in the DPLPMTUD SEARCH_COMPLETE state
black-holing of data (Section 5.2 of [RFC8899], Section 4.3 of (Section 5.2 of [RFC8899]) to detect black-holing of data
[RFC8899] defines a DPLPMTUD black hole). (Section 4.3 of [RFC8899] defines a DPLPMTUD black hole).
Path validation can be implemented within UDP Options by generating a Path validation can be implemented within UDP Options by generating a
probe packet of size PLPMTU, which MUST include a REQ Option to probe packet of size PLPMTU, which MUST include a REQ Option to
elicit a positive confirmation that the path has delivered this probe elicit a positive confirmation that the path has delivered this probe
packet. A probe packet used to validate the path MAY use either packet. A probe packet used to validate the path MAY use either
"Probing using padding data" to construct a probe packet that does "Probing using padding data" to construct a probe packet that does
not carry any application data (see Section 4.1 of [RFC8899]) or not carry any application data or "Probing using application data and
"Probing using application data and padding data" (see Section 4.1 of padding data"; see Section 4.1 of [RFC8899]. When using "Probing
[RFC8899]). When using "Probing using padding data", the UDP Options using padding data", the UDP Options API does not indicate receipt of
API does not indicate receipt of the zero-length probe packet (see the zero-length probe packet (see Section 6 of [RFC9868]).
Section 6 of [RFC9868]).
4.4. Probe Packets That Do Not Include Application Data 4.4. Probe Packets That Do Not Include Application Data
A simple implementation of the method might be designed to only use A simple implementation of the method might be designed to only use
probe packets in a UDP datagram that includes no application data. probe packets in a UDP datagram that includes no application data.
The size of each probe packet is padded to the required probe size The size of each probe packet is padded to the required probe size
including the REQ Option. This implements "Probing using padding including the REQ Option. This implements "Probing using padding
data" (Section 4.1 of [RFC8899]) and avoids having to retransmit data" (Section 4.1 of [RFC8899]) and avoids having to retransmit
application data when a probe fails. This could be achieved by application data when a probe fails. This could be achieved by
setting a minimum datagram length, such that the options list ends in setting a minimum datagram length, such that the options list ends in
skipping to change at line 511 skipping to change at line 511
When enabled, a DPLPMTUD endpoint that implements UDP Options When enabled, a DPLPMTUD endpoint that implements UDP Options
normally responds with a UDP datagram with a RES Option when normally responds with a UDP datagram with a RES Option when
requested by a sender. requested by a sender.
The following examples describe various possible receiver behaviors: The following examples describe various possible receiver behaviors:
* No DPLPMTUD receiver support: One case is when a sender supports * No DPLPMTUD receiver support: One case is when a sender supports
this specification, but no RES Option is received from the remote this specification, but no RES Option is received from the remote
endpoint. In this example, the method is unable to discover the endpoint. In this example, the method is unable to discover the
PLPMTU. This will result in using the minimum configured PLPMTU PLPMTU. This will result in using the MIN_PLPMTU. Such a remote
(MIN_PLPMTU). Such a remote endpoint might be not configured to endpoint might be not configured to process UDP Options or might
process UDP Options or might not return a datagram with a RES not return a datagram with a RES Option for some other reason
Option for some other reason (e.g., packet loss, insufficient (e.g., packet loss, insufficient space to include the option,
space to include the option, filtering on the path, etc.). filtering on the path, etc.).
* DPLPMTUD receiver uses application datagrams: In a second case, * DPLPMTUD receiver uses application datagrams: In a second case,
both the sender and receiver support DPLPMTUD using the both the sender and receiver support DPLPMTUD using the
specification, and the receiver only returns a RES Option with the specification, and the receiver only returns a RES Option with the
next UDP datagram that is sent to the requester. Therefore, next UDP datagram that is sent to the requester. Therefore,
reception of a REQ Option does not systematically trigger a reception of a REQ Option does not systematically trigger a
response. This allows DPLPMTUD to operate when there is a flow of response. This allows DPLPMTUD to operate when there is a flow of
datagrams in both directions, provided there is periodic feedback datagrams in both directions, provided there is periodic feedback
(e.g., one acknowledgement packet per RTT). It requires the (e.g., one acknowledgement packet per RTT). It requires the
PLPMTU at the receiver to be sufficiently large enough that the PLPMTU at the receiver to be sufficiently large enough that the
RES Option can be included in the feedback packets that are sent RES Option can be included in the feedback packets that are sent
in the return direction. This method avoids opportunities to in the return direction. This method avoids opportunities to
misuse the method as a DoS attack. However, when there is a low misuse the method as a DoS attack. However, when there is a low
rate of transmission (or no datagrams are sent) in the return rate of transmission (or no datagrams are sent) in the return
direction, this will prevent prompt delivery of the RES Option. direction, this will prevent prompt delivery of the RES Option.
At the DPLPMTUD sender, this results in probe packets failing to At the DPLPMTUD sender, this results in probe packets failing to
be acknowledged in time and could result in a smaller PLPMTU than be acknowledged in time and could result in a smaller PLPMTU than
is actually supported by the path or in using the minimum is actually supported by the path or in using the MIN_PLPMTU.
configured PLPMTU (MIN_PLPMTU).
* Unidirectional transfer: Another case is where an application only * Unidirectional transfer: Another case is where an application only
transfers data in one direction (or predominantly in one transfers data in one direction (or predominantly in one
direction). In this case, the wait at the receiver for a datagram direction). In this case, the wait at the receiver for a datagram
to be queued before returning a RES Option could easily result in to be queued before returning a RES Option could easily result in
a probe timeout at the DPLPMTUD sender. In this case, DPLPMTUD a probe timeout at the DPLPMTUD sender. In this case, DPLPMTUD
could allow exchanging datagrams without a payload (as discussed could allow exchanging datagrams without a payload (as discussed
in earlier sections) to return the RES Option. in earlier sections) to return the RES Option.
* DPLPMTUD receiver permitted to send responses in UDP datagrams * DPLPMTUD receiver permitted to send responses in UDP datagrams
 End of changes. 10 change blocks. 
32 lines changed or deleted 31 lines changed or added

This html diff was produced by rfcdiff 1.48.