Re: [multipathtcp] Questions on fallback/infinite map

Anumita Biswas <anumita_biswas@apple.com> Wed, 26 June 2013 17:29 UTC

Return-Path: <anumita_biswas@apple.com>
X-Original-To: multipathtcp@ietfa.amsl.com
Delivered-To: multipathtcp@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id CC90411E8104 for <multipathtcp@ietfa.amsl.com>; Wed, 26 Jun 2013 10:29:12 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -9.999
X-Spam-Level:
X-Spam-Status: No, score=-9.999 tagged_above=-999 required=5 tests=[BAYES_00=-2.599, J_CHICKENPOX_74=0.6, RCVD_IN_DNSWL_HI=-8]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id WVRUT7sexPxF for <multipathtcp@ietfa.amsl.com>; Wed, 26 Jun 2013 10:28:52 -0700 (PDT)
Received: from mail-out.apple.com (mail-out.apple.com [17.151.62.49]) by ietfa.amsl.com (Postfix) with ESMTP id A634C21F9C36 for <multipathtcp@ietf.org>; Wed, 26 Jun 2013 10:28:47 -0700 (PDT)
MIME-version: 1.0
Content-type: text/plain; CHARSET="US-ASCII"
Received: from relay5.apple.com ([17.128.113.88]) by mail-out.apple.com (Oracle Communications Messaging Server 7u4-23.01 (7.0.4.23.0) 64bit (built Aug 10 2011)) with ESMTP id <0MP000HKZGI3WH82@mail-out.apple.com> for multipathtcp@ietf.org; Wed, 26 Jun 2013 10:28:24 -0700 (PDT)
X-AuditID: 11807158-b7f486d0000079b6-4d-51cb24b89403
Received: from panthera-tigris.apple.com (panthera-tigris.apple.com [17.193.13.99]) (using TLS with cipher AES128-SHA (128/128 bits)) (Client did not present a certificate) by relay5.apple.com (Apple SCV relay) with SMTP id 81.68.31158.8B42BC15; Wed, 26 Jun 2013 10:28:24 -0700 (PDT)
From: Anumita Biswas <anumita_biswas@apple.com>
In-reply-to: <5E21A2ABD63A394988AE055C785C29C4063AF444@SINPEX01CL02.citrite.net>
Date: Wed, 26 Jun 2013 10:28:24 -0700
Content-transfer-encoding: quoted-printable
Message-id: <254E2C36-D372-44F2-8531-01F14DA7EED7@apple.com>
References: <5E21A2ABD63A394988AE055C785C29C4063ACBD6@SINPEX01CL02.citrite.net> <DA1D8E13-907D-49E1-9323-6A6AA87006F8@cs.ucl.ac.uk> <5E21A2ABD63A394988AE055C785C29C4063AF444@SINPEX01CL02.citrite.net>
To: Krishna Khanal <krishna.khanal2@citrix.com>
X-Mailer: Apple Mail (2.1508)
X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrNLMWRmVeSWpSXmKPExsUieJA3WXeHyulAg30H1SxmPFrBZrG/Zxqj xefV19kcmD1eT57A6PHs+FomjyVLfjIFMEdx2aSk5mSWpRbp2yVwZexcP4mp4LVNxabGQ+wN jOcMuhg5OCQETCRereLsYuQEMsUkLtxbz9bFyMUhJLCQSeLS1iMsIAlmAS2JG/9eMoHYvAJ6 Ekv/zWEE6RUWsJOY2aAFEmYT0Jc4+ugGM4jNKRAg8aepiRHEZhFQlZjW8o0dYkyMxLl1bWwQ trbEsoWvmSFG2kjsWjSDBWLvcUaJtV3vwfaKAA099R1kKMidshI7fydNYOSfheSiWUgumoVk 7AJG5lWMAkWpOYmVpnqJBQU5qXrJ+bmbGEFB2FAYsYPx/zKrQ4wCHIxKPLwfGE8HCrEmlhVX 5h5ilOBgVhLhvSQHFOJNSaysSi3Kjy8qzUktPsQozcGiJM4r6XU8UEggPbEkNTs1tSC1CCbL xMEp1cBYsWxjmOzy2Fo5zeDEvQ7a8V6BKzv25EjO2BZ6rLc3O0Jmc7NYulEht+OsN9eSLpsm v9uXttnj5bqIwNSePblOLpquH8SnNvIGBU5cVBNXd7SzWkitq0lPqaox4S/fv619zLNOPnrp zDvVOPEY78Wv6Ryur05+X+x2NND8e7NO9smTv15ti1ZiKc5INNRiLipOBAAZSUCuPgIAAA==
Cc: "multipathtcp@ietf.org" <multipathtcp@ietf.org>
Subject: Re: [multipathtcp] Questions on fallback/infinite map
X-BeenThere: multipathtcp@ietf.org
X-Mailman-Version: 2.1.12
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: <http://www.ietf.org/mail-archive/web/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: Wed, 26 Jun 2013 17:29:13 -0000

MP_FAIL and Infinite map options can be dropped in just the way that the DSS option (all being option 30) was dropped by the middlebox. So when we are talking of a fallback situation caused by a drop of DSS option, sending MP_FAIL and infinite mapping is good practice but not gauranteed to get the endpoints to a good sync point. MP_FAIL and infinite mapping are more useful when DSS checksum failure occurs - which is a case where options aren't dropped, but data is segmented/reassembled by middle boxes.

Instead, I think we have to break this down into how many subflows exist and make a call based on that.

