[quic-protocol] "outstanding data" retransmission

Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> Thu, 24 November 2016 15:46 UTC

Return-Path: <tatsuhiro.t@gmail.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 26AE9129644 for <quic@ietfa.amsl.com>; Thu, 24 Nov 2016 07:46:39 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.699
X-Spam-Level:
X-Spam-Status: No, score=-2.699 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.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 oSTH3vowDRE5 for <quic@ietfa.amsl.com>; Thu, 24 Nov 2016 07:46:35 -0800 (PST)
Received: from mail-qt0-x22e.google.com (mail-qt0-x22e.google.com [IPv6:2607:f8b0:400d:c0d::22e]) (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 849111293F9 for <quic@ietf.org>; Thu, 24 Nov 2016 07:46:35 -0800 (PST)
Received: by mail-qt0-x22e.google.com with SMTP id p16so43398650qta.0 for <quic@ietf.org>; Thu, 24 Nov 2016 07:46:35 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:from:date:message-id:subject:to; bh=J+I/2L1Qor5PNMMc29vEj2jpDgA6uAWTpcDQkjeMwQ4=; b=XtmtwT9nvHFwVS5TVt/LIk/3NVAB55pwUCvVnA9fhM+v6FiVVnGQrXIbi3bdys65V1 g5ef1HNHGxMxZLVT+TNAjkw61WcDKAHOorCPIjyRluQsuVw1RK5offsc5bTYsL7JdztT 2gKG4padLJSVFZRwtXHe1+UO9pjWp4A2VIbr3tB9yC6eNK4LlVSr+RwYYpk7mFa8TDoY qyPmdznVYm1OPmjENLNEJqYAy/lcgpawJH6fdLlIrAF0DnRg0uPJTr8EqyKgtgmSr+j3 FXQhVXFrNoGG747Tw/sD4aeY9Ay4/XS/E+Wyr34qXjNjUDmZ/o1REqsgafmmARvuRH+l yjag==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=J+I/2L1Qor5PNMMc29vEj2jpDgA6uAWTpcDQkjeMwQ4=; b=Yw7N0hTI8o+0qbXYx8nLOCGhvy6npfIJ9061hYe7pppZy7pR3WyqAS9b0nc4tQeYLh QFNFlqJGTQtnjdu0CNAVy7ZsKHtMxjpqhcaeb1xK1nEo0IN5OFnSX6ixYua1sRSx2NQu peF1EMA2cmWekTqL1zSzjZ5Fy3S2lPOb+NWXN2qr2eSf5CQ63vCrKKgBC75Ypji73DUt OOkNWLB2aFvKPvl7J8DVKFj/89ISsBY0MBPgwjeQ+SnVO+JPwan8WaKGPwTfyv1EvSK0 58+xeUkoTx+OwfZ1ya6Pqtl9r38T1KlPdALMVjL3kczodDkRnrHVNpOVxLDlndZudL90 Uh5w==
X-Gm-Message-State: AKaTC01GBh9Xsp1zFmY1uU+2Ms8cd4ZUmnP9Hn2+xkhlgdviYr3yyjbQ3wamCb6TNNFHAY90uENr6UHlPtnVIA==
X-Received: by 10.200.36.171 with SMTP id s40mr2462347qts.142.1480002394505; Thu, 24 Nov 2016 07:46:34 -0800 (PST)
MIME-Version: 1.0
Received: by 10.12.162.226 with HTTP; Thu, 24 Nov 2016 07:46:14 -0800 (PST)
From: Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>
Date: Fri, 25 Nov 2016 00:46:14 +0900
Message-ID: <CAPyZ6=+BddxUKLwT+799TYMre-zGj-ZXFu4eRCagnrBoy29V-w@mail.gmail.com>
Subject: [quic-protocol] "outstanding data" retransmission
To: quic@ietf.org
Content-Type: multipart/alternative; boundary="001a11403342fdc80205420de856"
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/SfaNFpfHcjlIn59bLsxm3QOyqx8>
X-BeenThere: quic@ietf.org
X-Mailman-Version: 2.1.17
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: Thu, 24 Nov 2016 15:46:39 -0000

Hi,

I have a question regarding "outstanding data" retransmission specifically,
https://tools.ietf.org/html/draft-hamilton-quic-transport-protocol-01#section-7

"""
   A packet may contain frames and/or application data, only some of
   which may require reliability.  When a packet is detected as lost,
   the sender SHOULD only resend frames that require retransmission.

   o  All application data sent in STREAM frames MUST be retransmitted,
      with one exception.  When an endpoint sends a RST_STREAM frame,
      data outstanding on that stream SHOULD NOT be retransmitted, since
      subsequent data on this stream is expected to not be delivered by
      the receiver.
"""

First bullet states that endpoint should not retransmit data
outstanding on the stream where it sent RST_STREAM.

The question is: what "data outstanding" actually means?  Is the
STREAM frame that has been sent before sending RST_STREAM and not
ACKed yet?  Or it the STREAM frame which has not sent yet?  Or
both?

I suspect that it means the STREAM frame that has been sent
before RST_STREAM but not ACKed yet.  This is because the above
text uses "retransmitted" which indicates that they have been
sent once.  And sending STREAM frame after RST_STREAM is
obviously protocol error.

If it is correct, and if we assume that RST_STREAM of HTTP/2 is
directly mapped to quic's RST_STREAM (well, this is not mentioned
in h2 mapping document, not sure why), we might miss the
valid use case described in RFC 7540, section 8.1:

https://tools.ietf.org/html/rfc7540#section-8.1

"""
   An HTTP response is complete after the server sends -- or the client
   receives -- a frame with the END_STREAM flag set (including any
   CONTINUATION frames needed to complete a header block).  A server can
   send a complete response prior to the client sending an entire
   request if the response does not depend on any portion of the request
   that has not been sent and received.  When this is true, a server MAY
   request that the client abort transmission of a request without error
   by sending a RST_STREAM with an error code of NO_ERROR after sending
   a complete response (i.e., a frame with the END_STREAM flag).
   Clients MUST NOT discard responses as a result of receiving such a
   RST_STREAM, though clients can always discard responses at their
   discretion for other reasons.
"""

If packet containing STREAM and RST_STREAM frames is lost, then
we will retransmit, but we
​are ​
only allowed to retransmit RST_STREAM.
We can still send RST_STREAM after getting ACK against STREAM
frame from peer, but it incurs latency, and it is unnecessarily
complicated.  Over TCP, we just send them in one packet, and it
works fine.



Best regards,
Tatsuhiro Tsujikawa