[rtcweb] Data Channel Negotiation and reopening of decisions

Randell Jesup <randell-ietf@jesup.org> Wed, 13 February 2013 10:38 UTC

Return-Path: <randell-ietf@jesup.org>
X-Original-To: rtcweb@ietfa.amsl.com
Delivered-To: rtcweb@ietfa.amsl.com
Received: from localhost (localhost []) by ietfa.amsl.com (Postfix) with ESMTP id 1E38921F88A8 for <rtcweb@ietfa.amsl.com>; Wed, 13 Feb 2013 02:38:18 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.399
X-Spam-Status: No, score=-1.399 tagged_above=-999 required=5 tests=[BAYES_00=-2.599, J_CHICKENPOX_111=0.6, J_CHICKENPOX_17=0.6]
Received: from mail.ietf.org ([]) by localhost (ietfa.amsl.com []) (amavisd-new, port 10024) with ESMTP id OO8C91DNWGRk for <rtcweb@ietfa.amsl.com>; Wed, 13 Feb 2013 02:38:17 -0800 (PST)
Received: from r2-chicago.webserversystems.com (r2-chicago.webserversystems.com []) by ietfa.amsl.com (Postfix) with ESMTP id 430C821F8869 for <rtcweb@ietf.org>; Wed, 13 Feb 2013 02:38:17 -0800 (PST)
Received: from pool-98-111-140-34.phlapa.fios.verizon.net ([]:3681 helo=[]) by r2-chicago.webserversystems.com with esmtpsa (TLSv1:DHE-RSA-AES256-SHA:256) (Exim 4.80) (envelope-from <randell-ietf@jesup.org>) id 1U5ZjD-0004cR-PI; Wed, 13 Feb 2013 04:38:16 -0600
Message-ID: <511B6C9A.4090904@jesup.org>
Date: Wed, 13 Feb 2013 05:36:10 -0500
From: Randell Jesup <randell-ietf@jesup.org>
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:17.0) Gecko/20130107 Thunderbird/17.0.2
MIME-Version: 1.0
To: rtcweb@ietf.org
References: <CABkgnnWUpMSBLioSD2+p82vGszX9R0Q4WFfME5j-DuK+B7KVJw@mail.gmail.com> <5113CD16.6090806@jesup.org> <CABkgnnW792o76t9dKhidOMJpa21VcbPQZFU1HYnY_yjTPCWhYw@mail.gmail.com> <51166A3C.4000604@jesup.org> <CABkgnnV2m=m+qtM1YR4CPse=gyekvWThon_Nxbf8YMVaNuvq6Q@mail.gmail.com>
In-Reply-To: <CABkgnnV2m=m+qtM1YR4CPse=gyekvWThon_Nxbf8YMVaNuvq6Q@mail.gmail.com>
Content-Type: text/plain; charset="ISO-8859-1"; format="flowed"
Content-Transfer-Encoding: 7bit
X-AntiAbuse: This header was added to track abuse, please include it with any abuse report
X-AntiAbuse: Primary Hostname - r2-chicago.webserversystems.com
X-AntiAbuse: Original Domain - ietf.org
X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12]
X-AntiAbuse: Sender Address Domain - jesup.org
Subject: [rtcweb] Data Channel Negotiation and reopening of decisions
X-BeenThere: rtcweb@ietf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: Real-Time Communication in WEB-browsers working group list <rtcweb.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/rtcweb>, <mailto:rtcweb-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/rtcweb>
List-Post: <mailto:rtcweb@ietf.org>
List-Help: <mailto:rtcweb-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/rtcweb>, <mailto:rtcweb-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 13 Feb 2013 10:38:18 -0000

A general note to start this:

We've been here before.  ALL of this has been argued over in great 
detail A YEAR AGO.  I'm sorry if some people were not involved at the 
time, and I'm fine with technical criticism of details of the solutions 
chosen.  However, while we did not have formal consensus calls (I 
think), there certainly was list (and in many cases room) consensus on 
these details, such as bidirectional channels and adding the WebSockets 
'protocol' ID at Atlanta in order to ease heterogeneous application 
interop for things like chat.

