Re: [rtcweb] PseudoTCP implementation (Re: realiable data service)

Harald Alvestrand <harald@alvestrand.no> Sun, 24 July 2011 15:21 UTC

Return-Path: <harald@alvestrand.no>
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 3EB5521F8A64 for <rtcweb@ietfa.amsl.com>; Sun, 24 Jul 2011 08:21:01 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -102.599
X-Spam-Level:
X-Spam-Status: No, score=-102.599 tagged_above=-999 required=5 tests=[BAYES_00=-2.599, USER_IN_WHITELIST=-100]
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 3zfcKh+D3dd4 for <rtcweb@ietfa.amsl.com>; Sun, 24 Jul 2011 08:21:00 -0700 (PDT)
Received: from eikenes.alvestrand.no (eikenes.alvestrand.no [158.38.152.233]) by ietfa.amsl.com (Postfix) with ESMTP id 457B021F8A62 for <rtcweb@ietf.org>; Sun, 24 Jul 2011 08:21:00 -0700 (PDT)
Received: from localhost (localhost [127.0.0.1]) by eikenes.alvestrand.no (Postfix) with ESMTP id 59BB539E119; Sun, 24 Jul 2011 17:19:52 +0200 (CEST)
X-Virus-Scanned: Debian amavisd-new at eikenes.alvestrand.no
Received: from eikenes.alvestrand.no ([127.0.0.1]) by localhost (eikenes.alvestrand.no [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 0mpHkFU1-4Ja; Sun, 24 Jul 2011 17:19:51 +0200 (CEST)
Received: from [130.129.22.244] (unknown [130.129.22.244]) by eikenes.alvestrand.no (Postfix) with ESMTPS id 88BEB39E03C; Sun, 24 Jul 2011 17:19:50 +0200 (CEST)
Message-ID: <4E2C3859.3090102@alvestrand.no>
Date: Sun, 24 Jul 2011 11:20:57 -0400
From: Harald Alvestrand <harald@alvestrand.no>
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.18) Gecko/20110617 Thunderbird/3.1.11
MIME-Version: 1.0
To: Cullen Jennings <fluffy@cisco.com>
References: <4E0832FE.7010401@ericsson.com> <4E1DC07B.7000807@ericsson.com> <D1BE71E1-4F3B-474E-8A28-AA53CE6B684E@cisco.com> <CA+9kkMCJiE+bfEqZzOBo46aXVH-H2sehHh6UJv3tVdJKGjaokQ@mail.gmail.com> <49CD37FC-7951-45A0-84C4-A443F8B151F3@cisco.com> <4E24AF7C.4080604@jesup.org> <CB57E808-FB8D-41D7-90C6-0EA1051629A8@cisco.com> <4E26D4D6.3020602@alvestrand.no> <CAOJ7v-3RLhaxOWyNJ6p4nE7QyFxOCAeM7xoENPvNhYhoDmyKOw@mail.gmail.com> <87CA4E28-DF95-4A03-9809-BC1B2077B4B1@cisco.com>
In-Reply-To: <87CA4E28-DF95-4A03-9809-BC1B2077B4B1@cisco.com>
Content-Type: text/plain; charset="ISO-8859-1"; format="flowed"
Content-Transfer-Encoding: 7bit
Cc: rtcweb@ietf.org
Subject: Re: [rtcweb] PseudoTCP implementation (Re: realiable data service)
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: Sun, 24 Jul 2011 15:21:01 -0000

On 07/22/11 22:33, Cullen Jennings wrote:
> On Jul 20, 2011, at 8:37 , Justin Uberti wrote:
>
>>
>> On Wed, Jul 20, 2011 at 9:15 AM, Harald Alvestrand<harald@alvestrand.no>  wrote:
>> On 07/20/11 03:13, Cullen Jennings wrote:
>> On Jul 18, 2011, at 15:11 , Randell Jesup wrote:
>>
>> All that said - yes, there are complexity issues to consider, which was why I was suggesting leveraging
>> an existing tunneled protocol like SCTP or even TCP-over-UDP.
>> I agree with bunch of what you are saying but the previous several times I've seen the use SCTP over UDP conversation, it usually ends about the point the we ask for a user land implementation. Whatever we do more or less has to be user land or already exist in the OS that people run browsers on.
>>
>> If someone has a user land implementation of SCTP or TCP, I imagine that might change the outcome a bit from previous times. I have not looked at the TCP over UPD library Justin mentioned but, at casual glance, I noticed is around 400 lines of code which is very small, which is cool. But given the lines of code in say the BSD TCP stack, it does make me wonder what's missing. That said, I don't think we need something with the perforce of the BSD TCP stack as long as what is there is TCP friendly and robust.
>> I believe this is the current URL:
>>
>> http://code.google.com/p/libjingle/source/browse/trunk/talk/session/tunnel/pseudotcpchannel.cc (500 or so lines).
>>
>> The real protocol implementation is here:
>> http://code.google.com/p/libjingle/source/browse/trunk/talk/p2p/base/pseudotcp.cc
>> which is another 1000 lines (not counting the various .h files).
>>
>> We're not THAT good at writing compact code :-)
>>
>> Yes, I was going to send a similar email. There are some deficiencies/optimizations for the fact it runs over ICE-UDP - doesn't do path MTU discovery, no checksum, no OOB data - but it is based on TCP and implements slow start and other congestion avoidance mechanisms, and is actively used by a number of applications where reliable transfer is important, such as file transfer and remote desktop applications.
>>
>>
> It would be really interesting to see someone write a draft that subsets TCP to make it
>
> 1) still be congestion safe and TCP friendly
>
> 2) be valid TCP from point of view nats and firewalls
>
> 3) match an implementation like the one you have here.
>
> Most our use cases do not need OOB data. A subset protocol that was missing something like path MTU discovery might be slower than full blown modern TCP but again, most out use cases would still work just fine. As much as the IETF hates sub setting protocols, having something concrete and in hand like this would be a pretty useful thing. As well as being useful for the wwebrtc work, something like this would be useful for very constrained systems such very cheap sensor networks. I'm seeing lots of really minimal subset of TCP being done for these very low end system.
ObNitpick: TCP doesn't have OOB data.

What it has is an "urgent data downstream" pointer, which the Unix 
implementors used to pick the byte pointed to out of the data stream and 
deliver it "urgently" as if it was OOB data.
I exchanged mail with Jon Postel about this in 1984, and he confirmed 
that if a TCP protocol stack gets 2 TCP segments with different URG 
pointers, a TCP implementation can merge them and only deliver the 
latest URG pointer - which means that delivery of the OOB data is 
unreliable if you have more than 1 in flight at any one time; you might 
get the byte inband, and you might get it out of band.

This conflict of viewpoints between the protocol design and the API 
design has, I believe, rendered the TCP URG pointer useless for all 
practical purposes.

Returning to more relevant stuff: I think we need to handle PMTU issues 
somehow. This may be hard.

                   Harald