Re: [quicwg/base-drafts] Unidirectional Streams (#643)

MikkelFJ <notifications@github.com> Tue, 20 June 2017 07:52 UTC

Return-Path: <bounces+848413-a050-quic-issues=ietf.org@sgmail.github.com>
X-Original-To: quic-issues@ietfa.amsl.com
Delivered-To: quic-issues@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 6C4A31287A3 for <quic-issues@ietfa.amsl.com>; Tue, 20 Jun 2017 00:52:44 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.801
X-Spam-Level:
X-Spam-Status: No, score=-4.801 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_MSPIKE_H2=-2.8, RP_MATCHES_RCVD=-0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=github.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 L6yY1lmGOBgR for <quic-issues@ietfa.amsl.com>; Tue, 20 Jun 2017 00:52:42 -0700 (PDT)
Received: from o5.sgmail.github.com (o5.sgmail.github.com [192.254.113.10]) (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 7849E127601 for <quic-issues@ietf.org>; Tue, 20 Jun 2017 00:52:42 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=github.com; h=from:reply-to:to:cc:in-reply-to:references:subject:mime-version:content-type:content-transfer-encoding:list-id:list-archive:list-post:list-unsubscribe; s=s20150108; bh=vWyO4bnxjVBbYcvPUBQfuiH4Q7A=; b=SM3/2nlo60VxZSlC 5GqGe6/1HsZ3760T1V8VPszeypgjSNRCtyds3ucSrUu6y37bF6zRiPp0gpvLE0aY 2NFH8uEiSBi4IW4rahAaO0/HHUWKOotuRVUROknVWkOQG3pah94vxTap+29e9P+0 f0QVtcj7vJyuJBMbNCmnoGWBUJo=
Received: by filter0940p1mdw1.sendgrid.net with SMTP id filter0940p1mdw1-11018-5948D449-1F 2017-06-20 07:52:41.538877072 +0000 UTC
Received: from github-smtp2a-ext-cp1-prd.iad.github.net (github-smtp2a-ext-cp1-prd.iad.github.net [192.30.253.16]) by ismtpd0002p1iad1.sendgrid.net (SG) with ESMTP id bwqn6EjWRviWwGdW7FZCXw for <quic-issues@ietf.org>; Tue, 20 Jun 2017 07:52:41.517 +0000 (UTC)
Date: Tue, 20 Jun 2017 00:52:41 -0700
From: MikkelFJ <notifications@github.com>
Reply-To: quicwg/base-drafts <reply+0166e4abeb8bb187cddfbf6bea27e4fe4ce74bfb88dbec0092cf000000011560964992a169ce0e21ecbf@reply.github.com>
To: quicwg/base-drafts <base-drafts@noreply.github.com>
Cc: Subscribed <subscribed@noreply.github.com>
Message-ID: <quicwg/base-drafts/pull/643/c309673734@github.com>
In-Reply-To: <quicwg/base-drafts/pull/643@github.com>
References: <quicwg/base-drafts/pull/643@github.com>
Subject: Re: [quicwg/base-drafts] Unidirectional Streams (#643)
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary="--==_mimepart_5948d44966e04_2b7e3fb50143dc30512c4"; charset="UTF-8"
Content-Transfer-Encoding: 7bit
Precedence: list
X-GitHub-Sender: mikkelfj
X-GitHub-Recipient: quic-issues
X-GitHub-Reason: subscribed
X-Auto-Response-Suppress: All
X-GitHub-Recipient-Address: quic-issues@ietf.org
X-SG-EID: l64QuQ2uJCcEyUykJbxN122A6QRmEpucztpreh3Pak2W3IWLew6ZWhs/x7M2WfXc4LrPKAlsywn+dB 53eR7V3y0ViCfwEJxoavO4UWJtsqcyfR7EkB2gkyxL7AZ0n9HugeQ08bZHNFa//4uMC7FynMKE+S35 PN9A63s4oQn+G7mMupzGRYgXIIRG2mlRUiaYyHuPgrxXdxnSKCEZmxDrDsN1fT7cG5loUGZXpgdxNW 8=
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic-issues/VOkiNtWmhlwDtobxfgtj3Uls0AY>
X-BeenThere: quic-issues@ietf.org
X-Mailman-Version: 2.1.22
List-Id: Notification list for GitHub issues related to the QUIC WG <quic-issues.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic-issues>, <mailto:quic-issues-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic-issues/>
List-Post: <mailto:quic-issues@ietf.org>
List-Help: <mailto:quic-issues-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic-issues>, <mailto:quic-issues-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 20 Jun 2017 07:52:44 -0000

I can't speak for HTTP/2 that I have not studied in detail, but I believe this is a very significant improvement for the transport layer.

As mentioned above, DISINTEREST (#171) or some other mechanism for receiver to cancel is needed, and because it can cause some race conditions on stream state, I think it would be good to consider in more detail before settling on a unidirectional solution.

I am concerned about the STREAM_BLOCKED being able to force the receivers stream in open state if it is above the stream limit, or did I miss something. I know it is also there to hint at a need for more streams, but I think that should be an application level issue. Regardless - if naively implemented, a transmitter could force a lot of undesired resource usage at receiver by allocating stream state. I suggest that any stream related transmission above MAX_STREAM_LIMIT is a fatal error.

As to MAX_STREAM_LIMIT - this was a great improvement to avoid race conditions in the bi-directional design, and I do immediately suggest removing it. However, I think it might be worthwhile to consider alternatives for a better insight into the problem. For example: assume that we do not require incremental stream identifiers: there is no internal gain in incremental order such as keeping a simple stream table because old streams can randomly linger (e.g. stream 0), so open streams must be tracked via a map anyway. With a unidirectional design there is no ambigouty of the senders view of how many streams are at most open at the receiving end. It is the difference between received ACKS for RST_STREAM and FIN STREAMS and streams placed in senders open state.

Unless there is a flaw in the above argument, this suggests that streams can be opened with arbitrary identifiers. If we permit that, applications could use their own identifiers. However, it becomes intractable to make sure that a stream identifier is not being reused. Thus, the next question is: is it a problem to reuse stream identifiers once they have been closed? A sender cannot start reusing the stream before receiving an ACK for RST_STREAM or FIN STREAM of the old version of the stream and in this case the receiver cannot have many doubts about a new stream arriving being new. However, there may still be spurious retransmissions. This can be managed by looking at packet numbers but requires to remember the packet number of a closed stream, which is complicated.

Thus, I believe the MAX_STREAM_LIMIT is still the simplest approach.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/643#issuecomment-309673734