Re: [dispatch] Dispatching WebTransport

westhawk <thp@westhawk.co.uk> Tue, 02 July 2019 08:22 UTC

Return-Path: <thp@westhawk.co.uk>
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 8C2D31201F3 for <dispatch@ietfa.amsl.com>; Tue, 2 Jul 2019 01:22:53 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.598
X-Spam-Level:
X-Spam-Status: No, score=-2.598 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=unavailable autolearn_force=no
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 zujdG1V3L3Uv for <dispatch@ietfa.amsl.com>; Tue, 2 Jul 2019 01:22:49 -0700 (PDT)
Received: from smtp001-out2.apm-internet.net (smtp001-out2.apm-internet.net [85.119.248.224]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 3A8821200B3 for <dispatch@ietf.org>; Tue, 2 Jul 2019 01:22:48 -0700 (PDT)
Received: (qmail 32838 invoked from network); 2 Jul 2019 08:22:46 -0000
X-APM-Out-ID: 15620557663283
X-APM-Authkey: 255286/0(159927/0) 207
Received: from unknown (HELO zimbra003.verygoodemail.com) (85.119.248.218) by smtp001.apm-internet.net with SMTP; 2 Jul 2019 08:22:46 -0000
Received: from localhost (localhost [127.0.0.1]) by zimbra003.verygoodemail.com (Postfix) with ESMTP id 8113A18A05A5; Tue, 2 Jul 2019 09:22:46 +0100 (BST)
Received: from zimbra003.verygoodemail.com ([127.0.0.1]) by localhost (zimbra003.verygoodemail.com [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id YrB1Nfcei33z; Tue, 2 Jul 2019 09:22:46 +0100 (BST)
Received: from [192.67.4.84] (unknown [192.67.4.84]) by zimbra003.verygoodemail.com (Postfix) with ESMTPSA id 42E8818A058A; Tue, 2 Jul 2019 09:22:46 +0100 (BST)
From: westhawk <thp@westhawk.co.uk>
Message-Id: <C4581B8C-0B33-4A6E-B149-E4253AE33F53@westhawk.co.uk>
Content-Type: multipart/alternative; boundary="Apple-Mail=_1845883D-ED67-40B4-9361-470C110417B2"
Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.11\))
Date: Tue, 02 Jul 2019 09:22:45 +0100
In-Reply-To: <CAJrXDUGubsbRV7_FinKr_r1m+MkBBXSVw=O-3oH31+UOJGjNtw@mail.gmail.com>
Cc: Victor Vasiliev <vasilvv=40google.com@dmarc.ietf.org>, dispatch@ietf.org
To: Peter Thatcher <pthatcher@google.com>
References: <CAAZdMadKgUkAwnYQ7MmSR46qQZTh8+FF5BuKmc1r33SMyF91sQ@mail.gmail.com> <98EF12E4-4BF2-4FBC-852B-776A0E0118BE@westhawk.co.uk> <CAJrXDUGubsbRV7_FinKr_r1m+MkBBXSVw=O-3oH31+UOJGjNtw@mail.gmail.com>
X-Mailer: Apple Mail (2.3445.104.11)
Archived-At: <https://mailarchive.ietf.org/arch/msg/dispatch/xbst67gbj7V9uz2bNcTHXQ3jzKg>
Subject: Re: [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: Tue, 02 Jul 2019 08:22:53 -0000

(Top post  - the quote level was getting unwieldy so I’ve trimmed quite a bit from the discussion - hopefully it still makes sense)

> On 2 Jul 2019, at 01:10, Peter Thatcher <pthatcher@google.com> wrote:
> 
> 
> 
> On Mon, Jun 17, 2019 at 7:13 AM T H Panton <thp@westhawk.co.uk <mailto:thp@westhawk.co.uk>> wrote:
> 
> 
>> On 17 Jun 2019, at 14:35, Victor Vasiliev <vasilvv=40google.com@dmarc.ietf.org <mailto:vasilvv=40google.com@dmarc.ietf.org>> wrote:
>> 
>> 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.
> 
> Establish connections to where ? Between eachother P2P ? Or to any server? Or just to the originating server only? 
> 
> Any server or p2p.
>  

Ok, great, but the requirements are different, and the OP seemed to be claiming simplifications that to my mind only work
client - server.

> 
>  In client/server mode, WebTransport doesn't require any of that, so it is a lot more simple. 

Right. See above. But that becomes a null statement if you do want P2P support .

> 
> Work is in progress decoupling the APIs from the (dreaded) SDP and simplifying the developer experience.
> 
> 
> What work?   

Slow, slow, adoption of the ORTC interfaces. 

>  
> That said, it is by no means un-managable - I've implemented pretty much the whole stack from scratch for small devices and I know of 2 other implementations which don't use libusrsctp 
> 
> 
> Maybe not for you, but we regularly get emails from people saying things like "It would be great to delete the mess of the WebRTC stack if there's a simpler protocol available. ICE/DTLS/SCTP all scare me”.

Yeah, but not as much as ICE/QUIC-RT scares me. (which by the way isn’t documented _anywhere_).

>  
> 
>> 
>> 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).
> 
> SCTP is well defined nice protocol that suffers (IMHO) from a lack of 'coolness' due to being used by the telcos for most of it's life.
> The head-of-line issue is a problem, but entirely fixable with small tweaks to SCTP protocol. (read it wasn't in the original requirements - so it doesn't do it).
> 
> It's been fixable for a very long time.  I have my doubts about when it will actually get fixed.

With that being the view from a browser team you can see why people choose not to donate time to submit patches that fix it.

>  
> 
>> 
>> 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.
> 
> I'd point out that 2.5bn endpoints support it right now - including _every_ smartphone shipped in the last 2 years. Last I heard DataChannel traffic was 0.1% of chrome's traffic 
> which is _astonishingly_ high
> 
>> 
>> # 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.
>> 
> 
> It would be _great_ if that abstraction could _also_ work over SCTP data channels. That way you could cover the P2P use cases too.
> 
> QUIC can be p2p.  In fact, we already have it implemented in Chrome (in an original trial).

On top of ICE with a laughable security model no media and no RFC - not a good basis (yet) for others to implement.

> 
> The WebTransport API could run on top of SCTP, and you could probably make a JS polyfill for it.  But I'm not sure why anyone would bother.

2.5 billion shipped endpoints. near 100% penetration in smartphones today.

> 
> I'd really like to be clear what that problem is. 
> 
> 
> Web developers routinely ask for an unreliable websocket, or something close to UDP (but it needs to be secure).   It turns out that ICE/DTLS/SCTP is too complex to fill that roll.  

I agree. If they want unreliable websockets to their servers, then we can cut out most of the layers and produce something based on QUIC
very simply. If they want P2P and want it to carry media (especially audio) then there is a _lot_ of work to do to ensure it is usable, secure etc.

It seems to me the right way forward is to define a data-only interface and PoC implementation that:

1) works with QUIC to the originating server almost immediately on one or 2 of the QUIC stacks
2) has a polyfill on top of data channels so it can be used P2P immediately
3) a companion GOLang/python server side implementation on top of the existing webRTC (non usrsctp) libraries.
4) serves as a target/requiements for the necessary protocol work on Quic-RT

The realtime media can be added later.

T.