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 212 ¶ | skipping to change at line 213 ¶ | |||
^ | Messages (with UDP Options) | ^ | Messages (with UDP Options) | |||
| | Send/Receive: Probes with Options | | | Send/Receive: Probes with Options | |||
| receive send v Events: ICMP, Interface MTU, etc. | | receive send v Events: ICMP, Interface MTU, etc. | |||
+---+----------------------------+ | +---+----------------------------+ | |||
| UDP Options Transport | | | UDP Options Transport | | |||
+---------------------------+----+ | +---------------------------+----+ | |||
^ | Datagrams (with UDP Options) | ^ | Datagrams (with UDP Options) | |||
| | Fragmented Datagrams with UDP Options | | | Fragmented Datagrams with UDP Options | |||
| receive send v Events: ICMP, Interface MTU, etc. | | receive send v Events: ICMP, Interface MTU, etc. | |||
Note: UDP allows an Upper Layer protocol to send datagrams with or | | Note: UDP allows an Upper Layer protocol to send datagrams with | |||
without payload data (with or without UDP Options). These are | | or without payload data (with or without UDP Options). These | |||
delivered across the network to the remote Upper Layer. When | | are delivered across the network to the remote Upper Layer. | |||
DPLPMTUD is implemented within the UDP transport service, probe | | When DPLPMTUD is implemented within the UDP transport service, | |||
packets that include a REQ or RES UDP Option can be sent with no UDP | | probe packets that include a REQ or RES UDP Option can be sent | |||
payload. In this case, these probe packets were not generated by a | | with no UDP payload. In this case, these probe packets were | |||
sending application; therefore, the corresponding received datagrams | | not generated by a sending application; therefore, the | |||
are not delivered to the remote application. | | corresponding received datagrams are not delivered to the | |||
| remote application. | ||||
When DPLPMTUD is instead implemented by an Upper Layer protocol, the | When DPLPMTUD is instead implemented by an Upper Layer protocol, the | |||
format and content of probe packets are determined by the Upper Layer | format and content of probe packets are determined by the Upper Layer | |||
protocol. This design is also permitted to use the REQ and RES | protocol. This design is also permitted to use the REQ and RES | |||
Options provided by UDP Options. | Options provided by UDP Options. | |||
If DPLPMTUD is active at more than one layer, then the values of the | 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 | tokens used in REQ Options need to be coordinated with any values | |||
used for other DPLPMTUD probe packets to ensure that each probe | used for other DPLPMTUD probe packets to ensure that each probe | |||
packet can be identified by a unique token. When configurable, a | packet can be identified by a unique token. When configurable, a | |||
skipping to change at line 317 ¶ | skipping to change at line 319 ¶ | |||
datagram with the REQ Option. | datagram with the REQ Option. | |||
The operation of DPLPMTUD can depend on the support at the remote UDP | The operation of DPLPMTUD can depend on the support at the remote UDP | |||
Options endpoint, the way in which DPLPMTUD is implemented, and in | Options endpoint, the way in which DPLPMTUD is implemented, and in | |||
some cases, the application data that is exchanged over the UDP | some cases, the application data that is exchanged over the UDP | |||
transport service. When UDP Options is not supported by the remote | transport service. When UDP Options is not supported by the remote | |||
receiver, DPLPMTUD will be unable to confirm the path or to discover | receiver, DPLPMTUD will be unable to confirm the path or to discover | |||
the PLPMTU. This will result in the minimum configured PLPMTU | the PLPMTU. This will result in the minimum configured PLPMTU | |||
(MIN_PLPMTU). More explanation of usage is provided in Section 6. | (MIN_PLPMTU). More explanation of usage is provided in Section 6. | |||
Note: A receiver that only responds when there is a datagram queued | | Note: A receiver that only responds when there is a datagram | |||
for transmission by the Upper Layer could potentially receive | | queued for transmission by the Upper Layer could potentially | |||
multiple datagrams with a REQ Option before it can respond. When | | receive multiple datagrams with a REQ Option before it can | |||
sent, the RES Option will only acknowledge the latest received token | | respond. When sent, the RES Option will only acknowledge the | |||
value. A sender would then conclude that any earlier REQ Options | | latest received token value. A sender would then conclude that | |||
were not successfully received. However, DPLPMTUD does not usually | | any earlier REQ Options were not successfully received. | |||
result in sending more than one probe packet per timeout interval, | | However, DPLPMTUD does not usually result in sending more than | |||
and a delay in responding will already have been treated as a failed | | one probe packet per timeout interval, and a delay in | |||
probe attempt. Therefore, this does not significantly impact | | responding will already have been treated as a failed probe | |||
performance, although a more prompt response would have resulted in | | attempt. Therefore, this does not significantly impact | |||
DPLPMTUD recording reception of all probe packets. | | performance, although a more prompt response would have | |||
| resulted in DPLPMTUD recording reception of all probe packets. | ||||
4. DPLPMTUD Sender Procedures for UDP Options | 4. DPLPMTUD Sender Procedures for UDP Options | |||
DPLPMTUD utilizes three types of probe. These are described in the | DPLPMTUD utilizes three types of probe. These are described in the | |||
following sections: | following sections: | |||
* Probes to confirm the path can support the BASE_PLPMTU | * Probes to confirm the path can support the BASE_PLPMTU | |||
(Section 5.1.4 of [RFC8899]). | (Section 5.1.4 of [RFC8899]). | |||
* Probes to detect whether the path can support a larger PLPMTU. | * Probes to detect whether the path can support a larger PLPMTU. | |||
skipping to change at line 372 ¶ | skipping to change at line 375 ¶ | |||
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 513 ¶ | |||
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. 12 change blocks. | ||||
51 lines changed or deleted | 52 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |