target = "https://www.rfc-editor.org/rfc/rfc9000#section-7.4.1" # 7.4.1. Values of Transport Parameters for 0-RTT # # Using 0-RTT depends on both client and server using protocol # parameters that were negotiated from a previous connection. To # enable 0-RTT, endpoints store the values of the server transport # parameters with any session tickets it receives on the connection. # Endpoints also store any information required by the application # protocol or cryptographic handshake; see Section 4.6 of [QUIC-TLS]. # The values of stored transport parameters are used when attempting # 0-RTT using the session tickets. # # Remembered transport parameters apply to the new connection until the # handshake completes and the client starts sending 1-RTT packets. # Once the handshake completes, the client uses the transport # parameters established in the handshake. Not all transport # parameters are remembered, as some do not apply to future connections # or they have no effect on the use of 0-RTT. # # The definition of a new transport parameter (Section 7.4.2) MUST # specify whether storing the transport parameter for 0-RTT is # mandatory, optional, or prohibited. A client need not store a # transport parameter it cannot process. # # A client MUST NOT use remembered values for the following parameters: # ack_delay_exponent, max_ack_delay, initial_source_connection_id, # original_destination_connection_id, preferred_address, # retry_source_connection_id, and stateless_reset_token. The client # MUST use the server's new values in the handshake instead; if the # server does not provide new values, the default values are used. # # A client that attempts to send 0-RTT data MUST remember all other # transport parameters used by the server that it is able to process. # The server can remember these transport parameters or can store an # integrity-protected copy of the values in the ticket and recover the # information when accepting 0-RTT data. A server uses the transport # parameters in determining whether to accept 0-RTT data. # # If 0-RTT data is accepted by the server, the server MUST NOT reduce # any limits or alter any values that might be violated by the client # with its 0-RTT data. In particular, a server that accepts 0-RTT data # MUST NOT set values for the following parameters (Section 18.2) that # are smaller than the remembered values of the parameters. # # * active_connection_id_limit # # * initial_max_data # # * initial_max_stream_data_bidi_local # # * initial_max_stream_data_bidi_remote # # * initial_max_stream_data_uni # # * initial_max_streams_bidi # # * initial_max_streams_uni # # Omitting or setting a zero value for certain transport parameters can # result in 0-RTT data being enabled but not usable. The applicable # subset of transport parameters that permit the sending of application # data SHOULD be set to non-zero values for 0-RTT. This includes # initial_max_data and either (1) initial_max_streams_bidi and # initial_max_stream_data_bidi_remote or (2) initial_max_streams_uni # and initial_max_stream_data_uni. # # A server might provide larger initial stream flow control limits for # streams than the remembered values that a client applies when sending # 0-RTT. Once the handshake completes, the client updates the flow # control limits on all sending streams using the updated values of # initial_max_stream_data_bidi_remote and initial_max_stream_data_uni. # # A server MAY store and recover the previously sent values of the # max_idle_timeout, max_udp_payload_size, and disable_active_migration # parameters and reject 0-RTT if it selects smaller values. Lowering # the values of these parameters while also accepting 0-RTT data could # degrade the performance of the connection. Specifically, lowering # the max_udp_payload_size could result in dropped packets, leading to # worse performance compared to rejecting 0-RTT data outright. # # A server MUST reject 0-RTT data if the restored values for transport # parameters cannot be supported. # # When sending frames in 0-RTT packets, a client MUST only use # remembered transport parameters; importantly, it MUST NOT use updated # values that it learns from the server's updated transport parameters # or from frames received in 1-RTT packets. Updated values of # transport parameters from the handshake apply only to 1-RTT packets. # For instance, flow control limits from remembered transport # parameters apply to all 0-RTT packets even if those values are # increased by the handshake or by frames sent in 1-RTT packets. A # server MAY treat the use of updated transport parameters in 0-RTT as # a connection error of type PROTOCOL_VIOLATION. [[spec]] level = "MUST" quote = ''' The definition of a new transport parameter (Section 7.4.2) MUST specify whether storing the transport parameter for 0-RTT is mandatory, optional, or prohibited. ''' [[spec]] level = "MUST" quote = ''' A client MUST NOT use remembered values for the following parameters: ack_delay_exponent, max_ack_delay, initial_source_connection_id, original_destination_connection_id, preferred_address, retry_source_connection_id, and stateless_reset_token. ''' [[spec]] level = "MUST" quote = ''' The client MUST use the server's new values in the handshake instead; if the server does not provide new values, the default values are used. ''' [[spec]] level = "MUST" quote = ''' A client that attempts to send 0-RTT data MUST remember all other transport parameters used by the server that it is able to process. ''' [[spec]] level = "MUST" quote = ''' If 0-RTT data is accepted by the server, the server MUST NOT reduce any limits or alter any values that might be violated by the client with its 0-RTT data. ''' [[spec]] level = "MUST" quote = ''' In particular, a server that accepts 0-RTT data MUST NOT set values for the following parameters (Section 18.2) that are smaller than the remembered values of the parameters. ''' [[spec]] level = "SHOULD" quote = ''' The applicable subset of transport parameters that permit the sending of application data SHOULD be set to non-zero values for 0-RTT. ''' [[spec]] level = "MAY" quote = ''' A server MAY store and recover the previously sent values of the max_idle_timeout, max_udp_payload_size, and disable_active_migration parameters and reject 0-RTT if it selects smaller values. ''' [[spec]] level = "MUST" quote = ''' A server MUST reject 0-RTT data if the restored values for transport parameters cannot be supported. ''' [[spec]] level = "MUST" quote = ''' When sending frames in 0-RTT packets, a client MUST only use remembered transport parameters; importantly, it MUST NOT use updated values that it learns from the server's updated transport parameters or from frames received in 1-RTT packets. ''' [[spec]] level = "MUST" quote = ''' When sending frames in 0-RTT packets, a client MUST only use remembered transport parameters; importantly, it MUST NOT use updated values that it learns from the server's updated transport parameters or from frames received in 1-RTT packets. ''' [[spec]] level = "MAY" quote = ''' A server MAY treat the use of updated transport parameters in 0-RTT as a connection error of type PROTOCOL_VIOLATION. '''