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

Justin Uberti <juberti@google.com> Sun, 24 July 2011 15:27 UTC

Return-Path: <juberti@google.com>
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 6763321F88B6 for <rtcweb@ietfa.amsl.com>; Sun, 24 Jul 2011 08:27:33 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -105.837
X-Spam-Level:
X-Spam-Status: No, score=-105.837 tagged_above=-999 required=5 tests=[AWL=0.139, BAYES_00=-2.599, FM_FORGED_GMAIL=0.622, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_MED=-4, 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 PTlZ-UFwYCuB for <rtcweb@ietfa.amsl.com>; Sun, 24 Jul 2011 08:27:32 -0700 (PDT)
Received: from smtp-out.google.com (smtp-out.google.com [74.125.121.67]) by ietfa.amsl.com (Postfix) with ESMTP id 30E7021F84ED for <rtcweb@ietf.org>; Sun, 24 Jul 2011 08:27:32 -0700 (PDT)
Received: from wpaz29.hot.corp.google.com (wpaz29.hot.corp.google.com [172.24.198.93]) by smtp-out.google.com with ESMTP id p6OFRUJb004760 for <rtcweb@ietf.org>; Sun, 24 Jul 2011 08:27:31 -0700
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=google.com; s=beta; t=1311521251; bh=3deVWOYCBVuv7GhX6sps3hmggX8=; h=MIME-Version:In-Reply-To:References:From:Date:Message-ID:Subject: To:Cc:Content-Type; b=V8xBNAckzrF6sQWX1sAYOPNWedZ185yGeXS5f+4Ka6JSP5fCtQ/SHZdjBndkLGmEe QquW49YmHrqLtE0jdIDwQ==
DomainKey-Signature: a=rsa-sha1; s=beta; d=google.com; c=nofws; q=dns; h=dkim-signature:mime-version:in-reply-to:references:from:date: message-id:subject:to:cc:content-type:x-system-of-record; b=t9ICgoSzmevPPR2dH/9a5gJApK/bWM+0i2D2Xfv9uUnAc3pLpdrVIrfUJwnMGAoaR aRLrJ2olVCy5cNNCDIekw==
Received: from iym1 (iym1.prod.google.com [10.241.52.1]) by wpaz29.hot.corp.google.com with ESMTP id p6OFRTR1027916 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for <rtcweb@ietf.org>; Sun, 24 Jul 2011 08:27:29 -0700
Received: by iym1 with SMTP id 1so4088637iym.29 for <rtcweb@ietf.org>; Sun, 24 Jul 2011 08:27:29 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=beta; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type; bh=UOwjWQODR+aeJAmkpBkHOLmGVaOjflztA5D1AEXFFgU=; b=ysd44EppYnmjbzKFmsfzc4UcHMLpAALgob0jdjazr94ocBdBVIh/NMmTpbzH9J9t22 E6XNSiWtEMhuRB5LD7UQ==
Received: by 10.231.211.199 with SMTP id gp7mr3554667ibb.188.1311521249124; Sun, 24 Jul 2011 08:27:29 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.231.36.197 with HTTP; Sun, 24 Jul 2011 08:27:09 -0700 (PDT)
In-Reply-To: <4E2C3859.3090102@alvestrand.no>
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> <4E2C3859.3090102@alvestrand.no>
From: Justin Uberti <juberti@google.com>
Date: Sun, 24 Jul 2011 08:27:09 -0700
Message-ID: <CAOJ7v-3WNpGHePSKzTycu1K3ie69HCs=DnigW75wpT8uL99=1A@mail.gmail.com>
To: Harald Alvestrand <harald@alvestrand.no>
Content-Type: multipart/alternative; boundary="0016369c8dda2b629a04a8d25699"
X-System-Of-Record: true
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:27:33 -0000

On Sun, Jul 24, 2011 at 8:20 AM, Harald Alvestrand <harald@alvestrand.no>wrote:

> 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 <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<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<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.
>

The easy way may be to do what we're likely to do for RTP data: assume a MTU
of 1280 (IPv6 minimum MTU) and packetize as such, leaving PMTU discovery as
a future optimization.


>
>                  Harald
>
>
>