Re: [rtcweb] Data Channel Negotiation and reopening of decisions

Michael Tuexen <Michael.Tuexen@lurchi.franken.de> Sat, 16 February 2013 18:03 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 6938521F8970 for <rtcweb@ietfa.amsl.com>; Sat, 16 Feb 2013 10:03:52 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.599
X-Spam-Level:
X-Spam-Status: No, score=-2.599 tagged_above=-999 required=5 tests=[AWL=0.000, BAYES_00=-2.599]
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 nF-KfZn-DJZm for <rtcweb@ietfa.amsl.com>; Sat, 16 Feb 2013 10:03:51 -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 7D55921F8964 for <rtcweb@ietf.org>; Sat, 16 Feb 2013 10:03:51 -0800 (PST)
Received: from [192.168.1.101] (p508F9EB1.dip.t-dialin.net [80.143.158.177]) (Authenticated sender: macmic) by mail-n.franken.de (Postfix) with ESMTP id 82A8E1C0C069D; Sat, 16 Feb 2013 19:03:50 +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: <511FBEAC.4070605@jesup.org>
Date: Sat, 16 Feb 2013 19:03:50 +0100
Content-Transfer-Encoding: quoted-printable
Message-Id: <FF4810D7-5684-4FC6-8ED3-AE663CADE786@lurchi.franken.de>
References: <CABkgnnWUpMSBLioSD2+p82vGszX9R0Q4WFfME5j-DuK+B7KVJw@mail.gmail.com> <CABkgnnW792o76t9dKhidOMJpa21VcbPQZFU1HYnY_yjTPCWhYw@mail.gmail.com> <51166A3C.4000604@jesup.org> <CABkgnnV2m=m+qtM1YR4CPse=gyekvWThon_Nxbf8YMVaNuvq6Q@mail.gmail.com> <511B6C9A.4090904@jesup.org> <CABkgnnUiCKuv_=mgLFf4sRnOb1bY190N7E_+V8gfTbKEUTBnDw@mail.gmail.com> <511CB20C.7020003@jesup.org> <CABkgnnU0idt+ntpKjTCMUCVFO9=_fSjGRPikD6Nk_Uem3L7E8g@mail.gmail.com> <89FAFB5C-9D03-4B76-A306-01F9E4EC4105@lurchi.franken.de> <CABkgnnXFrqTo2QpLhjWt5CmcQc6Kv4=vAgd3DgyndNtL1ewm7g@mail.gmail.com> <8E2722E7-F82A-48D4-80FB-C76929A2E324@lurchi.franken.de> <CABkgnnWzX2tpbadnB3DjhmB7cm6poCDvmxdAW2Z_stMbovJ3gw@mail.gmail.com> <A0FDFC7C-2C85-431C-A03E-0E486F9378D1@lurchi.franken.de>, <CABkgnnWdjV7F9jkbap91q-pLygzWJsTvAOh-m=-9q4VrU9DGUg@mail.gmail.com> <DA07C056-3E80-4E30-B078-5547A174549D@skype.net>, <6106C927-127F-4514-A688-3BC138B0C4B3@lurchi.franken.de> <6D8A7B42-C24C-405D-B5A0-6A95F6F52554@skype.net> <511FBEAC.4 070605@jesup.org>
To: Randell Jesup <randell-ietf@jesup.org>
X-Mailer: Apple Mail (2.1283)
Cc: rtcweb@ietf.org
Subject: Re: [rtcweb] Data Channel Negotiation and reopening of decisions
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: Sat, 16 Feb 2013 18:03:52 -0000

On Feb 16, 2013, at 6:15 PM, Randell Jesup wrote:

> On 2/16/2013 10:33 AM, Matthew Kaufman (SKYPE) wrote:
>> Can you describe the "simple protocol to realize bi-directional data channels by combining two uni-directional streams" without referring to any of what now appear to be unresolved issues?
> 
> Let me try to succinctly summarize the low-level protocol (details are in the draft).  This is the wireline protocol, which can support 0 RTT usage.  It's pretty darn simple as protocols go.
> 
> This assumes the association has been created.
> 
> 1) when one side wishes to open a channel with a given set of characteristics (label, IANA websockets-protocol, reliability options), it selects an unused outgoing stream X and sends Open on stream X.
> 
> 1a) the Channel is now open on the sender's side and can be used for send(); but note that until an OpenResponse is received, the in-order bit will be set on any data packets
> 
> 2) when an Open request is received (on any stream not already in-use), a reverse-direction outgoing stream Y is selected.  An OpenResponse(X) is sent on stream Y, and the application is notified a stream has been created.
> 
> 2a) the Channel is now open on the receiver's side and can be used for send(), but note that until an ACK is received, the in-order bit will be set on any data packets.
> 
> 3) when an OpenResponse(X) is received on an unused channel (Y), it's paired with X, and an ACK is sent on X.  The in-order bit is no longer forced on.
> 
> 4) when an ACK is received on a channel, the in-order bit will no longer be forced on when sending data.
> 
> 
> And that is basically it.
... already including the 0 RTT optimization.

Without it:
(a) Endpoint A selects one of its outgoing streams, sends an OpenRequest on it containing the label and reliability parameter.
(b) Endpoint B selects one if its outgoing streams, send an OpenResponse on it containing the incoming stream identifier on
    which the OpenRequest was received.
(c) Endpoint A sends an OpenAck.

(a) is used to "negotiate" the parameters of the data channel.
(b) is used to tie together the streams in both directions.

That is all. A simple three way handshake.
Randell's optimizations allow to send userdata right after (a).

Best regards
Michael
> 
>> On Feb 16, 2013, at 7:23 AM, "Michael Tuexen" <Michael.Tuexen@lurchi.franken.de> wrote:
>> 
>>>> None if this would be a problem if we weren't making the mistake of using SCTP, which itself made the mistake of doing full-duplex channels instead of unidirectional channels with optional one-to-one or even many-to-one associations (as RTMFP has, as an example)
>>> SCTP streams uni-directional. That is why we use a simple protocol to realize bi-directional
>>> data channels by combining two uni-directional streams.
>>> SCTP association, however, are point-to-point. The API (1-to-many style) allows sending
>>> a single messages (a single send() call) on all associations belonging to that socket.
>>> 
> 
> 
> -- 
> Randell Jesup
> randell-ietf@jesup.org
> 
> _______________________________________________
> rtcweb mailing list
> rtcweb@ietf.org
> https://www.ietf.org/mailman/listinfo/rtcweb
>