Closing on CONNECTION_CLOSE

Eric Rescorla <ekr@rtfm.com> Thu, 27 July 2017 13:48 UTC

Return-Path: <ekr@rtfm.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 AE8EA13201F for <quic@ietfa.amsl.com>; Thu, 27 Jul 2017 06:48:00 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.598
X-Spam-Level:
X-Spam-Status: No, score=-2.598 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=rtfm-com.20150623.gappssmtp.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 v6y53ZwwEdkL for <quic@ietfa.amsl.com>; Thu, 27 Jul 2017 06:47:58 -0700 (PDT)
Received: from mail-yw0-x229.google.com (mail-yw0-x229.google.com [IPv6:2607:f8b0:4002:c05::229]) (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 BD9B8120721 for <quic@ietf.org>; Thu, 27 Jul 2017 06:47:58 -0700 (PDT)
Received: by mail-yw0-x229.google.com with SMTP id u207so45049230ywc.3 for <quic@ietf.org>; Thu, 27 Jul 2017 06:47:58 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rtfm-com.20150623.gappssmtp.com; s=20150623; h=mime-version:from:date:message-id:subject:to; bh=ZZyY3yWcLXrvnNN5QE5oACP3RqNegU+oYtp04dm3AuM=; b=fccaR1/+6gBtGGCjEfBuoNaWqzERULD1mcd5+AQcMzUs6mG9K65AwJ65KSUsNp8ddd VE+Z1jh2eGdYjs+Nh/YCe++ekMqZjyrtrPFm7DTnbVSq1XlrU+JAwLy5q6HkiFeTLZk3 ExWQyOSnTgwutcyQtbU9uPoJLo6TWdTuDzDckPLibp6JVOLtcLg+PFw3tVo0pb6GAsro VqO8XMQqZB846iILYmWVQFPaYhHvg/t7ZhLZAQuFIKbb7k5h/2LEczFk7dxae65aSsO1 D/CtS70FmojZw+QjTumCn8go/iuyxzsTCQf7RBWS7Wk80PybZhaBwPcF+r5ODve31HPy Ba/A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=ZZyY3yWcLXrvnNN5QE5oACP3RqNegU+oYtp04dm3AuM=; b=Ip4ulsZSokMLp/Osw73f/zUxaMouL6aVcoRRaPhitv89kkkCiIr+bKxhm4tKZ0qEXk d+FtWxelrmfVUap4vDrVJshqZccYvr3QvifiP6TaRduEnmPkv9J+jk+VwYt7SxvH2MBo UxWZUbGlauB10lQJBeKNgHtuaF95xgBpItOUT0e0OCr+yzU1DuEm2PsZNDIpx0XSer/z tf98+TbrRXdUEBrwAeAYYvwgLAPjbwRy0dyMwDNgzgY3T3PKz5aAYlrj79U1ZHksLqDf iS204+XdQM1RRj9YePEwjmBtld6rcDcC+rQt1vawBA8pL4RPEK/YtBz5YZKee4FB/HoC KtHA==
X-Gm-Message-State: AIVw112Ko1u4sOCcZSqZIi++4beefNYPLAKKyp29acuuFRY6/GDNE6xA NWsuBxMu8t9dz5zdvZGOaCxvuPhlALKirxY=
X-Received: by 10.37.212.140 with SMTP id m134mr3608266ybf.256.1501163277705; Thu, 27 Jul 2017 06:47:57 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.129.36.12 with HTTP; Thu, 27 Jul 2017 06:47:17 -0700 (PDT)
From: Eric Rescorla <ekr@rtfm.com>
Date: Thu, 27 Jul 2017 06:47:17 -0700
Message-ID: <CABcZeBP_Xh1QC9Qxhy5HYiMiTfknPs7Yp7+X_KnQE1O-juxJ5g@mail.gmail.com>
Subject: Closing on CONNECTION_CLOSE
To: IETF QUIC WG <quic@ietf.org>
Content-Type: multipart/alternative; boundary="94eb2c07d966eb0ccf05554ccfd1"
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/nnWpRFyLnhx7WWUxub2Bo-zjZFo>
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: Thu, 27 Jul 2017 13:48:01 -0000

There have been a number of issues raised about the exact semantics of
CONNECTION_CLOSE [0], but we have never really closed on them. As Ryan
says, one might have think that CONNECTION_CLOSE is like TCP FIN or
like TCP RST.


In the FIN-like model:
- The closing side sends a CONNECTION_CLOSE
- The non-closing side ACKs it
- The closing side keeps retransmitting until it gets an ACK or it
  times out.


In the RST-like model:
- The closing side sends a CONNECTION_CLOSE
- The non-closing side just terminates the connection
- The closing side responds to new packets from the non-closing side
  with a retransmitted CONNECTION_CLOSE (perhaps just a stored packet)
  for some time.

The specification seems kind of vague on this point (there is a big
TODO for TIME_WAIT) and in places suggests retransmission [1] I had
previously assumed the FIN-like model but after talking to Ian this
morning I think the RST-like model is better. It's easier to implement
because you don't need to manage a post-close state machine on either
side. The only downside I'm really aware of is that the closing side
has to keep state for something like 2MSL (so that it can properly
respond to late packets), rather than being able to clean up on
receiving an ACK. However, this isn't that big a deal, because as
noted above, you can throw away the connection and just send a stored
packet, or alternately, just send public reset (or just go silent).

Given that ID1 does include CONNECTION_CLOSE, albeit with limited
semantics, it would be good to resolve this soon. Are there people who
want to argue in favor of the FIN-like model?

-Ekr


[0] https://github.com/quicwg/base-drafts/issues/330
https://github.com/quicwg/base-drafts/issues/328

[1] See also the spec for ID1 which says:
"The packet containing a connection close does not need to be
retransmitted."