Re: Unreliable Stream (was: Re: HTTP requests on one stream #692)

Mirja Kühlewind <mirja.kuehlewind@tik.ee.ethz.ch> Wed, 26 July 2017 11:05 UTC

Return-Path: <mirja.kuehlewind@tik.ee.ethz.ch>
X-Original-To: quic@ietfa.amsl.com
Delivered-To: quic@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 1C02B131FE9 for <quic@ietfa.amsl.com>; Wed, 26 Jul 2017 04:05:18 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.901
X-Spam-Level:
X-Spam-Status: No, score=-1.901 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RP_MATCHES_RCVD=-0.001] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id mj-RDryUa11q for <quic@ietfa.amsl.com>; Wed, 26 Jul 2017 04:05:15 -0700 (PDT)
Received: from virgo02.ee.ethz.ch (virgo02.ee.ethz.ch [129.132.72.10]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id A71D2126DEE for <quic@ietf.org>; Wed, 26 Jul 2017 04:05:15 -0700 (PDT)
Received: from localhost (localhost [127.0.0.1]) by virgo02.ee.ethz.ch (Postfix) with ESMTP id 3xHXMF4NZ6z15MQD; Wed, 26 Jul 2017 13:05:13 +0200 (CEST)
X-Virus-Scanned: Debian amavisd-new at virgo02.ee.ethz.ch
Received: from virgo02.ee.ethz.ch ([127.0.0.1]) by localhost (virgo02.ee.ethz.ch [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id L4awx1nUqicU; Wed, 26 Jul 2017 13:05:12 +0200 (CEST)
X-MtScore: NO score=0
Received: from [192.168.178.33] (pD9E11F24.dip0.t-ipconnect.de [217.225.31.36]) by virgo02.ee.ethz.ch (Postfix) with ESMTPSA; Wed, 26 Jul 2017 13:05:11 +0200 (CEST)
Content-Type: text/plain; charset="utf-8"
Mime-Version: 1.0 (Mac OS X Mail 10.3 \(3273\))
Subject: Re: Unreliable Stream (was: Re: HTTP requests on one stream #692)
From: Mirja Kühlewind <mirja.kuehlewind@tik.ee.ethz.ch>
In-Reply-To: <CAN1APdd+1O6BigtMqt+YuGVHd_LOLDCgSqQupLZ9bv5-NzkmCQ@mail.gmail.com>
Date: Wed, 26 Jul 2017 13:05:10 +0200
Cc: "Philipp S. Tiesel" <phils@in-panik.de>, Frank Kastenholz <fkastenholz@google.com>, Mike Bishop <michael.bishop@microsoft.com>, Ian Swett <ianswett@google.com>, Lucas Pardue <lucas.pardue@bbc.co.uk>, IETF QUIC WG <quic@ietf.org>, Martin Thomson <martin.thomson@gmail.com>, "Swindells, Thomas (Nokia - GB)" <thomas.swindells@nokia.com>
Content-Transfer-Encoding: quoted-printable
Message-Id: <9EA010C1-A283-4C21-B257-5D7BA68B20E8@tik.ee.ethz.ch>
References: <7CF7F94CB496BF4FAB1676F375F9666A37748B7A@bgb01xud1012> <MWHPR21MB0141497D0A30342613752E0787A50@MWHPR21MB0141.namprd21.prod.outlook.com> <2B5E3522-750C-4697-A308-D8452E800D9F@in-panik.de> <CAKcm_gO8k+ZASF3M79QTrypa12pXGfp7=3P2XuOhHbxb04Rq4Q@mail.gmail.com> <DB5PR07MB1237D364086129C462AAC19D84BA0@DB5PR07MB1237.eurprd07.prod.outlook.com> <CAKcm_gMbQj8UKLfDmwv8K+XWHxB8xx4EG7uQGt95m3X40c1YXA@mail.gmail.com> <DB5PR07MB1237A77FC6F791C1A95239F784BA0@DB5PR07MB1237.eurprd07.prod.outlook.com> <CABkgnnVu5r-QQpO01LAeWHJvbxxBtpGvwpNpA2_vi7UgOJ9ThQ@mail.gmail.com> <MWHPR21MB0141C6AA46DFF0B005972F2287BB0@MWHPR21MB0141.namprd21.prod.outlook.com> <9914D466-6293-447C-B3FC-839CFFF9298B@in-panik.de> <CAD3dRjqACu+oK=jhECsKHd27HEbHgjJkgNtQp3tdwnjo1QvjFQ@mail.gmail.com> <CAN1APdd+1O6BigtMqt+YuGVHd_LOLDCgSqQupLZ9bv5-NzkmCQ@mail.gmail.com>
To: Mikkel Fahnøe Jørgensen <mikkelfj@gmail.com>
X-Mailer: Apple Mail (2.3273)
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/cIrRO_OjeLh-s14ndtruYOkhwls>
X-BeenThere: quic@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: Main mailing list of the IETF QUIC working group <quic.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic>, <mailto:quic-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic/>
List-Post: <mailto:quic@ietf.org>
List-Help: <mailto:quic-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic>, <mailto:quic-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 26 Jul 2017 11:05:18 -0000

Hi all,

in the taps working group we are working on a new socket API, our current proposal is called post sockets. This API is message-based and reliability is realized by assigning a deadline to a message. This approach is based on the assumption that a message is only as a whole useful for the application, and only if delivered within a certain time frame (where for full reliability this time frame in infinite). As message is a data segment defined by the application which can be a frame in a video stream or a sensor report and can span one or multiple transport packets. I thinks this matches what Mikkel describes below.

The deadline is set by the sender because only the sender side can ‚measure‘ correctly when the deadline is passed. For me any signal from the client side about what the right value for this deadline is, is probably an application question and should be done in the application layer.

Mirja


> Am 25.07.2017 um 21:11 schrieb Mikkel Fahnøe Jørgensen <mikkelfj@gmail.com>:
> 
> I believe Franks description suits the view if unreliable streams being very small unidirectional streams.
> 
> As to Phillips question:
>> An open question is question is how to present a stream with “holes” to the application.
> The size of holes may be tricky unless, but presenting logical streams with holes is easy:
> 
> For reliable (logical) streams you have one transport stream with many messages and no holes. These messages must be on the stream to ensure ordering, and you therefore need an application level message frame.
> 
> For unreliable (logical) streams you only send one message in each QUIC transport stream. Instead of a message frame you store a logical stream id. The transport stream id will always increase so even if unreliable, you still know about ordering. An internal sequence number could be added if more details are needed.
> 
> Unreliable streams may be short so there can be many in a single UDP packet. This can drain the stream ID space.
> 
> A sending application can easily tell QUIC transport to not retransmit frames of unreliable streams (or have some timeout etc.).
> 
> The receiving QUIC transport might struggle with seeing only the second half of an unreliable stream. The receiving application has not easy way to tell transport to stop waiting even if both sending and receiving applications have negotiated what they want. To solve this problem, QUIC transport could have a flag on frames that mark them as unreliable - perhaps two bits for different classes / timeouts etc. The application can the tell transport how to manage such streams.
> 
> By and large, reliable and unreliable streams work exactly the same at the transport layer.
> 
> 
> 
> Note that if streams are not unidirectional there is more overhead in keeping stream state and terminating streams. With a uni-directional stream a sender can immediately close all stream state after sending a single frame message. At a deeper level there  may be frame retransmission, but this is much more lightweight. Then if frames are marked unreliable they can also bypass the retransmission queue.
> 
> So I would like unidirectional streams with a flag to mark frames as unreliable, and longer stream identifiers (possibly compressed).
> 
> How this works at the HTTP level I have no clue because I am still not up to speed on this part. But I can easily imagine that a single stream per HTTP transaction will fall short of some of those can be unreliable.
> 
> 
> 
> Kind Regards,
> Mikkel Fahnøe Jørgensen
> 
> 
> On 25 July 2017 at 20.17.34, Frank Kastenholz (fkastenholz@google.com) wrote:
> 
>> An open question is question is how to present a stream with “holes” to the application.