target = "https://www.rfc-editor.org/rfc/rfc8899#section-5.2" # 5.2. State Machine # # A state machine for DPLPMTUD is depicted in Figure 5. If multipath # or multihoming is supported, a state machine is needed for each path. # # Note: Not all changes are shown to simplify the diagram. # # | | # | Start | PL indicates loss # | | of connectivity # v v # +---------------+ +---------------+ # | DISABLED | | ERROR | # +---------------+ PROBE_TIMER expiry: +---------------+ # | PL indicates PROBE_COUNT = MAX_PROBES or ^ | # | connectivity PTB: PL_PTB_SIZE < BASE_PLPMTU | | # +--------------------+ +------------------+ | # | | | # v | BASE_PLPMTU Probe | # +---------------+ acked | # | BASE |--------------------->+ # +---------------+ | # ^ | ^ ^ | # Black hole detected | | | | Black hole detected | # +--------------------+ | | +--------------------+ | # | +----+ | | # | PROBE_TIMER expiry: | | # | PROBE_COUNT < MAX_PROBES | | # | | | # | PMTU_RAISE_TIMER expiry | | # | +-----------------------------------------+ | | # | | | | | # | | v | v # +---------------+ +---------------+ # |SEARCH_COMPLETE| | SEARCHING | # +---------------+ +---------------+ # | ^ ^ | | ^ # | | | | | | # | | +-----------------------------------------+ | | # | | MAX_PLPMTU Probe acked or | | # | | PROBE_TIMER expiry: PROBE_COUNT = MAX_PROBES or | | # +----+ PTB: PL_PTB_SIZE = PLPMTU +----+ # CONFIRMATION_TIMER expiry: PROBE_TIMER expiry: # PROBE_COUNT < MAX_PROBES or PROBE_COUNT < MAX_PROBES or # PLPMTU Probe acked Probe acked or PTB: # PLPMTU < PL_PTB_SIZE < PROBED_SIZE # # Figure 5: State Machine for Datagram PLPMTUD # # The following states are defined: # # DISABLED: The DISABLED state is the initial state before probing has # started. It is also entered from any other state, when the PL # indicates loss of connectivity. This state is left once the PL # indicates connectivity to the remote PL. When transitioning to # the BASE state, a probe packet of size BASE_PLPMTU can be sent # immediately. # # BASE: The BASE state is used to confirm that the BASE_PLPMTU size is # supported by the network path and is designed to allow an # application to continue working when there are transient # reductions in the actual PMTU. It also seeks to avoid long # periods when a sender searching for a larger PLPMTU is unaware # that packets are not being delivered due to a packet or ICMP black # hole. # # On entry, the PROBED_SIZE is set to the BASE_PLPMTU size, and the # PROBE_COUNT is set to zero. # # Each time a probe packet is sent, the PROBE_TIMER is started. The # state is exited when the probe packet is acknowledged, and the PL # sender enters the SEARCHING state. # # The state is also left when the PROBE_COUNT reaches MAX_PROBES or # a received PTB message is validated. This causes the PL sender to # enter the ERROR state. # # SEARCHING: The SEARCHING state is the main probing state. This # state is entered when probing for the BASE_PLPMTU completes. # # Each time a probe packet is acknowledged, the PROBE_COUNT is set # to zero, the PLPMTU is set to the PROBED_SIZE, and then the # PROBED_SIZE is increased using the search algorithm (as described # in Section 5.3). # # When a probe packet is sent and not acknowledged within the period # of the PROBE_TIMER, the PROBE_COUNT is incremented, and a new # probe packet is transmitted. # # The state is exited to enter SEARCH_COMPLETE when the PROBE_COUNT # reaches MAX_PROBES, a validated PTB is received that corresponds # to the last successfully probed size (PL_PTB_SIZE = PLPMTU), or a # probe of size MAX_PLPMTU is acknowledged (PLPMTU = MAX_PLPMTU). # # When a black hole is detected in the SEARCHING state, this causes # the PL sender to enter the BASE state. # # SEARCH_COMPLETE: The SEARCH_COMPLETE state indicates that a search # has completed. This is the normal maintenance state, where the PL # is not probing to update the PLPMTU. DPLPMTUD remains in this # state until either the PMTU_RAISE_TIMER expires or a black hole is # detected. # # When DPLPMTUD uses an unacknowledged PL and is in the # SEARCH_COMPLETE state, a CONFIRMATION_TIMER periodically resets # the PROBE_COUNT and schedules a probe packet with the size of the # PLPMTU. If MAX_PROBES successive PLPMTUD-sized probes fail to be # acknowledged, the method enters the BASE state. When used with an # acknowledged PL (e.g., SCTP), DPLPMTUD SHOULD NOT continue to # generate PLPMTU probes in this state. # # ERROR: The ERROR state represents the case where either the network # path is not known to support a PLPMTU of at least the BASE_PLPMTU # size or when there is contradictory information about the network # path that would otherwise result in excessive variation in the MPS # signaled to the higher layer. The state implements a method to # mitigate oscillation in the state-event engine. It signals a # conservative value of the MPS to the higher layer by the PL. The # state is exited when packet probes no longer detect the error. # The PL sender then enters the SEARCHING state. # # Implementations are permitted to enable endpoint fragmentation if # the DPLPMTUD is unable to validate MIN_PLPMTU within PROBE_COUNT # probes. If DPLPMTUD is unable to validate MIN_PLPMTU, the # implementation will transition to the DISABLED state. # # Note: MIN_PLPMTU could be identical to BASE_PLPMTU, simplifying # the actions in this state. [[spec]] level = "SHOULD" quote = ''' When used with an acknowledged PL (e.g., SCTP), DPLPMTUD SHOULD NOT continue to generate PLPMTU probes in this state. '''