[Webtransport] My thoughts on protocol selection

Martin Thomson <mt@lowentropy.net> Mon, 11 January 2021 00:15 UTC

Return-Path: <mt@lowentropy.net>
X-Original-To: webtransport@ietfa.amsl.com
Delivered-To: webtransport@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 37F2E3A13F0 for <webtransport@ietfa.amsl.com>; Sun, 10 Jan 2021 16:15:32 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.119
X-Spam-Level:
X-Spam-Status: No, score=-2.119 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, RCVD_IN_DNSWL_BLOCKED=0.001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, 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=lowentropy.net header.b=bX7a4NiO; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=WjxA/f06
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 09aBG8jdCRdc for <webtransport@ietfa.amsl.com>; Sun, 10 Jan 2021 16:15:30 -0800 (PST)
Received: from out3-smtp.messagingengine.com (out3-smtp.messagingengine.com [66.111.4.27]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 7A8C43A13EF for <webtransport@ietf.org>; Sun, 10 Jan 2021 16:15:30 -0800 (PST)
Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id 033A25C00D8 for <webtransport@ietf.org>; Sun, 10 Jan 2021 19:15:29 -0500 (EST)
Received: from imap10 ([10.202.2.60]) by compute1.internal (MEProxy); Sun, 10 Jan 2021 19:15:29 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lowentropy.net; h=mime-version:message-id:date:from:to:subject:content-type :content-transfer-encoding; s=fm1; bh=IczQypaHwKjL40mEisIuUTGZhb ru/rDDbNUJ/vMy4Ds=; b=bX7a4NiOQvkyOuuGNi5WP92iUcAKzVYc5cmJ6EBFND DTaQQGLysu/KTWE1Tq7aY/Uw3BoTldaeMgTHoPuVncwP/GJuk22Aa7dQBxKki8N9 tqgWN/K6bqG1cdIhIS8Tz4IdoG/HzoSd5xFlcGbiOIYF5fEf3ckU5y8mU9H/NTv6 36Hu7Ol1cHgEjCQNsS7bPXMsWlAgfx65PT+D3iyv6b80nKRQLLbgESqfAljWN/4+ VxUA0tCz4IvBlBnKSrbIOhWzsVrz5pZQh6uRZx9yA31QEjJWFJifOP6Nv1jY3Gh2 Bewaz9aSH0J0QcBKqNzY3O/0R2cdgLu3OKi+OL608OAA==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-transfer-encoding:content-type :date:from:message-id:mime-version:subject:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; bh=IczQyp aHwKjL40mEisIuUTGZhbru/rDDbNUJ/vMy4Ds=; b=WjxA/f06rG3mmf1xqWjH38 6cnQQ3CbVRlsgadS39IGU0UnEItjDwXylayr/GIV0CbJjP+Ez8S7ibj9HqHo0BhO vbpyI+hHC7V8BRMbD0B6btCW0TwIR5Q79QIYHHVtASAuoCtKNfE2DWudCEPNcfzB L6J1Hd4gvvuN1mJnxnMJJEIeb6I5OvdHtawsWDZ2x78N9YNlw5UR5N1KAmZewoNO p4+nyBQfxbIHjDOqibYU61ja9ZnACpx8vdirdvavo1TMN6qOAbTeIzNBznBQ0ydn qb8ejZBtEV0nJxLGvw9+f6YxySmrvichmrv8/31HwG5aT+fBLCaqQreqPM/PZQzw ==
X-ME-Sender: <xms:oJj7X87R4-2kUfUoqjKeHAWVGmr9tSv0Wy_nRc07VvX1KckPQWNxAA> <xme:oJj7X96EXU4-vgBFOai8GC9_hx3Mw2Loqp81oHwLwvo3-o6OOpZwSkOxv4SeP-GFV sQkUKfn1ta1_R0n1ag>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedujedrvdehtddgudejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefofgggkfffhffvufgtgfesthhqre dtreertdenucfhrhhomhepfdforghrthhinhcuvfhhohhmshhonhdfuceomhhtsehlohif vghnthhrohhphidrnhgvtheqnecuggftrfgrthhtvghrnheptdeklefffefhueehvdejhf dtieeiudegvdelieevjeeffefgheehfedvteefjeffnecuvehluhhsthgvrhfuihiivgep tdenucfrrghrrghmpehmrghilhhfrhhomhepmhhtsehlohifvghnthhrohhphidrnhgvth
X-ME-Proxy: <xmx:oJj7X7deOVuiDtmNzyOdp-k0wrWTPO8XkQAzlCT89TYQhHhkp0U-kw> <xmx:oJj7XxIqHaqZHvpudhCSiRpjo9u9fy05K7m2f1F_dd-gW1uSqCO5mg> <xmx:oJj7XwLaEkMS4JkTIBSnL4UVVbuhEpJQY46ADA8JP4JjsWHKjAhWKw> <xmx:oJj7X1Vow_rtcsZbDjR4ZwpOzbNgH7_XFivlj739HtcRRblViQeRsA>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id 8E33820149; Sun, 10 Jan 2021 19:15:28 -0500 (EST)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.5.0-alpha0-45-g4839256-fm-20210104.001-g48392560
Mime-Version: 1.0
Message-Id: <45d4958d-1ad5-40d2-8b02-39e5b3a8fcbd@www.fastmail.com>
Date: Mon, 11 Jan 2021 11:15:08 +1100
From: "Martin Thomson" <mt@lowentropy.net>
To: webtransport@ietf.org
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable
Archived-At: <https://mailarchive.ietf.org/arch/msg/webtransport/do6GKRKxGb0fYMRVIMAo0bhtU6g>
Subject: [Webtransport] My thoughts on protocol selection
X-BeenThere: webtransport@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <webtransport.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/webtransport>, <mailto:webtransport-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/webtransport/>
List-Post: <mailto:webtransport@ietf.org>
List-Help: <mailto:webtransport-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/webtransport>, <mailto:webtransport-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 11 Jan 2021 00:15:32 -0000

As the interim is at a time that is hazardous to my health, I thought I would share my opinions via email ahead of the meeting.  I will try to be provide explicit positions and rationale for those positions.

The goal is to choose which protocols will support the API.  We've been presented with a matrix of 4 options.  On one axis, there are two UDP/QUIC-based options and two TCP-based options.  On the other, there are two options that pool webtransport communications (with itself or HTTP), and two options that require a new connection for each session/context/thingie.  I understand that the non-pooled TCP option is less well defined than other options.

My preference is to select a non-pooled option with a websocket-based fallback.  I can live with a pooled approach.

I can see the merits of a pooled approach, both in terms of flexibility, transport use, and other factors.  However, I think that the primary advantage of a non-pooled option is simplicity.  Implementation complexity is only a small piece, I'm mostly concerned about ensuring that this is a good fit for the sorts of deployment architectures that are used by most web developers.  My own experience deploying websockets, though admittedly a little dated now, shows that most developers don't share infrastructure with web hosting.   Furthermore, there are more complications to deal with if we touch HTTP: managing inter-protocol prioritization, which would be necessary to address in a pooled context, is non-trivial both from a protocol design perspective and challenging to deploy; identifying connections with URIs in websockets turned out to be a major problem; and likely other issues.  I'm confident that the complexities of a pooled approach can be overcome, but I tend to think that that choice would disproportionately privilege entities with greater engineering resources.  It would also take longer to standardize.

At the time I write this, Victor hasn't filled in his argument for why a non-pooled protocol implementation is like a pooled implementation, so I can't respond to that directly.  Implementation of webtransport in a browser is likely as weird and atypical as anything else in browser-land, so I'm not anticipating anything revelatory.

No doubt there is a lot more ground to cover here.  Intermediation options for websockets are poor (though not non-existent despite some assertions I've heard) and webtransport is almost certainly the same.  I acknowledge the fact that not addressing pooling could push toward proprietary load balancing/aggregation designs.  However, the primary problem is not lack of intermediation designs at the protocol layer, but the inability of intermediaries to interact with the semantics of the data that is being exchanged.  This is a problem at a level that this working group is not able to deal with.  We should be prepared to deal with any lower-layer intermediation options that arise as we learn more about how this is being deployed, but that is all.

I think that fallback is necessary.  It is true that many large entities and incumbents will have existing infrastructure that they can fall back on, such that they can treat webtransport as just a way to access a better-performing transport.  However, not providing fallback would mean that we're making a deliberate decision to privilege those parties.  As much as not dealing with TCP would be easy, I have become convinced that to not provide a fallback would also be irresponsible.

The specific shape of fallback I am thinking of is a websocket connection that uses a newly defined "webtransport" (or "wt") subprotocol.  This subprotocol will need new affordances for unidirectional streams and datagrams and some way to manage layering streams over the message-based abstraction.  Neither of those should be particularly difficult to manage.

I am opposed to developing more than the two protocols necessary for high performance (UDP) and fallback (TCP).  I'm prepared for time to prove me wrong, but I would prefer to come to that realization through experience.

In reviewing slides, I see that Victor has proposed a new URI scheme.  I think that this is sensible.  Not so much for the stated reasons, which are fine, but more because it means we can use SVCB.  We might even consider disallowing the use of A/AAAA with this new protocol.  The one problem I might anticipate with that is difficulty of doing local testing, but we're already hard-wiring localhost in other ways.

(Thanks to Bernard for sharing the unfinished slides with me ahead of time.)

---
Separately, the W3C group met last week and discussed requirements.  This is my recollection of the list, which is likely incomplete/wrong to some extent.

The group that met would like to ensure that datagram transport, or a simulation thereof, is available in all options.  Though performance degradation might occur in TCP, that is better than not having the mechanism.  Unless there is a stream-based substitute for datagrams (which I think would not be a good idea), connection attempts should fail if the QUIC datagram extension cannot be negotiated.

(The API will likely include a flag to disable fallback, but that is not necessarily a protocol-level concern.)

Some anti-requirements: The protocol MUST NOT carry HTTP state mechanisms: cookies, authentication.  The protocol MUST NOT use the same client-based certificates as HTTP.  Webtransport will need some way to integrate with CSP and other policy mechanisms, but that doesn't mean that it needs to inherit the state management burdens of HTTP on the web.

There was also a lot of discussion about bandwidth estimation for video delivery, but I think that the conclusion was that it was hard and it might need to be something we table for the moment.