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