Re: [rtcweb] Data Channels Proposal: Now in Internet Draft Form
Michael Tuexen <Michael.Tuexen@lurchi.franken.de> Tue, 19 February 2013 21:38 UTC
Return-Path: <Michael.Tuexen@lurchi.franken.de>
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 33E6921F8A25 for <rtcweb@ietfa.amsl.com>; Tue, 19 Feb 2013 13:38:10 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.999
X-Spam-Level:
X-Spam-Status: No, score=-1.999 tagged_above=-999 required=5 tests=[BAYES_00=-2.599, J_CHICKENPOX_12=0.6]
Received: from mail.ietf.org ([64.170.98.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id zx+eZzEMyKKE for <rtcweb@ietfa.amsl.com>; Tue, 19 Feb 2013 13:38:09 -0800 (PST)
Received: from mail-n.franken.de (drew.ipv6.franken.de [IPv6:2001:638:a02:a001:20e:cff:fe4a:feaa]) by ietfa.amsl.com (Postfix) with ESMTP id 71A5D21F89E5 for <rtcweb@ietf.org>; Tue, 19 Feb 2013 13:38:08 -0800 (PST)
Received: from [192.168.1.101] (p5481BE76.dip.t-dialin.net [84.129.190.118]) (Authenticated sender: macmic) by mail-n.franken.de (Postfix) with ESMTP id 975001C0B4610; Tue, 19 Feb 2013 22:38:05 +0100 (CET)
Mime-Version: 1.0 (Apple Message framework v1283)
Content-Type: text/plain; charset="us-ascii"
From: Michael Tuexen <Michael.Tuexen@lurchi.franken.de>
In-Reply-To: <CABkgnnUVAZea4SyjLwqywSF9zxnrHDjOr1VpxaPE0pgWeTraLg@mail.gmail.com>
Date: Tue, 19 Feb 2013 22:38:04 +0100
Content-Transfer-Encoding: quoted-printable
Message-Id: <B3D6C370-9618-4A1F-9260-8AFD76D4EC9D@lurchi.franken.de>
References: <CABkgnnXR5Gp-C8G6AyHDMKKqE=xohkN-GKYV-=B1BhqHkxdHDw@mail.gmail.com> <512319DE.1080602@jesup.org> <CABkgnnUVAZea4SyjLwqywSF9zxnrHDjOr1VpxaPE0pgWeTraLg@mail.gmail.com>
To: Martin Thomson <martin.thomson@gmail.com>
X-Mailer: Apple Mail (2.1283)
Cc: Randell Jesup <randell-ietf@jesup.org>, "rtcweb@ietf.org" <rtcweb@ietf.org>
Subject: Re: [rtcweb] Data Channels Proposal: Now in Internet Draft Form
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: Tue, 19 Feb 2013 21:38:10 -0000
On Feb 19, 2013, at 8:43 PM, Martin Thomson wrote:
> On 18 February 2013 22:21, Randell Jesup <randell-ietf@jesup.org> wrote:
>> *tl;dr:***I believe this actually ends up with more total complexity,
>> especially in terms of the API presented to users/JS code, with little or no
>> practical win in usecases or reduction in total code. It feels at times
>> like it's optimizing for some unspoken legacy SCTP application, or that it's
>> a general preference to using it like raw SCTP and all else (negotiation,
>> etc) is merely to satisfy (mostly) the W3's requirements. ("If you care
>> about consistency...")
>
> I'm sensitive to the (potential) need for CLUE to use these channels.
> An in-band protocol makes that difficult.
>
> It does make M3UA implementation possible, as opposed to impossible.
Martin,
I don't understand why you are referring here (and in you ID) to
M3UA being transferred over an RTCWeb Datachannel. Are you envisioning
running an STP in a browser?
Best regards
Michael
> But yes, I'm fairly sure that the set of people who care about that
> sort of thing is very small, if not zero. The legacy cases are for
> amusement value only.
>
>> Comments:
>> "The ability to use as many SCTP features as possible" - your draft
>> certainly attempts to provide that, but that was generally rejected as a
>> requirement in the past. Exposing those features (even if they exist in
>> SCTP) has a cost, both in API complexity and in testing. If I make
>> per-packet markings visible, I need to build tests for all those fun edge
>> cases.
>
> Like sending packets with different properties? Doesn't sound
> especially hard. It might even make some test cases easier to write.
>
> Sure, an implementation now likely has to track more state on a
> per-message basis, rather than referencing a channel-global, but
> that's really very minor.
>
>> *2. Overview:*
>> Differences:
>> Your draft ties Channels in a 1-1 mapping to specific stream numbers which
>> are exposed. The current draft ties them to pairs of streams (hidden),
>> which may or may not be identical in number.
>
> Your draft does expose stream numbers in SDP. Neither proposal
> requires that application be aware of the numbers.
>
>> Your draft has ways where race conditions can cause channel creation
>> failure, or if the other side rejects, etc. The current draft only really
>> can fail due to the association failing or a failure to increase the number
>> of streams.
>
> That's a false comparison. Stream adds can always fail in either
> proposal - there aren't an unlimited number of streams. Either could
> raise the stream limit. jesup-rtcweb-data-protocol assumes that this
> is always possible, which is not the case.
>
> This proposal doesn't permit rejecting of new channels, so I don't
> know how you inferred that. You can close immediately, which should
> suffice.
>
> The real race condition is a glare case where both sides add the
> "same" stream. For this proposal, that's based on stream number; for
> your proposal, it's based on label. I didn't see how
> jesup-rtcweb-data-protocol proposes to resolve the glare caused when
> two open requests pass in flight for the same label, but this proposal
> only cares if you are performing offer/answer negotiation and that
> glare problem is already solved.
>
>> There are some significant missing pieces to the SDP negotiation part, at
>> least at the W3 layer (which I realize this draft isn't, but we need to
>> consider it in our design). Unlike media, we don't have good ways to
>> extract the datachannels offered/etc; the best I can think of would be to
>> create all the datachannels offered on setRemoteDescription and fire events
>> for them, and in response to the event if you want to reject it close() the
>> stream before createAnswer. But this is tricky, since all the onXXXX's are
>> async and so when do you call createAnswer? This seems an unspecified and
>> thorny bit of JS API to define. Doable, sure, but considerable complexity
>> and increased async-ness for minimal gain (IMO).
>
> I see, if you wanted to reject a channel, how would you do it? That's
> a problem in either proposal. This is potentially far worse for your
> proposal. I suspect that the only real option would be to
> setRemoteDescription(), which could populate pc.dataChannels[]
> immediately (and prior to firing the ondatachannel events). Then you
> could investigate and close in a synchronous fashion.
>
> I always imagined that this would happen for media as well, noting
> that streams might be slightly more challenging than something that
> has all the properties present in the SDP.
>
>> I seriously dislike "it may fail if the other side used the channel". Why
>> create such error paths and ways to break your app when there's no need to?
>> Is this needed for interfacing with some sort of legacy system?
>
> I think that you misread this one. If I create channel 3 and then try
> to create another channel 3, then that should fail. I assume that you
> don't permit two channels with the same label in your proposal either.
>
>> This means that to emulate a WebSockets channel, you'd need to (likely)
>> negotiate it in SDP (especially given the label and protocol fields).
>
> It doesn't matter how you create the channel. You can emulate
> WebSockets in a number of ways (I believe that the default values for
> channels produce WebSockets-compatible properties. If you want to
> signal "protocol" (label isn't a WebSockets concept), then yes, a
> round trip is needed. You could run an offer/answer round, or your
> own application-specific signaling. That round trip could be after
> creating the channel, depending on your application needs.
>
>> I don't see how apparently raw SS7 intererop is involved here. Is this a
>> new usecase?
>
> See above. These little jokes keep me from going (more) batty.
>
>> How is this better for the application than the current draft (assuming 0
>> RTT setup)?
>
> I don't think that the assumption is valid, so I'm not sure the
> question is either.
>
>> *3.1 Negotiation*
>> Differences:
>> In your draft, properties can be offer/answer negotiated. In the current
>> draft, all properties are declarative; there is no negotiation over the
>> properties.
>
> You don't have negotiation, sure. I think that you just have
> unresolved glare scenarios.
>
>> Comments:
>> If you actually want to offer/answer over the properties you need to define
>> all the O/A semantics, and then how to surface those to the app. This adds
>> a lot of edge and error cases to deal with unless you define that no actual
>> negotiation occurs. You can punt and say all that is the apps business, but
>> then you're back a "bad days" case having the app parse SDP, etc.
>
> Given that the SDP is declarative, I don't see how this is
> substantively different from your proposal. The 1.5RTT one.
>
>> What are we gaining in practice here? What usecase will use actual
>> negotiation here, or is it just a way to implement consistent declarative
>> properties? (And there are still edge/error cases to deal with and at least
>> ignore).
>
> In practice, we are providing a service for applications that care
> about property consistency. This says, "Here, you need to do
> offer/answer anyway. As long as you are doing O/A, we can use that to
> ensure that your data channels match up nicely."
>
>> The current draft keeps things simple since there's no penalty really for
>> setting up a channel you're not interested in - if you don't want it, just
>> call "newchannel.close()".
>
> I don't see how that is different, or relevant.
>
>> **4. Available Data Channel Properties*
>> Differences:
>> Your draft specs a full set of possible SCTP properties and makes all but
>> streamId mutable at any time. The current draft has a much smaller set of
>> properties (label, protocol, reliable, ordered, readystate, bufferedamount,
>> binarytype). Only binarytype is mutable. The only ones added vs WebSockets
>> are reliable and ordered.
>
> ... and label. That's new too.
>
> I'm ok with having less flexibility with respect to reliability. I
> was only being complete for the first pass.
>
>> *5. SDP Format*
>> Differences:
>> Like what I proposed for the "1.5 RTT init SDP shortcut" in Boston, you have
>> to specify each channel and all the properties. The current draft (using
>> the 0-RTT proposal) only needs to specify the protocol and protocol-level
>> options like default number of streams.
>
> Yes, that's clearly the biggest difference between this and your 0-RTT
> in-band proposal: where these extra bits are passed.
>
>> Comments:
>> If this is O/A, it has a similar set of issues to m-lines, though they can
>> go away since they have a stream number attached. But you have to include
>> all active ones in each O/A exchange.
>
> That's a good thing. I believe in clear expressiveness over saving
> bytes. gzip exists so that we don't have to make bad compromises in
> these trade-offs.
>
>> What happens if you mutated the
>> properties on one side in order to do packet-by-packet option selection.
>> Does that mirror into SDP? Does the other side then change?
>
> Good question. I didn't put that in the draft in part because it's
> API-stuff, in part because I forgot.
>
> The current values for properties should appear in the SDP when it is
> generated. If the answerer doesn't have that channel, it is required
> to create one with matching properties. This is the entirety of the
> negotiation that goes on. If the answer already has a channel, it
> doesn't change that local channel properties. The answer includes the
> properties that the answer has for the channel. The offerer might
> learn of channels from an answer, and consequently should pass a new
> channel object with matching properties to the app.
>
>> Since changing
>> them on one side doesn't generate a negotiation-needed, if you echo the
>> changes you could get surprised when negotiations happen for other reasons.
>
> Changing properties doesn't trigger the need for negotiation, sure,
> but creating the channel does. I can't imagine any scenario where the
> outcome of changes is surprising.
>
>> If it's purely declarative and doesn't track changes, it's more doable, but
>> what happens if one side removes a channel in the O/A?
>
> Removal/rejection was something I didn't add. On purpose. Close the
> channel if you don't want it.
>
>> And can the answerer
>> in the initial exchange add channels? If so, what does the offerer do; is
>> this real negotiation? Does this trigger negotiation-needed?
>
> Yes. The offerer is expected to create a matching channel and pass it
> to the app.
>
> No, this is not "real" negotiation. That's because negotiation of the
> sort that is performed when selecting codecs is not required.
>
>> Side note: the syntax won't work as the SCTP/DTLS spec allows for multiple
>> associations; people like Cullen and others have argued for that being
>> allowed for the generic case of SCTP over DTLS (the SCTP SDP spec isn't
>> *just* for DataChannels in WebRTC). But it could be reworked into a syntax
>> that would work closer the what I presented.
>
> That's unfortunate. I did make an explicit note about this
> assumption. BTW, my preferred solve is:
>
> a=sctp-port:5000
>
> ...with all the negative consequences that implies.
> _______________________________________________
> rtcweb mailing list
> rtcweb@ietf.org
> https://www.ietf.org/mailman/listinfo/rtcweb
>
- Re: [rtcweb] Data Channels Proposal: Now in Inter… Randell Jesup
- [rtcweb] Data Channels Proposal: Now in Internet … Martin Thomson
- Re: [rtcweb] Data Channels Proposal: Now in Inter… Martin Thomson
- Re: [rtcweb] Data Channels Proposal: Now in Inter… Michael Tuexen
- Re: [rtcweb] Data Channels Proposal: Now in Inter… Randell Jesup
- Re: [rtcweb] Data Channels Proposal: Now in Inter… MARCON, JEROME (JEROME)
- Re: [rtcweb] Data Channels Proposal: Now in Inter… Martin Thomson
- Re: [rtcweb] Data Channels Proposal: Now in Inter… MARCON, JEROME (JEROME)
- Re: [rtcweb] Data Channels Proposal: Now in Inter… Martin Thomson