RE: Unidirectional streams PR

"Lubashev, Igor" <ilubashe@akamai.com> Fri, 23 June 2017 01:50 UTC

Return-Path: <ilubashe@akamai.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 53943129BF5 for <quic@ietfa.amsl.com>; Thu, 22 Jun 2017 18:50:00 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.999
X-Spam-Level:
X-Spam-Status: No, score=-1.999 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, 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=akamai.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 3I8J0A6McfQA for <quic@ietfa.amsl.com>; Thu, 22 Jun 2017 18:49:57 -0700 (PDT)
Received: from mx0a-00190b01.pphosted.com (mx0a-00190b01.pphosted.com [IPv6:2620:100:9001:583::1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 7C52812762F for <quic@ietf.org>; Thu, 22 Jun 2017 18:49:57 -0700 (PDT)
Received: from pps.filterd (m0050095.ppops.net [127.0.0.1]) by m0050095.ppops.net-00190b01. (8.16.0.21/8.16.0.21) with SMTP id v5N1lYcG029741; Fri, 23 Jun 2017 02:49:54 +0100
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=akamai.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : mime-version; s=jan2016.eng; bh=jMerIgqZtM/ogB/hqfUsHtxfEZZC1QvWhhL/UcK5XPo=; b=DwMdTVeCqnwCDqRMEqUQCEwznV+5/Dcp4pQ7fvbmOh4v1063iB2HXIKY0mHOuIkkR8Jx cJY1aEVHgqGwq7za8S09BPkMGb/G4ARNOM+bCSLEt0AFo2f5U7E2478FiAYmFOVfwsRM asG7ZlAE6+Vs7awJJVFOpQIymGnfonkyy4qWhkzqFI2oMqF/3UPpsYrYz/CFTe4gV84I +y/4JZuQ4s1ORIHOlVaxS+zlo8k20z1yMfkecFmf8mmWdXpAZRTCW+HDPCdLeZvt7rKI tV3C1Cmy/TBKHTdtln7yt/+WEZXNHMbNHGXOaKqxKRpFG3MqgcqDUp63eh/huAeeM25r ZA==
Received: from prod-mail-ppoint2 (a184-51-33-19.deploy.static.akamaitechnologies.com [184.51.33.19] (may be forged)) by m0050095.ppops.net-00190b01. with ESMTP id 2b8kpx1vyf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 23 Jun 2017 02:49:54 +0100
Received: from pps.filterd (prod-mail-ppoint2.akamai.com [127.0.0.1]) by prod-mail-ppoint2.akamai.com (8.16.0.17/8.16.0.17) with SMTP id v5N1kBuW026720; Thu, 22 Jun 2017 21:49:53 -0400
Received: from email.msg.corp.akamai.com ([172.27.123.31]) by prod-mail-ppoint2.akamai.com with ESMTP id 2b4yruw73d-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Thu, 22 Jun 2017 21:49:52 -0400
Received: from USMA1EX-DAG1MB5.msg.corp.akamai.com (172.27.123.105) by usma1ex-dag1mb4.msg.corp.akamai.com (172.27.123.104) with Microsoft SMTP Server (TLS) id 15.0.1263.5; Thu, 22 Jun 2017 21:49:52 -0400
Received: from USMA1EX-DAG1MB5.msg.corp.akamai.com ([172.27.123.105]) by usma1ex-dag1mb5.msg.corp.akamai.com ([172.27.123.105]) with mapi id 15.00.1263.000; Thu, 22 Jun 2017 21:49:52 -0400
From: "Lubashev, Igor" <ilubashe@akamai.com>
To: Jana Iyengar <jri@google.com>
CC: Mike Bishop <Michael.Bishop@microsoft.com>, Ted Hardie <ted.ietf@gmail.com>, QUIC WG <quic@ietf.org>, Martin Thomson <martin.thomson@gmail.com>, Patrick McManus <pmcmanus@mozilla.com>
Subject: RE: Unidirectional streams PR
Thread-Topic: Unidirectional streams PR
Thread-Index: AQHS6mHzFJcNmOfPnkGlJjRXQ/9soKIvh8kAgADqdYCAACIYgIABI/8AgAAEzYCAAARGgP//0FFwgABb0AD//76RwA==
Date: Fri, 23 Jun 2017 01:49:51 +0000
Message-ID: <9bf0712b00e540eeafdd3e6f357c2845@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> <CAGD1bZbX1gTOh=LpQqLre8qgfB91=JrTCpYExzWMuBPo=V5_eA@mail.gmail.com>
In-Reply-To: <CAGD1bZbX1gTOh=LpQqLre8qgfB91=JrTCpYExzWMuBPo=V5_eA@mail.gmail.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-ms-exchange-transport-fromentityheader: Hosted
x-originating-ip: [172.19.34.60]
Content-Type: multipart/alternative; boundary="_000_9bf0712b00e540eeafdd3e6f357c2845usma1exdag1mb5msgcorpak_"
MIME-Version: 1.0
X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-06-22_10:, , signatures=0
X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1703280000 definitions=main-1706230028
X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-06-22_10:, , signatures=0
X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1703280000 definitions=main-1706230028
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/pSlddAy9L9Hw2_rOUHnyOAS6hKA>
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:50:00 -0000

I think of three layers of abstraction:


1.       QUIC Wire Protocol (the thing described by the QUIC Transport RFC)

2.       QUIC Library API (a library exposing some useful abstractions -- such as blocking/non-blocking unidirectional streams and bidirectional “sockets” -- and implementing them using QUIC Wire Protocol)

3.       Application (something that uses QUIC Library APIs)

What I am saying is that Martin’s unidirectional streams proposal does not have a way to implement generic bidirectional socket-like abstractions on the QUIC Library API layer.  However, if we follow Mike’s suggestion and allow an Associated Stream ID in OPEN_STREAM frames, this would make it easy for QUICK Libraries to provide generic bidirectional socket-like abstractions.

So what I am suggesting is that we keep QUIC Wire Protocol state machine simple and unchanged.  However, with the OPEN_STREAM frame, we would allow QUIC Libraries to implement both unidirectional and bidirectional streams.


-          Igor


From: Jana Iyengar [mailto:jri@google.com]
Sent: Thursday, June 22, 2017 9:26 PM
To: Lubashev, Igor <ilubashe@akamai.com>
Cc: Mike Bishop <Michael.Bishop@microsoft.com>; Ted Hardie <ted.ietf@gmail.com>; QUIC WG <quic@ietf.org>; Martin Thomson <martin.thomson@gmail.com>; Patrick McManus <pmcmanus@mozilla.com>
Subject: Re: Unidirectional streams PR

On Thu, Jun 22, 2017 at 6:06 PM, Lubashev, Igor <ilubashe@akamai.com<mailto: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.

I'm not sure I follow your thinking here: are you suggesting that QUIC implement bidirectional streams in addition to unidirectional streams?

- jana


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<mailto:Michael.Bishop@microsoft.com>]
Sent: Thursday, June 22, 2017 6:48 PM
To: Martin Thomson <martin.thomson@gmail.com<mailto:martin.thomson@gmail.com>>; Ted Hardie <ted.ietf@gmail.com<mailto:ted.ietf@gmail.com>>
Cc: Jana Iyengar <jri@google.com<mailto:jri@google.com>>; QUIC WG <quic@ietf.org<mailto:quic@ietf.org>>; Patrick McManus <pmcmanus@mozilla.com<mailto: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<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<mailto:ted.ietf@gmail.com>>
Cc: Jana Iyengar <jri@google.com<mailto:jri@google.com>>; QUIC WG <quic@ietf.org<mailto:quic@ietf.org>>; Patrick McManus <pmcmanus@mozilla.com<mailto:pmcmanus@mozilla.com>>
Subject: Re: Unidirectional streams PR

On 23 June 2017 at 05:15, Ted Hardie <ted.ietf@gmail.com<mailto: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).