Re: [quicwg/base-drafts] Required state for retaining unacked RETIRE_CONNECTION_ID frames is unbound (#3509)

Kazuho Oku <> Wed, 01 April 2020 23:38 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id B5B523A0C62 for <>; Wed, 1 Apr 2020 16:38:44 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -3.1
X-Spam-Status: No, score=-3.1 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: (amavisd-new); dkim=pass (1024-bit key)
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id n83dJfWjdthN for <>; Wed, 1 Apr 2020 16:38:43 -0700 (PDT)
Received: from ( []) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 28D803A0C61 for <>; Wed, 1 Apr 2020 16:38:43 -0700 (PDT)
Date: Wed, 01 Apr 2020 16:38:42 -0700
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=pf2014; t=1585784322; bh=zSEm4R4oADcQfEDVHgzrV23gJ/uTj5jR4NyoBAAaNac=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:List-ID: List-Archive:List-Post:List-Unsubscribe:From; b=2Z00pEIX/eeQW9QB5QmpTpwZu7UwxtK7wUjK8cdBNRFndvb6EopolSWUtpf4KzFU8 WekEzRva+a59T30/epEnTY8y6ptPufU1/WWV3csdMzgAWq4qjQ38BKa0aaASqJfsBH Dxjmi/aTOBggWQSJ0n9TRf6PFkOa/JSKKoHbTToY=
From: Kazuho Oku <>
Reply-To: quicwg/base-drafts <>
To: quicwg/base-drafts <>
Cc: Subscribed <>
Message-ID: <quicwg/base-drafts/issues/3509/>
In-Reply-To: <quicwg/base-drafts/issues/>
References: <quicwg/base-drafts/issues/>
Subject: Re: [quicwg/base-drafts] Required state for retaining unacked RETIRE_CONNECTION_ID frames is unbound (#3509)
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary="--==_mimepart_5e85260232fa6_6c253fdb97acd96c58017"; charset="UTF-8"
Content-Transfer-Encoding: 7bit
Precedence: list
X-GitHub-Sender: kazuho
X-GitHub-Recipient: quic-issues
X-GitHub-Reason: subscribed
X-Auto-Response-Suppress: All
Archived-At: <>
X-Mailman-Version: 2.1.29
List-Id: Notification list for GitHub issues related to the QUIC WG <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Wed, 01 Apr 2020 23:38:46 -0000

> I think that the idea is to reduce the set of RCID frames needed to a range of sequence numbers. You only have to remember the few exceptions for sequence numbers that are in use, sequence numbers for which you have outstanding frames, and a range of sequence numbers that require retirement.
> As long as your discretionary use is sequential, this is bounded state.

Yes, this is one method of limiting the state that is being used for retaining sequence numbers that need to be sent. And it works even when discretionary use is not sequential, as the number of "exceptions" (i.e. gaps) is bounded by max_connection_id_limit. The other assumption of using this method is that you would somehow bound the state that is used to track RCID frames being inflight. There are various ways of accomplishing that, e.g., have a limit on the number of RCID frames sent at once, track bunch of inflight RCID frames as one meta-frame.

And it is correct that the outcome would be a "lag" in this method.

The downside of this method is that it might be a disruptive change to existing implementations. It is essentially equivalent to what #3553 proposes, with the exception being that tracking RCID frames are difficult (as you track to send many).

For existing implementations, it would be easier to adopt a "leaky" method, i.e.:

* let endpoints have a counter counting on the number of sequence numbers that are retired but are yet to be acknowledged
* when a CID is being retired, if the value of the counter is below a certain threshold (i.e. 2 * max_connection_id_limit), the counter is incremented, and a RCID frame carrying the sequence number of that CID is added to the outstanding queue. If the counter was not below the threshold, no RCID frame will be sent (leak!)
* when an RCID frame is deemed lost, it will be resubmitted into the outstanding queue
* when an RCID frame is acknowledged before deemed lost, the counter is decremented
* when an RCID frame is late-acked, we do nothing

Assuming that the solution we prefer is the least-disruptive approach, I think we need to  recommend the latter. If we have distaste in the latter and prefer the former, I think we'd better switch to #3553, as it more cleanly reflects the design of the former.

You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub: