[quicwg/base-drafts] Restore CID sequence numbers (#1465)

Mike Bishop <notifications@github.com> Wed, 20 June 2018 21:35 UTC

Return-Path: <noreply@github.com>
X-Original-To: quic-issues@ietfa.amsl.com
Delivered-To: quic-issues@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 65B79130E34 for <quic-issues@ietfa.amsl.com>; Wed, 20 Jun 2018 14:35:40 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -8.01
X-Spam-Level:
X-Spam-Status: No, score=-8.01 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1, RCVD_IN_DNSWL_HI=-5, SPF_PASS=-0.001, T_DKIMWL_WL_HIGH=-0.01] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=github.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id vYtja5WAtTR8 for <quic-issues@ietfa.amsl.com>; Wed, 20 Jun 2018 14:35:38 -0700 (PDT)
Received: from out-5.smtp.github.com (out-5.smtp.github.com [192.30.252.196]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 1AE24130E18 for <quic-issues@ietf.org>; Wed, 20 Jun 2018 14:35:38 -0700 (PDT)
Date: Wed, 20 Jun 2018 14:35:37 -0700
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=github.com; s=pf2014; t=1529530537; bh=1DjEyoCg5BkTCeGAkzooJBnHCMjw14AXANp4dAPvRmY=; h=Date:From:Reply-To:To:Cc:Subject:List-ID:List-Archive:List-Post: List-Unsubscribe:From; b=AbCjmaAGq/kRVviWwBRw0A3zbqEUsVKmjykscV9Im0I1ab4BSCwVyZUmQNmaUoVW4 osYXmHKanKPnEmo9cf4+ToFF8Tg/mJd5vXurG2WfdEShftdbzDHMnMNuBlbyaDQCL9 gDkHh+8J2sz/5BfJFCwEa9+SRwkPlFn8KMKvKC3c=
From: Mike Bishop <notifications@github.com>
Reply-To: quicwg/base-drafts <reply+0166e4ab0b8df248cfa0b5bdf433fdf6ab4537f10df2803a92cf0000000117428aa992a169ce13ec6080@reply.github.com>
To: quicwg/base-drafts <base-drafts@noreply.github.com>
Cc: Subscribed <subscribed@noreply.github.com>
Message-ID: <quicwg/base-drafts/pull/1465@github.com>
Subject: [quicwg/base-drafts] Restore CID sequence numbers (#1465)
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary="--==_mimepart_5b2ac8a96d96_114c2afdc905ef503393b"; charset="UTF-8"
Content-Transfer-Encoding: 7bit
Precedence: list
X-GitHub-Sender: MikeBishop
X-GitHub-Recipient: quic-issues
X-GitHub-Reason: subscribed
X-Auto-Response-Suppress: All
X-GitHub-Recipient-Address: quic-issues@ietf.org
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic-issues/gubQWocRx1yBVnLgq0UigUda5IM>
X-BeenThere: quic-issues@ietf.org
X-Mailman-Version: 2.1.26
List-Id: Notification list for GitHub issues related to the QUIC WG <quic-issues.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic-issues>, <mailto:quic-issues-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic-issues/>
List-Post: <mailto:quic-issues@ietf.org>
List-Help: <mailto:quic-issues-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic-issues>, <mailto:quic-issues-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 20 Jun 2018 21:35:41 -0000

After trying to find a better way to manage CID changes, probing, etc. I concluded that what we had before and removed is a superior place to start than anything else I'm coming up with.

The result of this PR is that, while we no longer have packet number gaps (so #1280 is no longer an issue), the sequence of CIDs issued by each endpoint is once again ordered.  On each path (local address), you know the sequence number of the CID you're currently using, and you can recognize the sequence number of the CID you're currently receiving (because you assigned it).

Fixes #1452 by requiring that each CID change on a path move to a CID with a greater sequence number; you move to the CID with the matching sequence number if it's usable, but if it's not, you move to something with a higher sequence number.  That will force your peer to meet you on that sequence number instead, and either way you land in equilibrium on each path.

This improves, but doesn't totally fix, the two problems discussed on #1464:
- You can forget the old CIDs you're allowed to use at any time that's convenient to you -- you just won't use them.  Because the CID sequence must advance per path, you can forget old CIDs you've issued once every path has either moved past that sequence number or been abandoned.  However, there's a slight possibility that peers will have different concepts of abandoned (particularly for probing on backup paths that are never migrated to), so we might need to mint a `RETIRE_CONNECTION_IDS` frame to tell the receiver that connection IDs with a sequence before X are no longer recognized by the sender.
- Once you've moved to the CID with sequence number X, the peer knows you can't use CID X-1 on this path even if you've never used it; if you're on the last / next-to-last CID the peer issued, you need more, even if you have some old ones you could still use on a different path.  However, if you have the bad luck to use your last CID for a probe which gets dropped and you're no longer able to send on that path, you can still get stuck if your peer is only giving you one CID at a time.  This probably still requires a `REQUEST_CONNECTION_ID` frame.

While I think the design is mostly sound, this is too wordy.  I'd appreciate help making this more readable.
You can view, comment on, or merge this pull request online at:

  https://github.com/quicwg/base-drafts/pull/1465

-- Commit Summary --

  * Revert "Remove sequence number from NEW_CONNECTION_ID"
  * Require CID sequence number ratcheting
  * Prefer equality

-- File Changes --

    M draft-ietf-quic-transport.md (46)

-- Patch Links --

https://github.com/quicwg/base-drafts/pull/1465.patch
https://github.com/quicwg/base-drafts/pull/1465.diff

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/1465