Re: Proposal: Run QUIC over DTLS

"Brian Trammell (IETF)" <> Wed, 07 March 2018 11:53 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 28D2A1271DF for <>; Wed, 7 Mar 2018 03:53:39 -0800 (PST)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -2.599
X-Spam-Status: No, score=-2.599 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id DWRKIJ7AHkxg for <>; Wed, 7 Mar 2018 03:53:36 -0800 (PST)
Received: from ( []) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id A9AD91272E1 for <>; Wed, 7 Mar 2018 03:53:35 -0800 (PST)
Received: from (localhost []) by localhost (Postfix) with ESMTP id 94D20340E80; Wed, 7 Mar 2018 12:53:31 +0100 (CET)
Received: from localhost (localhost []) by localhost (ACF/6597.6452); Wed, 7 Mar 2018 12:53:31 +0100 (CET)
Received: from ( []) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS; Wed, 7 Mar 2018 12:53:31 +0100 (CET)
Received: from [] (account HELO by (CommuniGate Pro SMTP 6.1.18) with ESMTPSA id 47584702; Wed, 07 Mar 2018 12:53:30 +0100
From: "Brian Trammell (IETF)" <>
Message-Id: <>
Content-Type: multipart/signed; boundary="Apple-Mail=_65199BEF-2AB1-4672-84B3-FE4603E55CC8"; protocol="application/pgp-signature"; micalg=pgp-sha512
Mime-Version: 1.0 (Mac OS X Mail 11.2 \(3445.5.20\))
Subject: Re: Proposal: Run QUIC over DTLS
Date: Wed, 7 Mar 2018 12:53:29 +0100
In-Reply-To: <>
Cc: Eric Rescorla <>, Ted Hardie <>
To: "" <>
References: <> <> <> <> <> <> <>
X-Mailer: Apple Mail (2.3445.5.20)
Archived-At: <>
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: Main mailing list of the IETF QUIC working group <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Wed, 07 Mar 2018 11:53:39 -0000

tl;dr: what Ted said, plus what Lars said.

Relayering QUIC on top of DTLS seems to me to be an interesting version 2 exercise. At this point, it's definitely worth investigating how QUIC invariants and VN can be made compatible with an "upgrade" during VN to a QUIC layered over DTLS, but I think it's too late to make this change for V1.



> On 7 Mar 2018, at 00:25, Ted Hardie <> wrote:
> Howdy,
> I've now had a chance to read the document, and I think you have identified a legitimate pain point with the treatment of stream 0.  At the very, least renaming it so that the differences between its behavior and other streams are less surprising seems warranted.  Like Christian, I would also be interested in seeing the PR you sketch out below.
> I think, however, that the proposal to re-layer on top of DTLS should be dropped.  I am even, frankly, reluctant to see a presentation of it at IETF 101, since I suspect the 20 minutes will eat a good bit more mental time than that.
> I have two basic reasons for that, similar to those put forward by others.  The first is that this will require additional time and coordination.  DTLS has some modest changes to do, and there are some not-at-all modest changes to both specification and code required on the QUIC side.  Though your proposal is complete enough to give a good idea of what to expect, there is enough to nail down (like carrying the transport parameters) that it will take multiple cycles of discussion and testing to go from here back to where we are in terms of implementations interoperating.  While your proposal may well reduce implementation complexity, I didn't see any user-impacting feature that was gained (and if I missed it, my apologies).  "Done" is a user-impacting feature.  Without a balancing user-impacting feature, the delay for relayering doesn't seem to be at the right place in the hierarchy of concerns.
> The second reason relates to WebRTC.  As you note, there is interest on the WebRTC side in adopting QUIC and relayering would make the current version of the data channel (SCTP over DTLS) easy to run side-by-side with a later QUIC over DTLS.  While I agree, I think the appetite for change in WebRTC is a bit larger and that it includes potentially running the media over a version of QUIC that supports partial reliability and multipath.  I believe, as a result, that having a full-on effort that tackles WebRTC over QUIC may result in some trade-off choices that we will not make correctly if we tackle only the data channel parallel now.  If we try to do it all together (Transport, HTTP and WebRTC), I suspect the delay will simply push this into a downward spiral of attention and effort.
> My last reason is not so basic, because it is a concern about ossification.  You noted in your message to the list:
>     We are designing a protocol that will be used long into the future, so
>     having the right architecture is especially important.
> While we hope that the protocol will be useful long into the future, we are also trying to demonstrate that building a new transport on top of UDP can be done and deployed widely.  That should open up the possibility of deploying more as time goes on.  If we get caught up trying to make this version perfect because we believe it is our last chance, we may find ourselves with the deployment timeline of v6 instead of gQUIC.
> I do appreciate your making the effort to consider this in a different layering and your presenting the results to the working group.  I think the effort will improve the handshake and the treatment of stream 0, but I personally believe it should do so within the framework we have already laid out.
> thanks,
> Ted
> On Tue, Mar 6, 2018 at 7:12 AM, Eric Rescorla <> wrote:
> FWIW it is possible to move the style of version negotiation from my draft directly into the current draft if we so wanted. It's just that it's necessary if QUIC is at the bottom of the stack and so is a nice extra win.
> Specifically, we would have the version in the long header In Initial refer not to the QUIC version we want to negotiate but rather to the version whose obfuscation method we are using (probably the client's minimum). The CH would then have an extension which contained the QUIC versions we support (as in TLS.supported_versions) and then the SH would contain both selected versions. We could have the remaining obfuscated long header packets could use *either* obfuscation version. The encrypted long header packets would of course use the negotiated versions.
> A few notes:
> - The CH always comes in one packet so that you don't have to worry about it being immediately available to the server
> - The SH may be broken up but as noted above, the obfuscation version isn't part of the negotiation.
> As with my draft, this would give you 1-RTT negotiation if the client obfuscated with a version the server knew and 2-RTT if the client obfuscated with a version the server didn't know, as opposed to always having 2-RTT
> If people think they like this idea, I'd be happy to write it up a separate PR.
> -Ekr