Sure, there were many options available to us.  We discussed them in 
great detail and chose a solution that was strongly patterned on 
WebSockets (and to good effect, from what I've seen in practice).  
Options like my original proposals for effectively "raw" unidirectional 
SCTP with SDP negotiation were firmly rejected in favor of bidirectional 
channels with low-overhead creation - and I agreed with the consensus on 
the list.

*Can* we reopen all of this?  Sure!  We *can* reopen ANYTHING (including 
consensus calls).  *Should* we?  No, if we ever want to make progress, 
unless there is some technical problem with the solution.  The details I 
was trying to resolve here and finalize were the outcome of conflicting 
requests to make small changes to channel creation from the Interim 
*last June*.  If people had issues with the general approach, they 
should have been presented then (or earlier on the list).

"Rough consensus and running code"?  We certainly had rough consensus a 
long time ago on most of this (and more IMO).  Running code?  We have a 
largely debugged implementation today in Firefox that's in-use in our 
Social API stuff, in 3D games, and other prototype applications.  We 
worked closely with Michael Tuexen, Randall Stewart and others to polish 
the open user-space SCTP library.

To be clear:  My revised proposal after the discussion in the room and 
on the list is to resolve the startup issues by firing onopen 
immediately and thus allowing 0-RTT opens, removing the need for special 
SDP parameters other than the m=application line and a=sctpmap line 
(which are needed to specify an SCTP/DTLS association, and are part of 
the existing MMUSIC draft).

I think we have a *workable* solution that addresses the end-user 
requirements and expectations, and is flexible enough to support complex 
future uses, and will allow for straightforward heterogeneous 
application interop.  Let's move on and make progress where we *haven't* 
been able to eliminate alternatives yet (or where they keep expanding 
instead of being pruned away).

On to the detailed response:

On 2/11/2013 2:54 PM, Martin Thomson wrote:
> On 9 February 2013 07:24, Randell Jesup <randell-ietf@jesup.org> wrote:
>> If you were to extend this to work for renegotiations where glare is
>> possible, you'd have to either wait for the renegotiation to finish, or use
>> some even/odd sort of trick which was proposed way back when on the list.
> If you want to resolve glare, then you use the mechanisms you already
> have for glare resolution.  Which, RFC 3264 defers to RFC 3261, which
> uses a fairly heavy-weight mechanism.  Keep in mind that you already
> need this if you are using offer-answer.  Use whatever mechanism you
> already have in place (I like the tie-breaker random number method
> myself).
> Or, you could stop worrying about glare and in those cases where glare
> is possible, allow the collision to proceed.
> This is an application choice.

Not unless you change the semantics of the JS API I believe.  If you're 
exposing glare to the application in some manner that's complexity for 
them to manage (and in a case that's hard for them to test).  It's easy 
to imagine applications making mistakes or ignoring the possibility here 
if it's exposed.

>> Out-of-band negotiation means either:
>> a) SDP offer/answer (which in many cases will go via a central server,
>> though it can go over an existing datachannel), min 1 RTT (perhaps
>> 1-RTT-through-server) plus SDP processing delay, and requires implementing
>> error handling for cases where the answers and offers don't properly match
>> up,
> This was my thought.  There is no need to reserve a channel for this
> purpose, that's just extra machinery.  Any app that wants the fast
> path for this will make their own.  And, the nice thing about that is
> that they can do this before setting up the session.

Sure, that's the standard "fast-path" solution.  It's still 1 RTT and a 
lot of processing, and blocks other renegotiations while it's in-flight 
(that's fairly minor, but it would block adding more channels during 
that RTT).  Remember RTT isn't always tens of milliseconds.  Sometimes 
you're on a satellite link with 500+ms of RTT, sometimes you're on the 
other side of the globe with 200+ms RTT, sometimes you're fighting 
congestion or bufferbloat (it happens, and some apps like this may be 
pure-data apps) and you have crazy RTT's like 1 second+.  And if you 
have a non-colocated TURN server (say AUS->AUS via TURN in the US) you 
can have a lot of RTT.  TURN will be expensive; do not expect every app 
to have fully geo-dispersed TURN networks!  However, these are largely 
nits - it's still min 1 RTT an heavy string processing.

>> Are there real usecases where the in-band Open and OpenResponse messages
>> actually cause a usecase not to work?
> Well, given that we need message type stuff, we already have to suffer
> some extra muck on top of the SCTP association.  Not many applications
> will survive that.

Ok, good - I couldn't see how that argument made sense.

> No, the real question is: what value do these messages actually add?
> What information do they convey that isn't already negotiated through
> other channels?

It's an alternative to negotiating it through other channels.  In the 
proposal I just made here on the list, it gets you consistency with 
WebSockets and bidirectional symmetric channels (both also doable by 
other methods like pure-SDP), and 0-RTT opens (not possible in SDP while 
retaining the first set of JS-API-level features).

> Starting a stream with a header that declares attributes for a stream
> sounds nice, but it's completely unnecessary in a vast number of
> cases.  For many cases, this is a case of the same piece of software
> talking to itself - it hardly cares.  In many other cases, negotiation
> of properties through SDP is perfectly sufficient.

Sure, many apps will have (when talking to themselves) a fixed set of 
channels set up at the start, which was what I was attempting to 
optimize given the W3 constraint to wait for a truly-acknowledged 
'onopen' ala WebSockets.  My alternative proposed here is to fire onopen 
immediately (since DataChannels are declarative) and allow 0-RTT opens, 
obviating the need the SDP enhancements presented at the meeting.

We already do have people querying if DataChannels could be used for 
things like GFC avoidance for things like proxied browsing, which (if 
it's doable, which I haven't verified but seems plausible if the user 
grants the app special permissions), which would imply a need for 
low-overhead channel creation.

> The only case I see for an in-band protocol is where you wish to
> invent some new protocol on this platform, and I can't really muster
> up that much enthusiasm for that.  It's far too heavily reliant on my
> imagination.  Even in those cases, my knowledge of existing SCTP usage
> patterns suggest that the properties that are sent in
> Open/OpenResponse messages are not that useful to have.  Many
> applications will use the same values for all new streams.

There are lots of applications I envision (such as games) that will want 
a small mix of reliable and unreliable (or partially-reliable) channels, 
and others that want a mix of priorities (which we haven't talked about 
much, but would allow specifying if a data channel should be higher or 
lower priority than media streams, and perhaps more granularity.  
Control information (low BW) may be higher, file transfer may be lower, 
for example.

Randell Jesup