Re: [rtcweb] New Version Notification for draft-jesup-rtcweb-data-01.txt

Michael Thornburgh <> Thu, 03 November 2011 01:13 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 07F9311E80FE for <>; Wed, 2 Nov 2011 18:13:55 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -106.599
X-Spam-Status: No, score=-106.599 tagged_above=-999 required=5 tests=[BAYES_00=-2.599, RCVD_IN_DNSWL_MED=-4, USER_IN_WHITELIST=-100]
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id 1jIdyj1duAxK for <>; Wed, 2 Nov 2011 18:13:54 -0700 (PDT)
Received: from ( []) by (Postfix) with ESMTP id 94E6011E80CB for <>; Wed, 2 Nov 2011 18:13:53 -0700 (PDT)
Received: from ([]) by ([]) with SMTP; Wed, 02 Nov 2011 18:13:53 PDT
Received: from ( []) by (8.12.10/8.12.10) with ESMTP id pA31DntS023682 for <>; Wed, 2 Nov 2011 18:13:50 -0700 (PDT)
Received: from ( []) by (8.12.10/8.12.10) with ESMTP id pA31Dm5R007013 for <>; Wed, 2 Nov 2011 18:13:48 -0700 (PDT)
Received: from ([]) by ([]) with mapi; Wed, 2 Nov 2011 18:13:48 -0700
From: Michael Thornburgh <>
To: "" <>
Date: Wed, 2 Nov 2011 18:12:53 -0700
Thread-Topic: [rtcweb] New Version Notification for draft-jesup-rtcweb-data-01.txt
Thread-Index: AcyYRPZLIPNDx8U/RQGa2q6HeLAQ4QBch+sg
Message-ID: <>
References: <> <>
In-Reply-To: <>
Accept-Language: en-US
Content-Language: en-US
acceptlanguage: en-US
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
Subject: Re: [rtcweb] New Version Notification for draft-jesup-rtcweb-data-01.txt
X-Mailman-Version: 2.1.12
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: Thu, 03 Nov 2011 01:13:55 -0000

comments on this draft:

section 3.2: reliable streams would be fairly simple to layer on top of any reliable and in-order datagram delivery service, not just SCTP's.

section 4.1: DCCP is not a good choice when any kind of reliability is desired. i've seen people on this list suggest that some kind of reliability/retransmission scheme can be layered on top of DCCP, and while that's certainly true, it's very un-optimal. DCCP already uses its own sequence numbers and acknowledgements to detect loss events and trigger congestion response, but that information is semantically hidden from higher-level users of DCCP. additional application-layer sequencing AND acknowledgement information must be implemented to 1) recover the original transmission order at the receiver (including waiting for gaps to be repaired, if in-order delivery is desired); and 2) duplicate application-layer loss detection at the sender (driven by the application-layer acks) must be performed to re-determine which segments were lost so they can be retransmitted. that sucks because, under the covers, DCCP already knew exactly which segments were lost and was in the best position to trigger (fast-) retransmission if appropriate.

general comments on SCTP:

Matthew and i examined SCTP when we were designing MFP (the predecessor of RTMFP). in fact, if you look at the MFP protocol spec in the Internet Archive, you might notice a suspicious similarity to SCTP's chunk scheme.  :)

we rejected SCTP as inappropriate for real-time communication and our other use cases for several reasons. some of these have been at least partially addressed since our initial dismissal of SCTP in 2004 (in particular, DTLS in SCTP addresses the limitations of using TLS in SCTP [RFC3436], which at the time was the only way to "secure" SCTP messages; that mechanism meant that all secure messages/streams had to be fully reliable and in-order, which was unacceptable for real-time communication).

issues with SCTP that remain, and which i believe make it undesirable for WebRTC, include:

  o as you point out in section 5.3, running SCTP over DTLS, rather than DTLS over SCTP, is desired so that all SCTP fields, not just the user data, are secured. however, this configuration is currently not defined by IETF and would have to be specified.

  o DTLS and SCTP handshakes must be performed serially (no matter which order they happen in), which increases the number of round-trips necessary to establish communication.

  o (most important for real-time communication): each user data fragment/chunk is assigned an SCTP Transmission Sequence Number (TSN) at the time of first transmission. that means even if your SCTP implementation supported stream prioritization somehow, the priority decision is only made at first transmission time. since there's just one TSN space and the Gap Ack structure only talks about TSNs, it's undesirable for gaps to persist (else the Gap Ack structure will continue to grow as more losses naturally happen). therefore it's desirable to repair gaps as quickly as possible. this may inappropriately increase the priority of a low priority fragment/chunk/stream during periods of congestion, which is exactly when priority matters (this is a "priority inversion").

  o (second most important for real-time communication): there's only one receive window advertisement for all of the streams, rather than one receive window per stream. this means there's no per-stream flow control. so if you're receiving (for example) a bulk file transfer and real-time player position updates and text chat messages, and you need to suspend the file transfer stream for a time, that means you must also suspend the player position updates and text chat messages. unless you spin up an entirely separate SCTP for each flow control domain, which is lame and defeats the purpose of stream multiplexing.

  o SCTP specifies the maximum number of streams in each direction at association startup. web applications may not know the number of streams needed up front; in fact, the number of streams needed in any real-world non-SS7 data application is very likely to evolve over the lifetime of that application, naturally increasing and decreasing.

  o the semantics of unordered messages are confusing and not a good map to WebRTC. they are semantically equivalent to an entirely separate stream loosely associated to the ordered stream of the same number. there's no way to tell (without application layer sequencing) if an unordered message has been lost/abandoned by the sender. at the protocol level, TSNs can be used to recover the queuing order of received unordered messages, but the TSNs are semantically disconnected from the SCTP user. recovering the original queuing order over a short reorder/reassembly window period is desirable in some real-time applications.

  o an SCTP receiver should be able to choose to receive stream messages in originally-queued order or as-received-on-the-network order on a per-stream basis, and be able to recover the original queuing order to whatever extent desired (potentially limited by real-time constraints) when receiving in network order. SCTP's unordered message semantics are designed for "out-of-band" messages, and are not a good fit for general "real-time" data. transmission order should be determined by the sender, reception order should be determined by the receiver.

  o the stream sequence number being only 16 bits limits the maximum message rate through high delay networks where message gaps can be reliably detected at the receiver, when the sender uses limited-reliability, to 32767 messages/RTT. that sounds large, but could be easily reached even today in moderately high bandwidth*delay paths if messages are small.

specifying and implementing SCTP over DTLS over ICE over UDP is probably nearly as much work as specifying and implementing a new network protocol that actually solves the problems cleanly and holistically. having done that before a few times, i'm in favor of the clean holistic approach.  :)


-----Original Message-----
From: [] On Behalf Of Randell Jesup
Sent: Monday, October 31, 2011 8:18 PM

A new version of I-D, draft-jesup-rtcweb-data-01.txt has been successfully
submitted by Randell Jesup and posted to the IETF repository.