Re: Unidirectional streams PR

Ian Swett <ianswett@google.com> Fri, 23 June 2017 01:43 UTC

Return-Path: <ianswett@google.com>
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 6F642129BF0 for <quic@ietfa.amsl.com>; Thu, 22 Jun 2017 18:43:31 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.7
X-Spam-Level:
X-Spam-Status: No, score=-2.7 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, RP_MATCHES_RCVD=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=google.com
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 fpjqRFBfvhNB for <quic@ietfa.amsl.com>; Thu, 22 Jun 2017 18:43:28 -0700 (PDT)
Received: from mail-yw0-x236.google.com (mail-yw0-x236.google.com [IPv6:2607:f8b0:4002:c05::236]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 311FF129BEE for <quic@ietf.org>; Thu, 22 Jun 2017 18:43:28 -0700 (PDT)
Received: by mail-yw0-x236.google.com with SMTP id v7so12307107ywc.2 for <quic@ietf.org>; Thu, 22 Jun 2017 18:43:28 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=dSp5lt/CPYchMbUpR3Vvt6zgWvsXg5/LdsB7nz+l1jc=; b=ZKgcDbETlAZlPniN5yN+he1gxCJyE/LgEXQ1zzk0Fg1o75XkuUbN288xfwO+7A0HYj S0K25mtmdcZYFSl2aQ4qFHHUnrVg8Pn1R99Pgi/UX+XSv25gVy6vsiwIoVIYk7V+tU75 eDPjHSMuwmzoyLfAQIiRjlmV299ORcsVILQ/A6iALGetdZRUr85Q9qkA3KVR7OsmeFwk PZ0YmvnPE0mlpGlCUNG97vpWCSj4ElhMrAllHpOUEN7Z+1b2ULqziW8Z7HsYYYMwLEaK gEtGGJhaR39d2+olq6GS1gsYZIPpRobdlsUbGj+ufW+KfLb1QY+loy2M/3OPmgpDuU1R za+w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=dSp5lt/CPYchMbUpR3Vvt6zgWvsXg5/LdsB7nz+l1jc=; b=Nuhll2JFFH2/NXtZNmEO3OBSSfNgrngqg9GPwPrGgEHCYBrPTSzR7lOrFCGMxfs0tC CKBN9Mc0RJo+coA96dWA/rE9sQ+XkzmvjMQawYpg/M78NAu8hFT+zX1EuOhmZJtVMbz7 A6bGQzOORjjUVnKQd0GhO4rKywcsfa5muEytzxX+XjgABS86jrUuA6BJmrBcF/d4ry4k 73FOxJAsAGjwQVDBDQ3SI/FaaL/1gXtjk3IUSp6VBg2eLrXH+bqg2u5TpLJCg8BxnpFw 3afsUXsYDcY7yzEowdBMa4x7SIwBKHBS30lOuJ3G2WeS7bBkLt4E2EmqpwWXFUAS27yY 0EMQ==
X-Gm-Message-State: AKS2vOxf+NOjkswKsZykmmGBM8ZB4NhvzdTzQW2zlfbOUMjIsCB61cSB C4YmlYQHrjv/+t5huRbXDsXiOss3pewE
X-Received: by 10.13.229.193 with SMTP id o184mr4065676ywe.101.1498182207216; Thu, 22 Jun 2017 18:43:27 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.37.208.3 with HTTP; Thu, 22 Jun 2017 18:43:06 -0700 (PDT)
In-Reply-To: <349d20e4f7d9458aaf7797d2025b2064@usma1ex-dag1mb5.msg.corp.akamai.com>
References: <CABkgnnW+veDVq27v+wTz0cA=eGPRTLQ1A90A0ynHLPU88Pg77Q@mail.gmail.com> <CAOdDvNpORYBr7+Q8M_nnGOm4MsWqVbm6koOtQ+=An8t7AbccGg@mail.gmail.com> <CAGD1bZb9Na32z=Gg9JS+FzrGGN9Jhw=QDTMTYS=FVcNesoSMig@mail.gmail.com> <CABkgnnV2yPP-qgLKZYPsvawXc7FP4RM7CZDDa7aFaNy0KxLfag@mail.gmail.com> <CA+9kkMCF+wUPA452gYgdG65Y4zNctzGWd4HtZ2Ge70=S9k-_Qw@mail.gmail.com> <CABkgnnU6H+2AeY0n7-d+k0baM7UJ6fuN4PX7ez+KRN17eFg6Yg@mail.gmail.com> <MWHPR21MB0141A7116859D7955C92CC0987DB0@MWHPR21MB0141.namprd21.prod.outlook.com> <349d20e4f7d9458aaf7797d2025b2064@usma1ex-dag1mb5.msg.corp.akamai.com>
From: Ian Swett <ianswett@google.com>
Date: Thu, 22 Jun 2017 21:43:06 -0400
Message-ID: <CAKcm_gOZJcyndTxMpFEXx3+gQ+yzx4Nu5N_JFV3BNvx=HZ99kA@mail.gmail.com>
Subject: Re: Unidirectional streams PR
To: "Lubashev, Igor" <ilubashe@akamai.com>
Cc: Mike Bishop <Michael.Bishop@microsoft.com>, Martin Thomson <martin.thomson@gmail.com>, Ted Hardie <ted.ietf@gmail.com>, Jana Iyengar <jri@google.com>, QUIC WG <quic@ietf.org>, Patrick McManus <pmcmanus@mozilla.com>
Content-Type: multipart/alternative; boundary="94eb2c081d7445f1a3055296bae5"
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/UngCPuiHj7ADIdIoVKS_jqIj0M0>
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: Fri, 23 Jun 2017 01:43:31 -0000

As promised, here is my 1 bit extension to the existing QUIC STREAM frame
to support unidirectional streams in addition to bidirectional streams.  It
uses an extra bit in the type byte to indicate a STREAM frame is
unidirectional, and hence the stream is to be opened in a
half-closed(unidirectional) state.

There are many ways to frame this, which I'm happy to discuss, but the key
idea is that adding unidirectional streams to the existing design does not
add much complexity, and provides a more flexible API to use cases
including server push and RTP.

https://github.com/quicwg/base-drafts/pull/656

PS: This does not solve the issue Ryan identified above with PUSH_PROMISE
transitioning to a push id to avoid using up open stream limits.  I think
that should be separable and easy to put on top of this PR as well.

On Thu, Jun 22, 2017 at 9:06 PM, Lubashev, Igor <ilubashe@akamai.com> wrote:

> I like the idea of unidirectional streams, if they make life easier for
> apps -- both "traditional" apps like H2 as well as less usual apps like ssh
> (one stream in one direction, two associated streams in the opposite
> direction).
>
> I also like Mike's idea of OPEN_STREAM frame.  The way I'd describe
> OPEN_STREAM frame is that it is implicitly a STREAM frame with 0-offset and
> a set of "per-stream properties".
>
> An important point is that when Transport is aware of the association of
> two unidirectional streams, the Transport API would be able to implement a
> bidirectional socket-like abstraction for applications that desire one.
>
>
> OPEN_STREAM frame
> The type byte for a OPEN_STREAM frame contains embedded flags, and is
> formatted as 10FSSPPD. The F, SS, and D bits are parsed as per STREAM frame.
> * The PP bits encode the size of the Params Bitmap field. The values 00,
> 01, 02, and 03 indicate lengths of 8, 16, 24, and 32 bits long respectively.
>
> The two Least Significant bits of the Params Bitmap indicate the length of
> the Associated Stream ID. The LSB values 00, 01, 02, and 03 indicate
> lengths of 0 (none), 8, 16, and 32 bits long respectively.
> We can define up to 30 additional bits to be meaningful to the transport.
> (I can imagine Partial-Reliability bit, Flow-Control-Exempt bit,
> Priority-Delivery (aka "DontBuffer") bit, etc).
>
> 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
> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
> |                    Stream ID (8/16/24/32)                   ...
> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
> |                Params Bitmap  (8/16/24/32)                   ...
> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
> |            Associated Stream ID (0/8/16/32)                    ...
> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
> |       [Data Length (16)]      |        Stream Data (*)      ...
> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>
> Note that if Params Bitmap is 0x0, this OPEN_STREAM frame is equivalent to
> STREAM frame with OO=0.
>
>
>
> -----Original Message-----
> From: Mike Bishop [mailto:Michael.Bishop@microsoft.com]
> Sent: Thursday, June 22, 2017 6:48 PM
> To: Martin Thomson <martin.thomson@gmail.com>; Ted Hardie <
> ted.ietf@gmail.com>
> Cc: Jana Iyengar <jri@google.com>; QUIC WG <quic@ietf.org>; Patrick
> McManus <pmcmanus@mozilla.com>
> Subject: RE: Unidirectional streams PR
>
> I suppose you could drop the stream type header from HTTP into QUIC and
> make the types "bidirectional stream," "unidirectional stream," and "mate
> of bidirectional stream"; the last would further need to identify which
> peer stream it corresponded to.
>
> But making them the first couple bytes of the stream data feels kind of
> kludgy if this is fundamentally built into the transport, which means they
> really belong in a dedicated frame.  Maybe a dedicated OPEN_STREAM frame,
> which blocks any data received on that stream until you know what type it
> is?
>
> Actually, if we're planning on introducing other per-stream properties
> like partial reliability, there might be value in an OPEN_STREAM frame
> where we can describe a stream's desired properties before any data
> flows....
>
> -----Original Message-----
> From: QUIC [mailto:quic-bounces@ietf.org] On Behalf Of Martin Thomson
> Sent: Thursday, June 22, 2017 3:32 PM
> To: Ted Hardie <ted.ietf@gmail.com>
> Cc: Jana Iyengar <jri@google.com>; QUIC WG <quic@ietf.org>; Patrick
> McManus <pmcmanus@mozilla.com>
> Subject: Re: Unidirectional streams PR
>
> On 23 June 2017 at 05:15, Ted Hardie <ted.ietf@gmail.com> wrote:
> > My personal take on that right answer there is to support both, with
> > an explicit signal of when each model is in use,
>
> I have heard this request now from several folks at Google.  I don't know
> how to make this work without increasing complexity considerably .  I'd be
> willing to be wrong about this, but would prefer to see a proposal.  I
> don't need a fully-worked proposal with text, just a sketch of how the
> pieces work in enough detail to understand how this might interact with
> other parts of the protocol.  I think that Jana offered to do this, so
> maybe I can wait for that (c.f., Mark's earlier statement about
> priority/urgency).
>
>