Re: [rtcweb] Data channel setup and signalling

Stefan Håkansson LK <stefan.lk.hakansson@ericsson.com> Thu, 17 November 2011 13:47 UTC

Return-Path: <stefan.lk.hakansson@ericsson.com>
X-Original-To: rtcweb@ietfa.amsl.com
Delivered-To: rtcweb@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 0030021F9A95 for <rtcweb@ietfa.amsl.com>; Thu, 17 Nov 2011 05:47:15 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -6.163
X-Spam-Level:
X-Spam-Status: No, score=-6.163 tagged_above=-999 required=5 tests=[AWL=0.136, BAYES_00=-2.599, MIME_8BIT_HEADER=0.3, RCVD_IN_DNSWL_MED=-4]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id aDASbzfSouie for <rtcweb@ietfa.amsl.com>; Thu, 17 Nov 2011 05:47:15 -0800 (PST)
Received: from mailgw9.se.ericsson.net (mailgw9.se.ericsson.net [193.180.251.57]) by ietfa.amsl.com (Postfix) with ESMTP id 11EC621F9A3A for <rtcweb@ietf.org>; Thu, 17 Nov 2011 05:47:14 -0800 (PST)
X-AuditID: c1b4fb39-b7b3eae00000252a-48-4ec51061ccc6
Received: from esessmw0191.eemea.ericsson.se (Unknown_Domain [153.88.253.125]) by mailgw9.se.ericsson.net (Symantec Mail Security) with SMTP id FD.96.09514.26015CE4; Thu, 17 Nov 2011 14:47:14 +0100 (CET)
Received: from [150.132.141.116] (153.88.115.8) by esessmw0191.eemea.ericsson.se (153.88.115.85) with Microsoft SMTP Server id 8.3.137.0; Thu, 17 Nov 2011 14:47:13 +0100
Message-ID: <4EC5105F.2050506@ericsson.com>
Date: Thu, 17 Nov 2011 14:47:11 +0100
From: Stefan Håkansson LK <stefan.lk.hakansson@ericsson.com>
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.23) Gecko/20110922 Lightning/1.0b2 Thunderbird/3.1.15
MIME-Version: 1.0
To: rtcweb@ietf.org
References: <4EC209EB.3080402@jesup.org>
In-Reply-To: <4EC209EB.3080402@jesup.org>
Content-Type: text/plain; charset="ISO-8859-1"; format="flowed"
Content-Transfer-Encoding: 7bit
X-Brightmail-Tracker: AAAAAA==
Subject: Re: [rtcweb] Data channel setup and signalling
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: Thu, 17 Nov 2011 13:47:16 -0000

On 11/15/2011 07:42 AM, Randell Jesup wrote:
> The signalling discussion and how it touched on data channels got me
> thinking.
>
> One open issue is how we define data channels, both in the "internal"
> case (no interop) and the federated case (which may have the same JS app
> or different ones at either end).
>
> One solution is that all data channels are defined as m= lines.  They
> could be generic "m=data", or they could specify the data to be passed
> in the m= line.  For "public" message structures that might be used by
> different applications (an IM protocol, for example), one would specify
> that in some manner in the media description (perhaps via a MIME type).
> This also implies that any addition or removal (or change to) a data
> channel requires a full replacement OFFER and ANSWER.  If we stick with
> the SDP requirement about never removing m= lines, then the OFFER size
> may become unbounded.
>
> The other option is to have (some) data channels be separate from media,
> in particular app-specific anonymous data channels.  There's no
> requirement for describing the channels if they're private to the app,
> at least to the first approximation.  An app could pre-define data
> channel 3 as a private message structure for game map updates, so long
> as it knows its talking to itself.

I like this. Is there really a need to signal individual data channels 
at all (except for setting up data - one m-line saying "data")?

When data is available the allocation of channels can be handled by the 
app itself with no associated signaling. Either the app knows that 
channel 3 is always used for this and channel 5 for that; or the app 
signals using one predefined channel the contents of the other channels.

For the federated case, there could be a document describing what to use 
the channels for (if needed).


>
> This has advantages in setup time, especially if the data channels are
> dynamic and invoked via another data channel, since there doesn't have
> to be a full offer-answer including the media channels.  You just need
> to make sure the two sides agree on the data to be exchanged and that
> they listen before receiving data.  It has a minor advantage in reducing
> the amount of information leakage to the server about the creation and
> types of streams (and potentially significant metadata about them).
>
>
> A use-case would be a background http proxy-server during chat.  If you
> have to re-OFFER for each data channel that comes and goes to transfer a
> resource, it will both swamp the server and be slow (due to the triangle
> signalling).  If instead the application can open a single control data
> channel, and invoke transfers over it, the application can efficiently
> transfer a high number of URIs.  Are there other ways to do this without
> re-OFFERing constantly?  yes.  But they generally involve building
> protocols on top of an array of long-lasting generic connections.
>
> For example, the control data channel might pass messages (directly
> browser-to-browser) like
> {
>      id: 1,
>      command: "GET",
>      URI: "blah/foo/bar",
>      channel: 5,
> }
> with an answer:
> {
>      id: 1,
>      result: "ok",
>      size: 1234,
> }
> followed by transfer of the URI on data channel 5.  (Note: in this I'm
> assuming an API that lets the app open a specific data channel of the
> peer connection.)
>
> Now, this is contrived, though plausible.  You could pre-open a bunch of
> idle data connections and then re-use them as needed.  The
> counter-argument is that one could write a connection-server library
> that abstracts a bunch of pre-opened data channels into an API for the
> app that works like I described above, though it may require more
> housekeeping and larger fixed resource usage.
>
>
> So.....
>
> Is it worthwhile to consider interfaces/APIs whereby an application
> could directly open data channels with no re-OFFER and implement a
> control protocol similar to the one I described?  Are there other
> use-cases for high-volume data channel create/removal, or where data
> channel latency creation is critical? (my usecase is a little contrived
> since I'm falling asleep a the keyboard.)
>