[rtcweb] Opening unordered data channel issue

Michael Tuexen <Michael.Tuexen@lurchi.franken.de> Thu, 22 August 2013 15:52 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 C5DD511E8211 for <rtcweb@ietfa.amsl.com>; Thu, 22 Aug 2013 08:52:10 -0700 (PDT)
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 ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 4gQRNm7GYFb8 for <rtcweb@ietfa.amsl.com>; Thu, 22 Aug 2013 08:52:10 -0700 (PDT)
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 DAD0411E820C for <rtcweb@ietf.org>; Thu, 22 Aug 2013 08:52:09 -0700 (PDT)
Received: from [192.168.1.200] (p508F228D.dip0.t-ipconnect.de [80.143.34.141]) (Authenticated sender: macmic) by mail-n.franken.de (Postfix) with ESMTP id 0938F1C0C0693 for <rtcweb@ietf.org>; Thu, 22 Aug 2013 17:52:06 +0200 (CEST)
From: Michael Tuexen <Michael.Tuexen@lurchi.franken.de>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Message-Id: <EA6D9D69-7A0C-4215-8561-04D9FF7BD868@lurchi.franken.de>
Date: Thu, 22 Aug 2013 17:52:06 +0200
To: "<rtcweb@ietf.org>" <rtcweb@ietf.org>
Mime-Version: 1.0 (Mac OS X Mail 6.5 \(1508\))
X-Mailer: Apple Mail (2.1508)
Subject: [rtcweb] Opening unordered data channel issue
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: Thu, 22 Aug 2013 15:52:11 -0000

Dear all,

at the last IETF in Berlin we discussed how to handle the opening of
unordered data channels (no matter wether reliable or not). The problem
to be handled is that it is possible that user messages arrive at the
receiver before the DATA_CHANNEL_OPEN message is received. The result
of the discussion at the meeting was that the best solution is that
the sender sends user messages also ordered (on unordered channels)
until there is an indication from the peer that the DATA_CHANNEL_OPEN
has been processed. This makes sure that the DATA_CHANNEL_OPEN message
is not received before user messages and therefore the above problem
is solved.

The open issue is, what the indication from the peer is. There were
two options discussed at the meeting and it was decided that Randall
Stewart and myself bring this to the list with the pros and cons
of the alternatives. So here are the two options:

(a) Use any user message sent from the peer as an indication.
(b) Use a new ACK message.

Arguments:
* Using (b) introduces a 2-way handshake for unordered data channels.
  However, it also works for data channels being used unidirectional.
* Using (a) stays with the 1-way handshake, but in case of
  data channels being used unidirectional you will not see the benefits
  of unordered delivery.

We had some discussions offline and think that using (b) is the
cleaner solution. Please note that this 2-way handshake is not
similar to the one we had some time ago. The ACK does not contain
any additional information and it does not introduce any delay.
You can send user data right after opening the data channel.

For consistency we would even propose to use this 2 way handshake
for ordered channels. It doesn't have any drawback and would mean
that we use the same handshake for all data channels.

So the proposed procedure for opening an arbitrary data channel is:
1) The opener sends a DATA_CHANNEL_OPEN message ordered and reliable.
2) The opener can start sending user data immediately.
   It will always be sent ordered, no matter whether the data channel
   is ordered or not.
3) The peer will send a DATA_CHANNEL_ACK message ordered and reliable
   in response to the DATA_CHANNEL_OPEN message.
4) After reception of the DATA_CHANNEL_ACK message,
   the opener will sent user messages unordered,
   if the data channel is unordered and ordered, if the
   data channel is ordered.

Any opinions?

Best regards
Michael