target = "https://www.rfc-editor.org/rfc/rfc9000#section-8.2.1" # 8.2.1. Initiating Path Validation # # To initiate path validation, an endpoint sends a PATH_CHALLENGE frame # containing an unpredictable payload on the path to be validated. # # An endpoint MAY send multiple PATH_CHALLENGE frames to guard against # packet loss. However, an endpoint SHOULD NOT send multiple # PATH_CHALLENGE frames in a single packet. # # An endpoint SHOULD NOT probe a new path with packets containing a # PATH_CHALLENGE frame more frequently than it would send an Initial # packet. This ensures that connection migration is no more load on a # new path than establishing a new connection. # # The endpoint MUST use unpredictable data in every PATH_CHALLENGE # frame so that it can associate the peer's response with the # corresponding PATH_CHALLENGE. # # An endpoint MUST expand datagrams that contain a PATH_CHALLENGE frame # to at least the smallest allowed maximum datagram size of 1200 bytes, # unless the anti-amplification limit for the path does not permit # sending a datagram of this size. Sending UDP datagrams of this size # ensures that the network path from the endpoint to the peer can be # used for QUIC; see Section 14. # # When an endpoint is unable to expand the datagram size to 1200 bytes # due to the anti-amplification limit, the path MTU will not be # validated. To ensure that the path MTU is large enough, the endpoint # MUST perform a second path validation by sending a PATH_CHALLENGE # frame in a datagram of at least 1200 bytes. This additional # validation can be performed after a PATH_RESPONSE is successfully # received or when enough bytes have been received on the path that # sending the larger datagram will not result in exceeding the anti- # amplification limit. # # Unlike other cases where datagrams are expanded, endpoints MUST NOT # discard datagrams that appear to be too small when they contain # PATH_CHALLENGE or PATH_RESPONSE. [[spec]] level = "MAY" quote = ''' An endpoint MAY send multiple PATH_CHALLENGE frames to guard against packet loss. ''' [[spec]] level = "SHOULD" quote = ''' However, an endpoint SHOULD NOT send multiple PATH_CHALLENGE frames in a single packet. ''' [[spec]] level = "SHOULD" quote = ''' An endpoint SHOULD NOT probe a new path with packets containing a PATH_CHALLENGE frame more frequently than it would send an Initial packet. ''' [[spec]] level = "MUST" quote = ''' The endpoint MUST use unpredictable data in every PATH_CHALLENGE frame so that it can associate the peer's response with the corresponding PATH_CHALLENGE. ''' [[spec]] level = "MUST" quote = ''' An endpoint MUST expand datagrams that contain a PATH_CHALLENGE frame to at least the smallest allowed maximum datagram size of 1200 bytes, unless the anti-amplification limit for the path does not permit sending a datagram of this size. ''' [[spec]] level = "MUST" quote = ''' To ensure that the path MTU is large enough, the endpoint MUST perform a second path validation by sending a PATH_CHALLENGE frame in a datagram of at least 1200 bytes. ''' [[spec]] level = "MUST" quote = ''' Unlike other cases where datagrams are expanded, endpoints MUST NOT discard datagrams that appear to be too small when they contain PATH_CHALLENGE or PATH_RESPONSE. '''