[multipathtcp] MPTCP FAST_CLOSE

Olivier Bonaventure <Olivier.Bonaventure@uclouvain.be> Mon, 13 November 2017 14:30 UTC

Return-Path: <olivier.bonaventure@uclouvain.be>
X-Original-To: multipathtcp@ietfa.amsl.com
Delivered-To: multipathtcp@ietfa.amsl.com
Received: from localhost (localhost []) by ietfa.amsl.com (Postfix) with ESMTP id BD2CE129601 for <multipathtcp@ietfa.amsl.com>; Mon, 13 Nov 2017 06:30:35 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.815
X-Spam-Status: No, score=-2.815 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_PASS=-0.001, SUBJ_ALL_CAPS=1.506] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=uclouvain.be
Received: from mail.ietf.org ([]) by localhost (ietfa.amsl.com []) (amavisd-new, port 10024) with ESMTP id 8MBJzIWxXSuF for <multipathtcp@ietfa.amsl.com>; Mon, 13 Nov 2017 06:30:34 -0800 (PST)
Received: from smtp5.sgsi.ucl.ac.be (smtp.sgsi.ucl.ac.be []) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 5FB69129A9C for <multipathtcp@ietf.org>; Mon, 13 Nov 2017 06:30:33 -0800 (PST)
Received: from mbpobo.lan (host-78-129-6-94.dynamic.voo.be []) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: obonaventure@smtp5.sgsi.ucl.ac.be) by smtp5.sgsi.ucl.ac.be (Postfix) with ESMTPSA id 7CFB767D9E8; Mon, 13 Nov 2017 15:30:23 +0100 (CET)
DKIM-Filter: OpenDKIM Filter v2.9.2 smtp5.sgsi.ucl.ac.be 7CFB767D9E8
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=uclouvain.be; s=selucl; t=1510583425; bh=WXXjEzJ2lBiPnT3u3qRed0EKeUa/4MCO8EDwEVYf8t8=; h=Reply-To:To:Cc:From:Subject:Date; b=Lv0EcOA2oAQFWltRFhp6PakQ6m9mAmXqNMTfwVz2KGZI/6Muy7+26ta8wCXdN1eBd 6BI3UPFz2qi6ANmH/fi9eUBidU47rJU7dBbi9BkZlx2tmDlL2hPyPUqkoLacLIBDMl XdCTP+31LtIkKxefZj8I9XXA9BJIdOdYz11O+85U=
X-Virus-Status: Clean
X-Virus-Scanned: clamav-milter 0.99.2 at smtp-5
Reply-To: Olivier.Bonaventure@uclouvain.be
To: multipathtcp <multipathtcp@ietf.org>
From: Olivier Bonaventure <Olivier.Bonaventure@uclouvain.be>
Message-ID: <c320f331-aa18-c4e2-34a9-1ec15cc627b3@uclouvain.be>
Date: Mon, 13 Nov 2017 15:30:23 +0100
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:52.0) Gecko/20100101 Thunderbird/52.4.0
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: fr-classic
Content-Transfer-Encoding: 7bit
X-Sgsi-Spamcheck: SASL authenticated,
X-SGSI-MailScanner-ID: 7CFB767D9E8.A69EB
X-SGSI-MailScanner: Found to be clean
X-SGSI-From: olivier.bonaventure@uclouvain.be
X-SGSI-Spam-Status: No
Archived-At: <https://mailarchive.ietf.org/arch/msg/multipathtcp/fI2cgcRxttl20HyRs_QkDgXT9cM>
Subject: [multipathtcp] MPTCP FAST_CLOSE
X-BeenThere: multipathtcp@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: Multi-path extensions for TCP <multipathtcp.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/multipathtcp>, <mailto:multipathtcp-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/multipathtcp/>
List-Post: <mailto:multipathtcp@ietf.org>
List-Help: <mailto:multipathtcp-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/multipathtcp>, <mailto:multipathtcp-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 13 Nov 2017 14:30:36 -0000


Sorry for being late with this, but the beginning of the fall semester 
is always too busy for me.

During the summer, there was a discussion on the FAST_CLOSE option that 
was triggered by Francois.

