Re: ALPN and QUIC versions

Spencer Dawkins at IETF <spencerdawkins.ietf@gmail.com> Wed, 19 May 2021 21:12 UTC

Return-Path: <spencerdawkins.ietf@gmail.com>
X-Original-To: quic@ietfa.amsl.com
Delivered-To: quic@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 284203A1F48 for <quic@ietfa.amsl.com>; Wed, 19 May 2021 14:12:40 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.096
X-Spam-Level:
X-Spam-Status: No, score=-2.096 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.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 w7dUp2vT3nCe for <quic@ietfa.amsl.com>; Wed, 19 May 2021 14:12:35 -0700 (PDT)
Received: from mail-yb1-xb2a.google.com (mail-yb1-xb2a.google.com [IPv6:2607:f8b0:4864:20::b2a]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 85FFD3A1F43 for <quic@ietf.org>; Wed, 19 May 2021 14:12:35 -0700 (PDT)
Received: by mail-yb1-xb2a.google.com with SMTP id l7so19931793ybf.8 for <quic@ietf.org>; Wed, 19 May 2021 14:12:35 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=Ijh/kQfxiuDdALG/nlEbFS7CQL9/Gr0X0usVI5tuH/k=; b=Ua7oqieJlvlYt/+zReAXNpeXRJJbNrwvM+pREM3kDghlGRJ7C2NgRpz7WjXvXB0xDS c/j4oWRdticHpkxTLsh94ABzI1dfmTvBp/iICem4oEZw3OYcjt++kADk0CDlcw54cx8G EsR4mmJ83bqv5UQwR/A2iEf+MrQRtx35TppAS//7WE9guj2LXjFZzM7A3HroNFjmitlY bI5rknZsu/y3N8ulfZMMU2AmK0+YQLJ/mPhNqnRs65/1o4jSI4zYttuYpHIOtZbYZiMX Up7+dhOG/hdLpSm/5Kre80rWDuXo7CFm+9ofNZHhqs5vqu7Xz2O1tpW8qQt0LTtf59Nk XHdw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=Ijh/kQfxiuDdALG/nlEbFS7CQL9/Gr0X0usVI5tuH/k=; b=fkxq88UyPIyq58XLviJanavErOmowRNQKIpNlfARhlhBTj0u6vFJa8F4ecYIHMEkzz +ZJXMfZgqnjhhMXWUiIPvsOcJ7aeV7XtCIS27GPWDpMaAWrCGHEeMHy0egPGcGwUqTwF EntvC4Kp+wtZYsEtKRTWPcM38WZ6yKrgdzGUT/OUtVSpFqTvX48Y7cPJBJjkO2RIk00c CpkfO+lNkdqGJLXWECkZlN3mpUXZyst3lXYUYDKYBp5ANn0fS4QjZOzsDlIrw8EBUuBe RUDG7FwQ5EuCt3U+zwPJIsWu+WucYZDZhn6LcAG/fpfYx5hfuTVlU7f4G/DMa17lSMho kGFA==
X-Gm-Message-State: AOAM530Og9sB4IZ40h8GRLsitPDVb7k2Q3tUGnXtVi5lQT0yPmKbfF66 DkPblsrcvEu0SjeoQXbaI1KwSdjcI8HyT7K0IFwN8LLTVl6rrg==
X-Google-Smtp-Source: ABdhPJy0QGQkw2W+Oq+yP2ih8OYnQ/gZ2S4pCtLMZr3X7l97lFTXOuWSqypOXk2IvGcgotHGBe5akCg497aywqsjEzA=
X-Received: by 2002:a25:5d0b:: with SMTP id r11mr2199901ybb.380.1621458754090; Wed, 19 May 2021 14:12:34 -0700 (PDT)
MIME-Version: 1.0
References: <CAM4esxSLAMNZQ73sEk-8LnVRiv00b-PDVPmUqY3iMxCSYui0fw@mail.gmail.com>
In-Reply-To: <CAM4esxSLAMNZQ73sEk-8LnVRiv00b-PDVPmUqY3iMxCSYui0fw@mail.gmail.com>
From: Spencer Dawkins at IETF <spencerdawkins.ietf@gmail.com>
Date: Wed, 19 May 2021 16:12:07 -0500
Message-ID: <CAKKJt-eBCbpQ2+0KHmX7WZkPbJGEScx0p8j8ztjGmZO0MYq4nQ@mail.gmail.com>
Subject: Re: ALPN and QUIC versions
To: Martin Duke <martin.h.duke@gmail.com>
Cc: IETF QUIC WG <quic@ietf.org>
Content-Type: multipart/alternative; boundary="0000000000000e3ed105c2b54949"
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/2G77A09EAORXuVH1UHjPJogusc0>
X-BeenThere: quic@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Main mailing list of the IETF QUIC working group <quic.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic>, <mailto:quic-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic/>
List-Post: <mailto:quic@ietf.org>
List-Help: <mailto:quic-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic>, <mailto:quic-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 19 May 2021 21:12:40 -0000

Hi, Martin,

On Wed, May 19, 2021 at 10:27 AM Martin Duke <martin.h.duke@gmail.com>
wrote:

> There appears to be an under-examined sentiment in this WG that the 'h3'
> ALPN specifically indicates QUIC version 1. The only spec explicitly
> stating it, that I can find, is the applicability draft, and I've filed an issue
> against it <https://github.com/quicwg/ops-drafts/issues/360> [1]. I might
> be in the rough here, but I'd like to push back on this design during WGLC
> in case others share my concerns.
>
> [TL;DR one ALPN per QUIC version will not scale with many versions and we
> should do something else]
>

Thank you for raising this question now.


> quic-http says "HTTP/3 relies on QUIC version 1 as the underlying
> transport. The use of other QUIC transport versions with HTTP/3 MAY be
> defined by future specifications.," which to me is not quite the same thing
> as saying we need a new ALPN.
>
> For the QUICv2 draft there has been some discussion
> <https://github.com/martinduke/draft-duke-quic-v2/issues/5> of what the
> correct way <https://github.com/martinduke/draft-duke-quic-v2/pull/6> to
> specify support for HTTP/3 is. [2,3]
>
> I'm fine with the quic-http wording, but I dislike the text in the
> applicability draft. There are a few ways we could actually design the
> interaction of applications and versions:
>
> 1) As stated in the applicability draft, the ALPN includes the QUIC
> version. Then every new version document has to review the set of
> QUIC-specific ALPN codes and register new ALPNs. As these version numbers
> are 32 bit integers and may not simply increment up from 1, ALPN codes will
> often look like h3-0x4384abc0, doq-0x4384abc0 [4], etc. Similarly, each new
> application of QUIC has to review the set of QUIC versions and register new
> ALPNs for each version. This has the advantage of reducing the need for
> version negotiation, but it's not scalable if there are a lot of versions
> and applications. The ALPN registry will essentially have a matrix of
> applications and QUIC versions with the combination that signifies each.
>
> I imagine most QUIC implementation APIs would present an interface for an
> application to declare its ALPNs. I'm not sure how that implementation
> easily deploys new versions (or deprecates old ones) if all the apps then
> have to change, unless it's mutating the ALPN from an application-provided
> root. That seems error-prone.
>

