quicwg / multipath

In-progress version of draft-ietf-quic-multipath
Other
49 stars 17 forks source link

Retiring paths doesn't allow new ones #344

Closed MikeBishop closed 1 month ago

MikeBishop commented 1 month ago

The draft currently says:

If the transport parameter "initial_max_paths" is negotiated as N, and the client is already actively using N paths, the limit is reached. If the client wants to start a new path, it has to retire one of the established paths.

Retiring a path does not immediately allow the endpoint to open a new one or guarantee that the peer will issue a new path ID for its use. I would either remove the client instructions or address it alongside #342 with a suggestion to send whatever signal is defined there.

MikeBishop commented 1 month ago

Actually, per @mirjak's comment in #324, I might have misunderstood how MAX_PATHS is interpreted. In that case, I strongly support sending the maximum Path ID which a peer is willing to receive, lest we have another Rapid Reset design on our hands.

huitema commented 1 month ago

The design is clearly "maximum path ID", even if the name "MAX_PATHS" brings some confusion. We debated for some time, and we decided to keep the MAX_PATHS terminology, and treat it pretty much like MAX_STREAMS. Just like RFC9000 says "Only streams with a stream ID less than (max_streams 4 + first_stream_id_of_type) can be opened", we have "Only connection ID with a path ID less than max_paths can be sent in MP_NEW_CONNECTION_ID frames". Or, if we go for the even/odd split, "Only connection ID with a path ID less than (max_paths 2 + first_path_id_of_type) can be sent in MP_NEW_CONNECTION_ID frames".

A difference with streams is that both endpoints need to send connection ID for every path_id, so for each endpoint "max_paths" is "the max_paths value advertised by the peer".

mirjak commented 1 month ago

@huitema actually initial_max_path is defined as a maximum count and MAX_PATH is defined inconsistently. We really need to fix that but let's discuss that in issue #324

mirjak commented 1 month ago

354 removes this sentence. This sentence was talk about "active_connection_ids" before the explicit path Id merge. However, there is no relation between the max number of CIDs and the number of paths anymore, therefore this sentence should be removed.

mirjak commented 1 month ago

As this sentence was removed for now, I'm closing the issue.