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

Peter Thatcher <pthatcher@google.com> Tue, 11 February 2014 18:06 UTC

Return-Path: <pthatcher@google.com>
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 8DDD01A0678 for <rtcweb@ietfa.amsl.com>; Tue, 11 Feb 2014 10:06:50 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.926
X-Spam-Level:
X-Spam-Status: No, score=-1.926 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FM_FORGED_GMAIL=0.622, HTML_MESSAGE=0.001, RP_MATCHES_RCVD=-0.548, SPF_PASS=-0.001] autolearn=ham
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 k6EvyvZ497ay for <rtcweb@ietfa.amsl.com>; Tue, 11 Feb 2014 10:06:47 -0800 (PST)
Received: from mail-pd0-x231.google.com (mail-pd0-x231.google.com [IPv6:2607:f8b0:400e:c02::231]) by ietfa.amsl.com (Postfix) with ESMTP id 87A211A0665 for <rtcweb@ietf.org>; Tue, 11 Feb 2014 10:06:46 -0800 (PST)
Received: by mail-pd0-f177.google.com with SMTP id x10so7742193pdj.8 for <rtcweb@ietf.org>; Tue, 11 Feb 2014 10:06:46 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type; bh=oxil+HKPkoWKz8DQVJtu9vCbIVWTg0Rb8W2TKqyG8QM=; b=nFTc2P/ZVUCi6IByKjDNqQPWfDMwGgILk3gu7m8NhqACJtx1WnZqfXcX+Up//aT88S 5ceg5MVQU9PqoAuCNGfsJ0mqH4uX3NlIoBh8Ef7FyGYQxhZy6v/G9Fu8TFFSHatxBNCU zwsa/QctBXZRXUXLcuNPvHDVusb1Hd/tLR8dls2O0vuRXsy+2r/KC4K1HIRTinKFoG/O Eaw1hmvWumPi9tcBRCfGe3UAOtu3SiyWDAfaEBmcezlqouRxEtDvS7IBVqpEUn70GCWw IQJorwIhugVNpB2FBxq6J5Rhnjcx3DB1/kHB/E2N2yUPjWpewi6IKUfREUkw5LZ403ys 2dHg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-type; bh=oxil+HKPkoWKz8DQVJtu9vCbIVWTg0Rb8W2TKqyG8QM=; b=cyKhQAJpLIEa6usUtBZer97zgE+hXBQCE3jcjPqs3NmSFRnKkA91fppPIRuoAYGd8t 448B7GywU7+7OFWvxLxge6Q6DDq5arPoRbkJdaLYPFfCe3ljAhbKU4uVjgRnMP6OoCwb LNXQpFk+TVQI+xNBc2Ye6VUt0e+unKdps495AIxutKriQq9df6FG0SN+y3xFTiJX5yeQ 9iuBq/c6/420rhpO8ISSrn+q7GiLxQAL0B1snisC6DelqmJ+tfM1un7+OZ/+kS+lBOJB JqsFvXkpZdNeusovf/065MMeapmqUhFv9zIx7XegBEmhXXyhwcASq40zDA2HYbmxwu4o 5n0w==
X-Gm-Message-State: ALoCoQmI97rEZxWcXOlYtZ+oe+BZTBl7JGndWvonP176QuyJgRhC9BSYVnWXopEZYkvEZ0/C8Z0tikWNY+h/NNLZRF5pV+MTpt18+0u2DiQoAFn5tRHFYBmLKFthfvS+x3LgJSe4yRHgtMVdSV6TLrTu46XKV4zhD40BPZFnRZXSLfU3BF2GRJAB2FA5vZLW2FCWbPrbM1Oz
X-Received: by 10.68.226.200 with SMTP id ru8mr46233078pbc.77.1392142005923; Tue, 11 Feb 2014 10:06:45 -0800 (PST)
MIME-Version: 1.0
Received: by 10.66.163.234 with HTTP; Tue, 11 Feb 2014 10:06:05 -0800 (PST)
In-Reply-To: <52F9786F.60809@alum.mit.edu>
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>
From: Peter Thatcher <pthatcher@google.com>
Date: Tue, 11 Feb 2014 10:06:05 -0800
Message-ID: <CAJrXDUEgr91ATJVFJcabzhavGBiX9MUgMimNKWFVPcdjL2Xbbw@mail.gmail.com>
To: Paul Kyzivat <pkyzivat@alum.mit.edu>
Content-Type: multipart/alternative; boundary="e89a8ffba0e3bd8c1704f2255158"
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: Tue, 11 Feb 2014 18:06:50 -0000

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?


On Mon, Feb 10, 2014 at 5:10 PM, Paul Kyzivat <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
>> https://www.ietf.org/mailman/listinfo/rtcweb
>>
>>
> _______________________________________________
> rtcweb mailing list
> rtcweb@ietf.org
> https://www.ietf.org/mailman/listinfo/rtcweb
>