diff --git a/draft-ietf-quic-transport.md b/draft-ietf-quic-transport.md index 14c7823f06..1ef93c52b4 100644 --- a/draft-ietf-quic-transport.md +++ b/draft-ietf-quic-transport.md @@ -960,26 +960,21 @@ connection ID for the duration of the connection or until its peer invalidates the connection ID via a RETIRE_CONNECTION_ID frame ({{frame-retire-connection-id}}). -Endpoints store received connection IDs for future use. An endpoint that -receives excessive connection IDs MAY discard those it cannot store without -sending a RETIRE_CONNECTION_ID frame. An endpoint that issues connection IDs -cannot expect its peer to store and use all issued connection IDs. - An endpoint SHOULD ensure that its peer has a sufficient number of available and -unused connection IDs. While each endpoint independently chooses how many -connection IDs to issue, endpoints SHOULD provide and maintain at least eight -connection IDs. The endpoint SHOULD do this by supplying a new connection ID -when a connection ID is retired by its peer or when the endpoint receives a -packet with a previously unused connection ID. However, it MAY limit the -frequency or the total number of connection IDs issued for each connection to -avoid the risk of running out of connection IDs (see {{reset-token}}). +unused connection IDs. Endpoints store received connection IDs for future use. +An endpoint uses the active_connection_id_limit transport parameter to advertise +the number of connection IDs it can store for future use. An endpoint SHOULD NOT +provide more connection IDs than the peer's limit. If an endpoint has provided +its peer with the maximum number of connection IDs, it SHOULD only provide a new +connection ID when the peer retires one. An endpoint MAY limit the frequency or +the total number of connection IDs issued for each connection to avoid the risk +of running out of connection IDs (see {{reset-token}}). An endpoint that initiates migration and requires non-zero-length connection IDs SHOULD ensure that the pool of connection IDs available to its peer allows the peer to use a new connection ID on migration, as the peer will close the connection if the pool is exhausted. - ### Consuming and Retiring Connection IDs {#retiring-cids} An endpoint can change the connection ID it uses for a peer to another available @@ -1407,9 +1402,10 @@ specify whether they MUST, MAY, or MUST NOT be stored for 0-RTT. A client need not store a transport parameter it cannot process. A client MUST NOT use remembered values for the following parameters: -original_connection_id, preferred_address, stateless_reset_token, and -ack_delay_exponent. The client MUST use the server's new values in the -handshake instead, and absent new values from the server, the default value. +original_connection_id, preferred_address, stateless_reset_token, +ack_delay_exponent and active_connection_id_limit. The client MUST use the +server's new values in the handshake instead, and absent new values from the +server, the default value. A client that attempts to send 0-RTT data MUST remember all other transport parameters used by the server. The server can remember these transport @@ -4024,6 +4020,7 @@ language from Section 3 of {{!TLS13=RFC8446}}. max_ack_delay(11), disable_migration(12), preferred_address(13), + active_connection_id_limit(14), (65535) } TransportParameterId; @@ -4195,6 +4192,12 @@ A client MUST NOT include an original connection ID, a stateless reset token, or a preferred address. A server MUST treat receipt of any of these transport parameters as a connection error of type TRANSPORT_PARAMETER_ERROR. +active_connection_id_limit (0x000e): + +: The maximum number of connection IDs from the peer that an endpoint is willing + to store. This value includes only connection IDs sent in NEW_CONNECTION_ID + frames. If this parameter is absent, a default of 0 is assumed. + # Frame Types and Formats {#frame-formats} @@ -5434,6 +5437,7 @@ The initial contents of this registry are shown in {{iana-tp-table}}. | 0x000b | max_ack_delay | {{transport-parameter-definitions}} | | 0x000c | disable_migration | {{transport-parameter-definitions}} | | 0x000d | preferred_address | {{transport-parameter-definitions}} | +| 0x000e | active_connection_id_limit | {{transport-parameter-definitions}} | {: #iana-tp-table title="Initial QUIC Transport Parameters Entries"} ## QUIC Frame Type Registry {#iana-frames}