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

Paul Kyzivat <pkyzivat@alum.mit.edu> Wed, 12 February 2014 03:51 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 CADF41A07A9 for <rtcweb@ietfa.amsl.com>; Tue, 11 Feb 2014 19:51:42 -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 c8jr7bZyHcMR for <rtcweb@ietfa.amsl.com>; Tue, 11 Feb 2014 19:51:40 -0800 (PST)
Received: from qmta13.westchester.pa.mail.comcast.net (qmta13.westchester.pa.mail.comcast.net [IPv6:2001:558:fe14:44:76:96:59:243]) by ietfa.amsl.com (Postfix) with ESMTP id 21D751A033A for <rtcweb@ietf.org>; Tue, 11 Feb 2014 19:51:40 -0800 (PST)
Received: from omta14.westchester.pa.mail.comcast.net ([76.96.62.60]) by qmta13.westchester.pa.mail.comcast.net with comcast id RFkQ1n0091HzFnQ5DFrfbm; Wed, 12 Feb 2014 03:51:39 +0000
Received: from Paul-Kyzivats-MacBook-Pro.local ([50.138.229.164]) by omta14.westchester.pa.mail.comcast.net with comcast id RFre1n00m3ZTu2S3aFrfXw; Wed, 12 Feb 2014 03:51:39 +0000
Message-ID: <52FAEFCA.6070902@alum.mit.edu>
Date: Tue, 11 Feb 2014 22:51:38 -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: Peter Thatcher <pthatcher@google.com>
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> <52F9786F.60809@alum.mit.edu> <CAJrXDUEgr91ATJVFJcabzhavGBiX9MUgMimNKWFVPcdjL2Xbbw@mail.gmail.com>
In-Reply-To: <CAJrXDUEgr91ATJVFJcabzhavGBiX9MUgMimNKWFVPcdjL2Xbbw@mail.gmail.com>
Content-Type: text/plain; charset="UTF-8"; format="flowed"
Content-Transfer-Encoding: 8bit
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=comcast.net; s=q20121106; t=1392177099; bh=fzvJyytQo5mToq3Ga7X1/JtFlHUfy5z3jVPmXckDTUU=; h=Received:Received:Message-ID:Date:From:MIME-Version:To:Subject: Content-Type; b=dspqHnstV3XvLxDCGf2JlNPGZyWqa/9ezVBWanPs7oisSoZFAC/nquFd1UxUT0D+e qfmHUgXKKbdabUHPuanjz1LBHJRQQR391spOKICSSU0t/x/PvAyXWA7rM8ndTX+6+T h5CgBIDQ8Jhrmm0hp3yYEuSpzkKr+QZDP/ijcIkf5iUWn7nRY588d5N7aZhXOwtO/U +Od+yXXPwjVweVp9zV+7iKqogy4BpsN3NNbWxv5Iwn3yP+auI40rbu0sS8J7U49p4O 799K9s/skqJqNgzXPj0GleUiiG89Dlv+T5xbg0RpDH95XUp60fkBZb8Kz9Poqc0CBi cjDE5M75Ep4og==
Cc: "<rtcweb@ietf.org>" <rtcweb@ietf.org>
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: Wed, 12 Feb 2014 03:51:43 -0000

On 2/11/14 1:06 PM, Peter Thatcher wrote:
> I believe the API already gives you all the tools you need for this use
> case.  Here's one way to create a data channel where both ends call
> createDataChannel() at the same time, with no "middle":
>
> 1.  Both sides call createDataChannel() with the same label.
> 2.  If an endpoint ends up with two data channels with the same label,
> close the one with the higher .id, and keep the one with the lower .id.
>
> Now both sides will use the same channel, and you can pretend like the
> other never existed.   If you're worried about data sent before this
> process completes, either accept data on both channels for a while, or
> don't send data until the process completes.
>
> Is there any reason this would not work?

This seems reasonable to me.

	Thanks,
	Paul

> On Mon, Feb 10, 2014 at 5:10 PM, Paul Kyzivat <pkyzivat@alum.mit.edu
> <mailto:pkyzivat@alum.mit.edu>> wrote:
>
>     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 <mailto:rtcweb@ietf.org>
>         https://www.ietf.org/mailman/__listinfo/rtcweb
>         <https://www.ietf.org/mailman/listinfo/rtcweb>
>
>
>     _________________________________________________
>     rtcweb mailing list
>     rtcweb@ietf.org <mailto:rtcweb@ietf.org>
>     https://www.ietf.org/mailman/__listinfo/rtcweb
>     <https://www.ietf.org/mailman/listinfo/rtcweb>
>
>