Re: [rtcweb] Data Channel Protocol: Prevent DATA_CHANNEL_OPEN glare

Paul Kyzivat <pkyzivat@alum.mit.edu> Tue, 11 February 2014 01:10 UTC

Return-Path: <pkyzivat@alum.mit.edu>
X-Original-To: rtcweb@ietfa.amsl.com
Delivered-To: rtcweb@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 9DDD61A0641 for <rtcweb@ietfa.amsl.com>; Mon, 10 Feb 2014 17:10:10 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.235
X-Spam-Level:
X-Spam-Status: No, score=-1.235 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, SPF_SOFTFAIL=0.665] autolearn=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 4qZCVrh2ZFoe for <rtcweb@ietfa.amsl.com>; Mon, 10 Feb 2014 17:10:08 -0800 (PST)
Received: from qmta08.westchester.pa.mail.comcast.net (qmta08.westchester.pa.mail.comcast.net [IPv6:2001:558:fe14:43:76:96:62:80]) by ietfa.amsl.com (Postfix) with ESMTP id 8D6CB1A0630 for <rtcweb@ietf.org>; Mon, 10 Feb 2014 17:10:08 -0800 (PST)
Received: from omta02.westchester.pa.mail.comcast.net ([76.96.62.19]) by qmta08.westchester.pa.mail.comcast.net with comcast id Qovo1n0020QuhwU58pA71H; Tue, 11 Feb 2014 01:10:07 +0000
Received: from Paul-Kyzivats-MacBook-Pro.local ([50.138.229.164]) by omta02.westchester.pa.mail.comcast.net with comcast id QpA71n00U3ZTu2S3NpA7tb; Tue, 11 Feb 2014 01:10:07 +0000
Message-ID: <52F9786F.60809@alum.mit.edu>
Date: Mon, 10 Feb 2014 20:10:07 -0500
From: Paul Kyzivat <pkyzivat@alum.mit.edu>
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:24.0) Gecko/20100101 Thunderbird/24.3.0
MIME-Version: 1.0
To: rtcweb@ietf.org
References: <7594FB04B1934943A5C02806D1A2204B1D166CFA@ESESSMB209.ericsson.se> <4616BFFA-F461-4CE8-9D85-211B86D4BE93@lurchi.franken.de> <7594FB04B1934943A5C02806D1A2204B1D166D7B@ESESSMB209.ericsson.se> <71288EED-3C82-44A7-950B-EFEFA62616E6@lurchi.franken.de> <7594FB04B1934943A5C02806D1A2204B1D166F8C@ESESSMB209.ericsson.se>, <EDF758D1-A388-40D4-83EA-238C7DC82F31@lurchi.franken.de> <7594FB04B1934943A5C02806D1A2204B1D167A2E@ESESSMB209.ericsson.se>
In-Reply-To: <7594FB04B1934943A5C02806D1A2204B1D167A2E@ESESSMB209.ericsson.se>
Content-Type: text/plain; charset="windows-1252"; format="flowed"
Content-Transfer-Encoding: 8bit
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=comcast.net; s=q20121106; t=1392081007; bh=E9Id14Mq54mRMN9nMQ4abpC152U4H/Cl3aJ1qCeUbIo=; h=Received:Received:Message-ID:Date:From:MIME-Version:To:Subject: Content-Type; b=nxJWiUzlEdvdTfa/fSRPeR/w0PbjlaDlSLXuVQ6/camBi9s7m0qIJES1CqinFJbRO l/I2QjYSTfqkRXfztSkl8q+mjZ4xqOnzprShqhJ7KWur7lj6OSM6s44r+u08YMUpMg NBpEzYrl3sqC+211AiTixtkpj255htugwQqdGgALKBIm3VCoF2yrr68HgMzwvHHard IaSpCtyAPUZA6OBCtlOKEHMuKorZ2z/fXBmYA/QjcKJ1QKxY6hYBPECo4oVZYuYRjb 8Dh3tLoxQzPH3GNllI/40xf4154870U99yXt3t0eomVyOmP0ksa5uEtfGZEmM6zy0t 1tN0GZICWz01A==
Subject: Re: [rtcweb] Data Channel Protocol: Prevent DATA_CHANNEL_OPEN glare
X-BeenThere: rtcweb@ietf.org
X-Mailman-Version: 2.1.15
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: Tue, 11 Feb 2014 01:10:10 -0000