I agree with your reasoning here, but in addition, doesn't that require
either (1) implementations to support old QUIC versions basically forever,
or (2) deployed applications to be updated to specify a new ALPN in order
to retire old QUIC versions?

When we were chartering TAPS, one of the major reasons was to stop
requiring application updates to take advantage of new transport protocols.
I know this isn't quite the same thing, but I'm not understanding why
requiring applications to be updated to specify a new ALPN for a backwards
compatible version of QUIC (so, little or no benefit for the application)
would be a GOOD thing.


> 2) A draft with a new QUIC version MUST formally update any QUIC
> application RFC for which it wants to use the same ALPN. Application RFCs
> would say which versions can transport them at the time of writing without
> a formal update. So to find the available QUIC versions for a given
> application RFC, one could see the versions listed in that RFC (which
> obviously predate the application) and then note in the header which RFCs
> update it (all the compatible versions released since). Mike Bishop suggested
> this course of action
> <https://github.com/martinduke/draft-duke-quic-v2/pull/6> in [3]. This
> property is somewhat convenient, but again, I don't think it scales
> incredibly well: if there are many versions, the front page of HTTP/3 could
> be filled with RFCs that update it, merely because they say "you can use h3
> with this"
>
> 3) Add a column to the IANA ALPN Registry
> <https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids>
> [5] that specifically lists the compatible QUIC versions. For most current
> entries (which are not QUIC-compatible), this would be empty. New
> application or version RFCs could simply update the registry, which will
> scale somewhat better than (1) and still be easily discoverable. I am happy
> to write a short draft to change the registry if that's how we want to
> proceed.
>

ISTM that this is the best choice. If QUIC versions bloom like flowers,
maintaining the ALPN-QUIC version linkage in an IANA registry is going to
scale better than any of the other choices (or, perhaps, will scale less
badly, but that's roughly the same thing).

If QUIC versions don't bloom like flowers, this would still work.


> 4) There is no formal trail of linkages. New version RFCs should say what
> apps they support (possibly as generic as "all v1 applications work with
> the new version") and applications should say if (a) the list of usable
> versions is other than the full known set and (b) what properties it needs
> from a QUIC version to operate. This is the path I took in a v2 PR
> <https://github.com/martinduke/draft-duke-quic-v2/pull/6> [3], which has
> no official standing whatsoever. This makes the forensics to obtain the
> full list of usable versions quite a bit harder, but won't explode the ALPN
> registry or the front page of HTTP/3.
>
> There are probably other solutions I haven't thought of. I have
> purposefully ignored the whole question of provisional and experimental
> versions to keep this at a manageable length.
>
> As you might tell, I would prefer (3) or (4). I would like to confirm I am
> in the rough before we ship the applicability draft that [informatively]
> mandates (1).
>

"[informatively] mandates". <chuckles to himself while planning an April 1
RFC updating BCP14>

Best,

Spencer


> Martin
>
> [1] https://github.com/quicwg/ops-drafts/issues/360
> [2] https://github.com/martinduke/draft-duke-quic-v2/issues/5
> [3] https://github.com/martinduke/draft-duke-quic-v2/pull/6
> [4] I'm happy to bikeshed on decimals vs. hex, if we choose this option.
> [5]
> https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids
>