[dispatch] Dispatching WebTransport
Victor Vasiliev <vasilvv@google.com> Mon, 17 June 2019 13:35 UTC
Return-Path: <vasilvv@google.com>
X-Original-To: dispatch@ietfa.amsl.com
Delivered-To: dispatch@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 5125712013A for <dispatch@ietfa.amsl.com>; Mon, 17 Jun 2019 06:35:56 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -17.509
X-Spam-Level:
X-Spam-Status: No, score=-17.509 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, ENV_AND_HDR_SPF_MATCH=-0.5, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_DKIMWL_WL_MED=-0.01, USER_IN_DEF_DKIM_WL=-7.5, USER_IN_DEF_SPF_WL=-7.5] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=google.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 al7BmyTQCsbe for <dispatch@ietfa.amsl.com>; Mon, 17 Jun 2019 06:35:53 -0700 (PDT)
Received: from mail-lf1-x136.google.com (mail-lf1-x136.google.com [IPv6:2a00:1450:4864:20::136]) (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 5B02B120114 for <dispatch@ietf.org>; Mon, 17 Jun 2019 06:35:52 -0700 (PDT)
Received: by mail-lf1-x136.google.com with SMTP id j29so6507195lfk.10 for <dispatch@ietf.org>; Mon, 17 Jun 2019 06:35:52 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=4Ekv5qFlUAn2KAyv+zY8OtufRzVlYgAuCKH3Nsdlt+E=; b=vBOo0KqIuSiobLL0PWreAhcouKyXBJ6tdi7z0v5HI76PwJPOEjCwhi67zBu+3D//Pj 4rRARumRVxaxqOTMwX7UHz9vsYPqWLG1Z+Q69bz4gV8iv6WuRxmV+SQm871JaW6Cd/7d DuJZAzDNSjO9BBR0tmiyRUgo+N1Xr06mLfJEO7ZbCyLgUBhidP5L1mZMk5xODSjxE2OP 1sNB3SAznydjiDsJyVxbQGMRYi4J6YiAw50b9omtufqA889Mo/YnEVaLqeS3+rxTxK1I EnQDIWntIsj7yRADEmMn37IBclM1FCqCWVhGQwuB9O1LLKox8B5uFY586vmUjpZniU5i D3gw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=4Ekv5qFlUAn2KAyv+zY8OtufRzVlYgAuCKH3Nsdlt+E=; b=Mg+kLrzetbKcEK6MQpBaYD0bnAKphTZDFrXDdPbYQ93nckmWZVD/O1tQPbVG6iz8mF aBTQ2rqr3rMygCHBuYAWONTWVuJADUKLd9L4DIwRTQcZHDkdzsTpIOf4WGg22fZ+oor3 cmpAZIloDHlAU9U4gKTBAQU0jp98gOTH7m9RGVJ4wANlLt4BFaeiQemc4QKK4qZSJMYw lpe9d69WL0IH0Dogv0Q0b7iWrtUOtLvzc70KW95J/Loo7xEqF/cqpM0GoBbCR4Z61YWW So8i+rAEONVaugRlxNIzcdr9OGMAqwHZDaVokI4G2sEPS+s3od3sslZAlOMvfsnMbNfu hNJA==
X-Gm-Message-State: APjAAAU94v8JhORsSp7+XnsJ1bxkmuwMnVMU14nxOrAuabGDeq4alXHq qtlUgk+6yIqUsTS7wRd+F/Nd4TSjrZXtsXuJBSpkRa0YSSeJjA==
X-Google-Smtp-Source: APXvYqxmGBmOYXr0aKrP1cvren3CqOp9LHx7vhPDM4QfjMrYlTU8Ndrx79jh/54S4aLfDs89MBbY2kpp4gSW+vkqN4Y=
X-Received: by 2002:ac2:446b:: with SMTP id y11mr50345363lfl.158.1560778549596; Mon, 17 Jun 2019 06:35:49 -0700 (PDT)
MIME-Version: 1.0
From: Victor Vasiliev <vasilvv@google.com>
Date: Mon, 17 Jun 2019 09:35:37 -0400
Message-ID: <CAAZdMadKgUkAwnYQ7MmSR46qQZTh8+FF5BuKmc1r33SMyF91sQ@mail.gmail.com>
To: dispatch@ietf.org
Content-Type: multipart/alternative; boundary="00000000000005fb49058b851302"
Archived-At: <https://mailarchive.ietf.org/arch/msg/dispatch/sIih9gBhJ4_faoN0GrQ9Xweue2w>
Subject: [dispatch] Dispatching WebTransport
X-BeenThere: dispatch@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: DISPATCH Working Group Mail List <dispatch.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/dispatch>, <mailto:dispatch-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/dispatch/>
List-Post: <mailto:dispatch@ietf.org>
List-Help: <mailto:dispatch-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/dispatch>, <mailto:dispatch-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 17 Jun 2019 13:35:56 -0000
Hello friendly IETF dispatchers, I am writing about new work I want to bring to IETF. The proposal is called WebTransport. It’s a combination of a Web API currently under development in W3C WICG [0], a protocol framework and some protocols that fit into that framework. Combined, they would allow web applications to establish WebSocket-like connections that instead of ordered reliable messages use multiple streams and datagrams (datagrams are unreliable and streams do not have head-of-line blocking). This is highly useful for real-time and other latency sensitive applications. # Background Historically, the only networking operations available to the Web applications were sending HTTP requests and receiving HTTP responses. That model does not fit all applications well, so over time, more mechanisms were added. The two most relevant here are WebSockets (RFC 6455) and RTC Data Channels (draft-ietf-rtcweb-data-channel). WebSockets are a way for Web applications to do bidirectional communication over a TCP connection; they work great if TCP fits your transport needs, but perform poorly if your application is latency sensitive and would, in non-Web context, use a UDP-based protocol. There are many different kinds of applications like that, but I would like to highlight two major categories which I to some extent surveyed when coming up with this proposal: 1. Custom client-server chat/multimedia protocols (faster-than-DASH video streaming, game streaming, etc). Those are usually developed by teams with a good amount of resources, and they are interested in tailoring the setup for their use case. 2. Game developers. Online games are commonly real-time in nature and benefit dramatically from ability to give up on transmitting old information. They usually use some in-house UDP-based protocol, and often need to run on unusual platforms. WebRTC Data Channels are a mechanism that provides a WebSocket-like interface with unreliable delivery features. On the wire, it’s SCTP-over-DTLS, established using ICE and SDP. In theory, this provides users with enough functionality to build anything they need, since SCTP messages can be unreliable and unordered. In practice, while RtcDataChannel is fairly straightforward to use for browser-to-browser peer-to-peer communication, it has seen much lower adoption than WebSockets in the client-server scenario, even considering the fact that its use cases is naturally more niche. The main reason for this is the incredible complexity of the WebRTC stack. WebSockets are a fairly straightforward overlay on top of TCP and TLS; there is a wide variety of implementations out there, and it's fairly easy to write a new one (I wrote on myself in less than 1,000 lines of C++). With data channels, however, once there is no browser to abstract all of the complexity away, the web developers are required to understand and implement (or at least integrate) SDP, ICE, STUN, DTLS and userspace SCTP. While a lot of those have simplifications for this use case (ICE Lite) and some protocols listed have a variety of implementations widely available (DTLS), the entire system still requires going through hundreds of pages of RFCs in order to understand it well enough to implement. This complexity barrier has precluded Data Channel adoption by communities of smaller developers who don’t have resources to implement them, notably game developers (see [1] and [2] for some discussion). Even among the people who got past the complexity barrier, the feedback I heard almost universally is that WebRTC Data Channels are hard to work with. From the feedback I gathered, the main problem is usually around the transport protocol itself. Userspace SCTP is essentially a monoculture: virtually all implementations use libusrsctp, a 80,000-line adaptation of FreeBSD SCTP implementation. This lack of tool choice is fairly painful since latency-sensitive real-time applications often require quite a bit of tuning on the transport side to get the best performance (custom congestion control, etc). In addition, the limitations on the message size stemming from both the API itself and the lack of widespread support for message interleaving (RFC 8260) means that the developers have to roll their own framing on top of SCTP messages if they want to avoid head-of-line-blocking (this is particularly bad because the framing overhead in data channels is already large as-is). In summary, we have a system that technically provides what everyone wants, but that nobody is happy with, and that is not usable by all but the most well-resourced users. # Proposal Our initial idea for fixing this was to take QUIC and do what WebSocket did to TCP: add security features that would make it safe to expose on the Web (by adding origin checks, etc), but otherwise expose it as-is. This would get us out of libusrsctp monoculture (QUIC is not yet finished, but it already has a fairly diverse implementation ecosystem, see [3]), and remove all P2P-related complexity involving SDP and ICE. The original proposal for that was called QuicTransport; we showed it to various people, and the feedback we got is that (1) the API should not be tied to a particular transport (since we already switched once from SCTP to QUIC, tying it to QUIC specificially would not be wise), and (2) it shouldn’t fail hard when QUIC is unavailable. As a result of that feedback, we abstracted it into a general-purpose framework called WebTransport. The overview draft, https://tools.ietf.org/html/draft-vvv-webtransport-overview-00 describes the framework itself, mainly the requirements the transport protocols have to satisfy to be usable on the web through the API. Within this framework, we propose the following protocols: - QuicTransport -- a simple WebSocket-like adaptation of QUIC, described in https://tools.ietf.org/html/draft-vvv-webtransport-quic-00 - Http3Transport -- a mechanism that allows creating custom non-HTTP streams within an HTTP/3 session, described in https://tools.ietf.org/html/draft-vvv-webtransport-http3-00. This is sort of a version of RFC 8441 for QuicTransport. - FallbackTransport -- a TCP-based transport with multiplexed streams that can be used when QUIC is not available (e.g. on network that require CONNECT proxy). We don’t have a draft specifically for this, and there are at least two approaches we could take here: either reusing HTTP/2 as a transport (i.e. just use draft-kinnear-httpbis-http2-transport), or building a protocol with QUIC-like semantics on top of WebSockest. The earlier is a more straightforward way; the latter has the advantage of being fully polyfillable in JavaScript. # Discussion At this point, I am fairly certain that there is a problem here that needs to be addressed. I am formally requesting ART area to take this problem on. I believe the drafts above would be a good starting point for discussion. The design that they describe went through several iterations based on the feedback I got when I discussed this work within a more narrow audience (mostly people in QUIC working group), so we’re hopefully at least looking in the right direction here. I am requesting feedback on this proposal, both on the overall plan and the specifics described in the drafts. I hope to discuss this in depth in Montreal, both at dispatch and (in more depth) at a side-meeting. Thanks, Victor. [0] https://github.com/WICG/web-transport [1] https://discourse.wicg.io/t/webtransport-proposal/3508/9 [2] https://news.ycombinator.com/item?id=13266692 [3] https://github.com/quicwg/base-drafts/wiki/Implementations
- [dispatch] Dispatching WebTransport Victor Vasiliev
- Re: [dispatch] Dispatching WebTransport Paul Kyzivat
- Re: [dispatch] Dispatching WebTransport T H Panton
- Re: [dispatch] Dispatching WebTransport Sergio Garcia Murillo
- Re: [dispatch] Dispatching WebTransport Iñaki Baz Castillo
- Re: [dispatch] Dispatching WebTransport Victor Vasiliev
- Re: [dispatch] Dispatching WebTransport Peter Thatcher
- Re: [dispatch] Dispatching WebTransport Peter Thatcher
- Re: [dispatch] Dispatching WebTransport westhawk
- Re: [dispatch] Dispatching WebTransport westhawk
- Re: [dispatch] Dispatching WebTransport Peter Thatcher