1. If a single subflow exists, the data is contiguous, so even if no DSS option is received, the data can be accepted. This is true of both senders in a bi-directional connection. I think the RFC also suggests special casing the single subflow case to accept data as being contiguous in both the subflow level and data sequence space level. But this also assumes that the MPTCP layer does not retransmit unacked data on the same subflow - because this breaks the contiguous property of a single subflow. 

2. If multiple subflows exist, and both paths are known to be functional (connected), then when a receiver receives data without the DSS option, then the fully mp capable subflow can be used to fallback with MP_FAIL(from receiver) and Infinite mapping(from sender).

3. In an active/backup mptcp session, where one subflow is used more frequently than another, fallback is more complicated. If data is received on backup path without DSS, when it is known that the primary path is fully mp capable and has not been removed with a REMOVE_ADDR, an attempt can be made to fallback on the primary path. However, if the primary path is no longer available, and the backup path has not sent a REMOVE_ADDR to indicate the loss of primary path, then fallback won't occur correctly. In that case, the MP_FAIL sent down the primary path won't be received by the data sender. It will also not be clear where the backup path is in the Data Sequence space. But the assumption here is that when MP_FAIL is sent on the primary path, the backup path is RST as per RFC. The non-functional primary path will eventually be detected and the MPTCP connection closed/reset. Its ok to let the connection die in this degenerate case - in my view applications and apis supporting them should be capable of handling connection errors already. 

4. In an active/backup mptcp session, if a REMOVE_ADDR was received on a path and it is known that there is only one subflow left in the session, it could be considered to be case 1 above. 

Whatever data is outstanding on the network when fallback occurs, it is expected to fall into one of the cases above - with data being accepted on a single subflow, and data being discarded in presence of multiple subflows, when it arrives without DSS option. It does make the implementation complex to track whether a session has one or multiple subflows but it improves the chances of recovering from lost options in a single subflow scenario.

Until middleboxes are MPTCP compliant, I think it probably makes sense to have the overhead of sending Data ACKs whenever the subflow level ACK also acks new data. Window updates, Keepalives and MPTCP signals like MP_PRIO probably don't need to have Data ACKs.

For a sender that receives subflow level ACKs but no Data ACKs, fallback could be achieved by sending infinite mapping on a known fully MP capable subflow path. Depending on number of subflows on the session, it can fall into one of the cases above to do fallback:

5. If a single subflow exists, data is contiguous, so move the right edge of the Data Sequence Space to match the right edge of the subflow level send window. 

6. If multiple subflows exist, and both paths are known to be functional (connected), send infinite mapping on a known fully mp capable path. Close other subflows.

7. In an active/backup mptcp session, where one subflow is used more frequently than another, follows a similar scheme as Case 3 and Case 4 above except send Infinite Mapping instead of MP_FAIL.

Anumita


On Jun 26, 2013, at 2:33 AM, Krishna Khanal <krishna.khanal2@citrix.com> wrote:

> Thanks Costin, Yoshifumi for the information.
> 
> For case 2, yes from my implementation/testing experience also its better to fallback in both the direction, but the problem here is that the host A may not have knowledge of from which DSN to start infinite map if there are some unacked packets already on the way because host B may not send MP_FAIL with expected DSN in this case. The simple solution here is to resend all the unacked data with the infinite map in the first packet and if B has already received that data, it can send the corrected DATA_ACK until it receives infinite map with that DSN. This will guarantee both hosts are in sync at mptcp level. Please suggest if there are any alternate way to make sure host A and B are in sync in this situation.
> 
> Regards,
> Krishna
> 
> 
> -----Original Message-----
> From: Costin Raiciu [mailto:c.raiciu@cs.ucl.ac.uk] 
> Sent: Wednesday, June 26, 2013 2:48 PM
> To: Krishna Khanal
> Cc: multipathtcp@ietf.org
> Subject: Re: [multipathtcp] Questions on fallback/infinite map
> 
> Hi Krishna,
> 
>> 1. What is the recommended action when a host receives a plain ack or data in the middle of transaction and there is a single subflow? RFC has taken care of receiving plain data or ack before the path is mptcp confirmed but I don't see any recommendation when it happens on middle of transaction.
> 
> Two cases:
> - data segment without mptcp options - the segment should be accepted if it is (subflow) window, and a subflow ACK covering the sequence numbers should be generated. The data obviously cannot be  placed into the connection level receive buffer, since we don't know its mapping. One option is to just drop the data and force the sender to retransmit. Another option, which is used by the Linux implementation, is to save the data in the subflow receive window
> and wait to see if a mapping for that   data arrives on subsequent segments.
> - ack without mptcp options - no problem here; the ack is just processed normally if it is in the subflow's window, as with regular tcp. We didn't want to mandate that all acks carry the Data ACK because in some cases (e.g. unidirectional data transfer) we would be just wasting option space.
> 
>> 2. Is infinite map/mp_fail unidirectional or bidirectional? Lets suppose host A sends mp_fail to host B, host B will send infinite map to host A and after that there is no DSS on the data packets from B to A and host A will send only plain ack to B. But lets suppose host A also has some data to send to host B, can host A still use DSS and host B can send data ack in this case? I don't see RFC mentioning any recommended action in this case, so I believe host A can still use DSS with data and host B can send data ack.
> 
> The spec allows for fallback in only one direction, but in practice I suspect both directions will be affected by the middlebox that cause the fallback. So it makes sense, as an implementation heuristic, to fall back to TCP in both directions as soon as one direction is problematic.
> 
> Cheers,
> Costin
> 
> _______________________________________________
> multipathtcp mailing list
> multipathtcp@ietf.org
> https://www.ietf.org/mailman/listinfo/multipathtcp