You two guys are talking past one another.

Christer's point is that the *application" distributed between the two 
endpoints, needs a *single* instance of a channel for a particular 
application specific purpose. But the two ends are generally symmetric. 
There is no obvious choice of which side should create the channel. So 
how do we use the mechanism to achieve this result?

I think I can predict what Michael is going to say: it isn't a protocol 
issue - the two ends should negotiate this some other way. (In the 
normal rtcweb scenario, a *single* app in the middle can arrange for one 
side to do the open.)

This is a problem with a sip app - there is no middle, just two ends.

Previously Christer said:

> Couldn’t we e.g. say that, by default, the DTLS client is responsible for sending the DATA_CHANNEL_OPEN? Then there is no risk for glare, and it could even use both an even or odd stream id value.

That is a bad thing for data channel in general. But I suppose the app 
can choose to follow this rule if it wants for particular channels.

	Thanks,
	Paul





On 2/10/14 12:29 PM, Christer Holmberg wrote:
>
> Hi,
>
>>>>>>> As is defined in the data channel protocol, an entity can send data once DATA_CHANNEL_OPEN has been sent, before the associated DATA_CHANNEL_ACK is received.
>>>>>>>
>>>>>>> The draft also says that, if both endpoints send DATA_CHANNEL_OPEN at the same time, using different stream id values, the result may be TWO data channels, with data sent on both.
>>>>>>>
>>>>>>> However, as is also indicated, the draft does not provide a mechanism to prevent/handle such glare situation.
>>>>>>>
>>>>>>> I personally think there shall be a way to prevent such situation, or otherwise I'm sure we are going to end up with interoperability problems.
>>>>>>>
>>>>>>> Couldn't we e.g. say that, by default, the DTLS client is responsible for sending the DATA_CHANNEL_OPEN? Then there is no risk for glare, and it could even use both an even or odd stream id value.
>>>>>> Section 4 reads:
>>>>>>
>>>>>> To avoid glare in opening Channels, each side MUST use either even
>>>>>> or  odd Streams when sending a DATA_CHANNEL_OPEN message.  The method
>>>>>> used to determine which side uses odd or even is based on the
>>>>>> underlying DTLS connection role when used in WebRTC, with the side
>>>>>> acting as the DTLS client using even stream identifiers.
>>>>>>
>>>>>> So there is no problem in setting up data channels.
>>>>>>
>>>>>> This should not be confused by both sides setting up a data channel with the same Label. This ends up in two data channels with the same label.
>>>>>> You can even create more data channels with the same label.
>>>>>
>>>>> My point is that I don't want to end up with more than one channel.
>>>> And you won't, see above.
>>>
>>> I am not sure I understand. What text do you refer to?
>> To avoid glare in opening Channels, each side MUST use either even
>> or  odd Streams when sending a DATA_CHANNEL_OPEN message.  The method
>> used to determine which side uses odd or even is based on the
>> underlying DTLS connection role when used in WebRTC, with the side
>> acting as the DTLS client using even stream identifiers.
>
> That part I understand.
>
> But, this means that both endpoints may send DATA_CHANNEL_OPEN, for the same protocol, and THAT is what I would like to avoid. I don't want to have two bi-directional data channels for the same thing.
>
> For that reason I suggested that we could also specify which endpoint is responsisble for sending DATA_CHANNEL_OPEN.
>
>
>>>> However, there is no mechanism to ensure uniqueness for labels. The WebRTC API already allows one side to create n data channels with the same label.
>>>
>>> I am not saying it should be forbidden to do so. But, for protocol X, I want to end up with ONE data channel between my peers.
>>> Then only one side should create a data channel.
>>>
>>> If I end up with two data channels for protocol X, can I send data on whichever I want to?
>> Sure. These would be two independent bidirectional data channels.
>
> Possible for the same protocol - and that is what I would want to avoid. I want to send my protocol X messages on one data channel, and I would like to receive the protocol X messages from my peer on the same data channel.
>
> Now, one can of course solve this by reseting one of the data channels, but then the question is which endpoint should reset :)
>
> Regards,
>
> Christer
>
> _______________________________________________
> rtcweb mailing list
> rtcweb@ietf.org
> https://www.ietf.org/mailman/listinfo/rtcweb
>