Re: [rtcweb] Comments on data channel related drafts

"Lijing (Jessie)" <> Fri, 21 February 2014 09:21 UTC

Return-Path: <>
Received: from localhost ( []) by (Postfix) with ESMTP id 8AE041A0049 for <>; Fri, 21 Feb 2014 01:21:27 -0800 (PST)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -4.749
X-Spam-Status: No, score=-4.749 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RP_MATCHES_RCVD=-0.548, SPF_PASS=-0.001] autolearn=ham
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id Yj_yyLfthpWJ for <>; Fri, 21 Feb 2014 01:21:24 -0800 (PST)
Received: from ( []) by (Postfix) with ESMTP id 323D31A0048 for <>; Fri, 21 Feb 2014 01:21:24 -0800 (PST)
Received: from (EHLO ([]) by (MOS 4.3.7-GA FastPath queued) with ESMTP id BDU86080; Fri, 21 Feb 2014 09:21:18 +0000 (GMT)
Received: from ( by ( with Microsoft SMTP Server (TLS) id; Fri, 21 Feb 2014 09:20:59 +0000
Received: from ( by ( with Microsoft SMTP Server (TLS) id; Fri, 21 Feb 2014 09:21:16 +0000
Received: from ([]) by ([]) with mapi id 14.03.0158.001; Fri, 21 Feb 2014 17:21:10 +0800
From: "Lijing (Jessie)" <>
To: Michael Tuexen <>
Thread-Topic: [rtcweb] Comments on data channel related drafts
Thread-Index: AQHPLWLMOA6HXUQ9mEaoGulYw8fFA5q+MQuAgAEsC4A=
Date: Fri, 21 Feb 2014 09:21:10 +0000
Message-ID: <>
References: <> <>
In-Reply-To: <>
Accept-Language: zh-CN, en-US
Content-Language: zh-CN
x-originating-ip: []
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-CFilter-Loop: Reflected
Cc: "" <>
Subject: Re: [rtcweb] Comments on data channel related drafts
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: Real-Time Communication in WEB-browsers working group list <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Fri, 21 Feb 2014 09:21:27 -0000


Thanks a lot to Michael's interpretation, and it is really helpful.

Two more issues to be discussed:
1. I am still not quite sure what "PPID based fragmentation and reassembly " is. Does it mean SCTP performs segmentation and reassembly based on the path MTU? Or it refers to other method or protocols?

2. The priority of data channel involves two aspects, one aspect is priority of one data channel compared with priority of other data channels, and the other aspect is priority of one data channel compared with audio and video media stream tracks. If the data channel priority is settable via JS API, then the audio and video priority should also be set via JS API in a way. I think the priority should be set considering all the media types including audio, video and data channel.

-----Original Message-----
From: Michael Tuexen [] 
Sent: Friday, February 21, 2014 6:13 AM
To: Lijing (Jessie)
Subject: Re: [rtcweb] Comments on data channel related drafts

On Feb 19, 2014, at 12:07 PM, Lijing (Jessie) <> wrote:

> Hi,
> Several comments on data channel related drafts.
> Firstly, There are several "protocol" concepts appeared in different data channel related drafts, and it seems there is no clear statement about the relationship between these concepts.
> draft-ietf-rtcweb-data-protocol has two protocol concept:
> 1.  The protocol byte in data channel open message defined as the protocol for the channel.
> 2.  SCTP payload protocol identifier (PPID)
> WebRTC W3C API has one protocol concept, 3.  Protocol defined as 
> "Subprotocol name used for this channel"
> Q1: is the W3C API parameter "protocol" be the same as the protocol byte in the data channel open message?
Correct. The DOMString protocol provided in the W3C API in negotiated in the DATA_CHANNEL_OPEN message as the protocol field. Please note that the Protocol field in the DATA_CHANNEL_OPEN message is not a byte, but a string.
> In previous email discussion, Peter Thatcher said :
> "The PPID isn't exposed to the application.  It's just used to
> distinguish text/binary/control.    If an application uses different
> data channels with different protocols, it should use the SID to distinguish between them, not the PPID.  In fact, even if it wanted to use the PPID, it wouldn't be able to."
Data channels are identified by the SID on the wire, which corresponds to the id field in the W3C API.
The JS API has no access to the PPID.
> Q2: if the answer of Q1 is yes. Then an application can distinguish different data channels with different protocols by the protocol byte in the data channel open message. Is my understanding right?
Not sure what the application is. The W3C API lets you distinguish the data channels, since you have different objects for it.
> draft-ejzak-mmusic-data-channel-sdpneg provides a way to negotiate sub-protocol parameters out of band.
> 4.  Sub-protocol: The 'sub-protocol' parameter indicates which protocol the client expects to exchange via the channel. 
> example: a=dcmap:5000 stream=2;label="channel 2"; 
> subprotocol="BFCP";max_retr=3
> Q3: is this "subprotocol" be the same concept as the protocol byte in the data channel open message? And the W3C API "protocol" should be set as BFCP?
Again: there is no protocol byte... It is a string and is is the subprotocol...
> ======================================================================
> ==
> Secondly, in draft-ietf-rtcweb-data-channel-07, section 8 defines the following PPIDs
>       +------------------------------------+-----------+-----------+
>       | Value                              | SCTP PPID | Reference |
>       +------------------------------------+-----------+-----------+
>       | WebRTC String                      | 51        | [RFCXXXX] |
>       | WebRTC Binary Partial (Deprecated) | 52        | [RFCXXXX] |
>       | WebRTC Binary                      | 53        | [RFCXXXX] |
>       | WebRTC String Partial (Deprecated) | 54        | [RFCXXXX] |
>       +------------------------------------+-----------+-----------+
> Q4: It is confusing what is the intention to define "WebRTC Binary Partial" and "WebRTC String Partial". I guess these two PPIDs are provided to the application in the case when application supports fragmentation of large messages. But, at the meantime, in this draft, section 6.6 also says: The usage of the PPIDs "WebRTC String Partial" and "WebRTC Binary Partial" is deprecated. Why the usage is deprecated? Does this implies that SCTP layer is responsible for fragmentation of large messages, and it is unnecessary for the upper application to implement the fragmentation of large messages?
Section 6.6 explains it:

The usage of the PPIDs "WebRTC String Partial" and "WebRTC Binary Partial" is deprecated. They were used for a PPID based fragmentation and reassembly of user messages belonging to reliable and ordered data channels.
> Q5: Since PPID 52 and 54 are defined, then how can the browser know whether the data sent from the upper application layer is a part of a whole message and the SCTP PPID should be signaled as Partial 52/54, or this is a whole message and should be signaled as 51/54?
The PPIDs 52 and 54 were intended to implement fragmentation/reassembly inside the data channel implementation.
This is how it is implemented in Firefox. There is now way to access it from the JS API.
However, the usage is deprecated and therefore you don't need to implement it.
> Q6: if one side wants to send two messages, and the application split the first big message to two packages, then the browser will send three SCTP packages whose PPID are 54(part of first message), 51(part of first message), 51(the whole second message) respectively. When the receiver side receives these three SCTP packages, how can the receiver side know which two SCTP packages can be assembled to get the first big message?
It worked only for ordered reliable data channels. So the sequence was used. Once you got PPID 51, the message is complete.
> ======================================================================
> ===
> The last question, which I have asked in previous email and have not received any response until now, so I mention this question again.
> in draft-ietf-rtcweb-data-channel-07, Section 4 says:
>    Req. 4:   The application SHOULD be able to provide guidance as to
>              the relative priority of each data channel relative to each
>              other, and relative to the media streams.  This will
>              interact with the congestion control algorithms.
> And in draft-ietf-rtcweb-data-protocol-03, DATA_CHANNEL_OPEN Message is defined as below
> 0                   1                   2                   3
>     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
>    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>    |  Message Type |  Channel Type |            Priority           |
>    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>    |                    Reliability Parameter                      |
>    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>    |         Label Length          |       Protocol Length         |
>    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>    \                                                               /
>    |                             Label                             |
>    /                                                               \
>    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>    \                                                               /
>    |                            Protocol                           |
>    /                                                               \
>    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
> Priority: 2 bytes (integer)
>       The priority of the channel as described in
>       [I-D.ietf-rtcweb-data-channel].  The higher the number, the lower
>       the priority.
> Q7: It seems that for now there is no W3C API parameters to set the priority of data channel. I wonder whether the priority of the data channel is open to the application or is only decided by the browser. In other words, I want to know how the application be able to provide guidance as to the priority.
You are right. The W3C API does not cover the priority yet. My understanding is that this is missing and needs to be added. I expect that the priority is settable via the JS API.

Best regards
> Best Regards,
> Jessie
> _______________________________________________
> rtcweb mailing list