Re: [quicwg/base-drafts] Better describe the use of Preferred Address (#3354)

Martin Thomson <notifications@github.com> Mon, 20 January 2020 05:42 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 1C712120099 for <quic-issues@ietfa.amsl.com>; Sun, 19 Jan 2020 21:42:50 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -8
X-Spam-Level:
X-Spam-Status: No, score=-8 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, HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1, RCVD_IN_DNSWL_HI=-5, SPF_HELO_NONE=0.001, SPF_PASS=-0.001] 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 dBmdwbFzXj8T for <quic-issues@ietfa.amsl.com>; Sun, 19 Jan 2020 21:42:46 -0800 (PST)
Received: from out-24.smtp.github.com (out-24.smtp.github.com [192.30.252.207]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 308D3120077 for <quic-issues@ietf.org>; Sun, 19 Jan 2020 21:42:46 -0800 (PST)
Received: from github-lowworker-39ac79b.ac4-iad.github.net (github-lowworker-39ac79b.ac4-iad.github.net [10.52.18.15]) by smtp.github.com (Postfix) with ESMTP id 542FF6A050B for <quic-issues@ietf.org>; Sun, 19 Jan 2020 21:42:45 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=github.com; s=pf2014; t=1579498965; bh=S1XiisrfACAYIsYOJu9y3GtwibGYd7in1qHBZztIzMI=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:List-ID: List-Archive:List-Post:List-Unsubscribe:From; b=lcVk+s3IhxynKDLjTGiZBdO4+Dk6L8ngfN/HY7VK8koVIkGB9fEs5amYu4G+q/CKb k0P7Dcg6P1OKClfXA+2ttmPhsDCo2pRBYO0qbWXHf88URUjZnF8K32sZyYXwF10UW9 j3CK9oUo/sHdi4v608kkFMKcgph4gUsYfOLbcgU8=
Date: Sun, 19 Jan 2020 21:42:45 -0800
From: Martin Thomson <notifications@github.com>
Reply-To: quicwg/base-drafts <reply+AFTOJKYRB6XAFLDVU5OB7AN4GJYFLEVBNHHCBWRIJQ@reply.github.com>
To: quicwg/base-drafts <base-drafts@noreply.github.com>
Cc: Subscribed <subscribed@noreply.github.com>
Message-ID: <quicwg/base-drafts/pull/3354/review/345085453@github.com>
In-Reply-To: <quicwg/base-drafts/pull/3354@github.com>
References: <quicwg/base-drafts/pull/3354@github.com>
Subject: Re: [quicwg/base-drafts] Better describe the use of Preferred Address (#3354)
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary="--==_mimepart_5e253dd5445d2_41d83fde112cd95c242674"; charset="UTF-8"
Content-Transfer-Encoding: 7bit
Precedence: list
X-GitHub-Sender: martinthomson
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/2fkKNNWCrWY1nPuVoIPKRa2us3o>
X-BeenThere: quic-issues@ietf.org
X-Mailman-Version: 2.1.29
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: Mon, 20 Jan 2020 05:42:50 -0000

martinthomson commented on this pull request.

Thanks for doing this.  This text certainly needed a few refinements.

> @@ -2194,11 +2194,13 @@ linked by any other entity.
 At any time, endpoints MAY change the Destination Connection ID they send to a
 value that has not been used on another path.
 
-An endpoint MUST use a new connection ID if it initiates connection migration as
-described in {{initiating-migration}} or probes a new network path as described
-in {{probing}}.  An endpoint MUST use a new connection ID in response to a
-change in the address of a peer if the packet with the new peer address uses an
-active connection ID that has not been previously used by the peer.
+An endpoint MUST use a new connection ID when it initiates connection migration
+as described in {{initiating-migration}} or {{preferred-address}}, or when it
+probes a new network path as described in {{probing}}, and MUST NOT reuse

The run-on sentence here could be two sentences.

```suggestion
probes a new network path as described in {{probing}}. Endpoints MUST NOT reuse
```

...but I'm not seeing what the new content here does.  It appears to just be a restatement of the previous clause.

> @@ -1036,9 +1036,9 @@ be used again and requests that the peer replace it with a new connection ID
 using a NEW_CONNECTION_ID frame.
 
 As discussed in {{migration-linkability}}, each connection ID MUST be used on
-packets sent from only one local address.  An endpoint that migrates away from a
-local address SHOULD retire all connection IDs used on that address once it no
-longer plans to use that address.
+packets sent from only one local address, and MUST NOT be used across multiple
+paths that are opened intentionally.  An endpoint SHOULD retire connection IDs
+as they become unusable.

This new text is less accurate.  It is potentially always possible to reuse connection IDs, but what matters is whether the endpoint forsees use of the connection ID.  The original text is probably not as good as it could be, but that seems unrelated to the stated goal of the PR.

As this is a restatement of the original text in another section, I would prefer to keep this terse.  In fact, I would not use normative language and instead say:

> As discussed in {{blah}}, endpoints limit the use of a connection ID to a single network path where possible.  Endpoints SHOULD retire connection IDs when no longer actively using the network path on which the connection ID was used.

>  
+When the client finishes migrating to the preferred address, it retires the
+connection ID that was used for the original path ({{retiring-cids}}).
+Similarly, a client that continues using the original server address SHOULD
+retire the connection ID provided by the preferred_address transport parameter.
+Retirement of either of these connection IDs notifies the server of the
+address the client has chosen.

This creates a much stronger inference than I think we ever formally documented, though it is a reasonable one for sure.  If your intent is that the server never see data on the old path, then say that instead:

> Once a client has migrated successfully to a network path that uses a server preferred address, it MUST NOT migrate to a path using the address that was used during connection establishment.

Otherwise, the inference you are giving the server to make here is without any support.  Once you say this, you can drop this text.

> @@ -4635,8 +4642,12 @@ preferred_address (0x000d):
   transport parameter is only sent by a server. Servers MAY choose to only send
   a preferred address of one address family by sending an all-zero address and
   port (0.0.0.0:0 or ::.0) for the other family. IP addresses are encoded in
-  network byte order. The CID Length field contains the length of the
-  Connection ID field.
+  network byte order. The Connection ID field and the Stateless Reset Token

New paragraph here please.
```suggestion
  network byte order.
  
  The Connection ID field and the Stateless Reset Token
```

> @@ -4635,8 +4642,12 @@ preferred_address (0x000d):
   transport parameter is only sent by a server. Servers MAY choose to only send
   a preferred address of one address family by sending an all-zero address and
   port (0.0.0.0:0 or ::.0) for the other family. IP addresses are encoded in
-  network byte order. The CID Length field contains the length of the
-  Connection ID field.
+  network byte order. The Connection ID field and the Stateless Reset Token
+  field contain the alternative connection ID that is assigned the sequence

```suggestion
  field contain an alternative connection ID that has a sequence
```

> @@ -4635,8 +4642,12 @@ preferred_address (0x000d):
   transport parameter is only sent by a server. Servers MAY choose to only send
   a preferred address of one address family by sending an all-zero address and
   port (0.0.0.0:0 or ::.0) for the other family. IP addresses are encoded in
-  network byte order. The CID Length field contains the length of the
-  Connection ID field.
+  network byte order. The Connection ID field and the Stateless Reset Token
+  field contain the alternative connection ID that is assigned the sequence
+  number of one ({{issue-cid}}). Having them bundled with the preferred address

```suggestion
  number of 1 ({{issue-cid}}). Having these values bundled with the preferred address
```

> @@ -4635,8 +4642,12 @@ preferred_address (0x000d):
   transport parameter is only sent by a server. Servers MAY choose to only send
   a preferred address of one address family by sending an all-zero address and
   port (0.0.0.0:0 or ::.0) for the other family. IP addresses are encoded in
-  network byte order. The CID Length field contains the length of the
-  Connection ID field.
+  network byte order. The Connection ID field and the Stateless Reset Token
+  field contain the alternative connection ID that is assigned the sequence
+  number of one ({{issue-cid}}). Having them bundled with the preferred address
+  ensures that there will be at least one unused active connection ID when the
+  client initiates migration to the preferred address. The CID Length field
+  contains the length of the Connection ID field.

I'd drop the last sentence.

> @@ -2251,16 +2253,21 @@ transport parameter in the TLS handshake.
 Servers MAY communicate a preferred address of each address family (IPv4 and
 IPv6) to allow clients to pick the one most suited to their network attachment.
 
-Once the handshake is finished, the client SHOULD select one of the two
+Once the handshake is confirmed, the client SHOULD select one of the two

šŸ‘ Do we need a citation here too?

-- 
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/3354#pullrequestreview-345085453