The current text of RFC6824bis uses the FAST_CLOSE option inside ACK 
packets, but deployment experience has shown that this results in 
additional complexity since the ACK must be retransmitted to ensure its 
reliable delivery.

Here is a proposed update for section 3.5 that allows a sender to either 
send FAST_CLOSE inside ACK or RST while a receiver must be ready to 
process both. Changes are marked with * *

3.5.  Fast Close

    Regular TCP has the means of sending a reset (RST) signal to abruptly
    close a connection. With MPTCP, a *reguler* RST only has the scope 
of the
    subflow and will only close the concerned subflow but not affect the
    remaining subflows.  MPTCP's connection will stay alive at the data
    level, in order to permit break-before-make handover between
    subflows.  It is therefore necessary to provide an MPTCP-level
    "reset" to allow the abrupt closure of the whole MPTCP connection,
    and this is the MP_FASTCLOSE option.

    MP_FASTCLOSE is used to indicate to the peer that the connection will
    be abruptly closed and no data will be accepted anymore.  The reasons
    for triggering an MP_FASTCLOSE are implementation specific.  Regular
    TCP does not allow sending a RST while the connection is in a
    synchronized state [RFC0793].  Nevertheless, implementations allow
    the sending of a RST in this state, if, for example, the operating
    system is running out of resources.  In these cases, MPTCP should
    send the MP_FASTCLOSE.  This option is illustrated in Figure 14.

                             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
        |     Kind      |    Length     |Subtype|      (reserved)       |
        |                      Option Receiver's Key                    |
        |                            (64 bits)                          |
        |                                                               |

                 Figure 14: Fast Close (MP_FASTCLOSE) Option

    If Host A wants to force the closure of an MPTCP connection, *it has 
two different options* :

    - *Option A (ACK) : *Host A sends an ACK containing the MP_FASTCLOSE 
option on one
       subflow, containing the key of Host B as declared in the initial
       connection handshake.  On all the other subflows, Host A sends a
       regular TCP RST to close these subflows, and tears them down.
       Host A now enters FASTCLOSE_WAIT state.

    - *Option R (RST) : Host A sends a RST containing the MP_FASTCLOSE 
option on all
       subflows, containing the key of Host B as declared in the initial
       connection handshake.  Host A can tear the subflows and the 
connection down immediately.*

    *If a host receives a packet with a valid MP_FASTCLOSE option, it 
shall process it as follows :*

    o  Upon receipt of an *ACK* with MP_FASTCLOSE, containing the valid 
key, Host B answers on the same subflow with a TCP RST and tears down all
       subflows.  Host B can now close the whole MPTCP connection (it
       transitions directly to CLOSED state).

    o  As soon as Host A has received the TCP RST on the remaining
       subflow, it can close this subflow and tear down the whole
       connection (transition from FASTCLOSE_WAIT to CLOSED states).  If
       Host A receives an MP_FASTCLOSE instead of a TCP RST, both hosts
       attempted fast closure simultaneously.  Host A should reply with a
       TCP RST and tear down the connection.

    o  If Host A does not receive a TCP RST in reply to its MP_FASTCLOSE
       after one retransmission timeout (RTO) (the RTO of the subflow
       where the MPTCP_RST has been sent), it SHOULD retransmit the
       MP_FASTCLOSE.  The number of retransmissions SHOULD be limited to
       avoid this connection from being retained for a long time, but
       this limit is implementation specific.  A RECOMMENDED number is 3.
       If no TCP RST is received in response, Host A SHOULD send a TCP
       RST *with the MP_FASTCLOSE option* itself when it releases state 
in order to clear any remaining state at middleboxes.

  *o  Upon receipt of a RST with MP_FASTCLOSE, containing the valid key, 
Host B tears down all subflows. Host B can now close the whole MPTCP 
connection (it transitions directly to CLOSED state).*


The burden of the MP_FASTCLOSE is on the host that decides to close the 
connection (typically the server, but not necessarily). The text above 
allows it to opt for either ACK or RST without adding complexity to the 
other side.

Another point that might be discussed in RFC6824bis is how a host should 
react when there are all the subflows associates to a Multipath TCP 
connection are in the CLOSED state, but the connection is still alive. 
At this point, it is impossible to send or receive data over the 
connection. It should attempt to reestablish one subflow to keep the 
connection alive.