Re: [tcpm] Detect Lost Retransmit with SACK
Alexander Zimmermann <Alexander.Zimmermann@nets.rwth-aachen.de> Tue, 10 November 2009 15:13 UTC
Return-Path: <Alexander.Zimmermann@nets.rwth-aachen.de>
X-Original-To: tcpm@core3.amsl.com
Delivered-To: tcpm@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id 6DF6628C137 for <tcpm@core3.amsl.com>; Tue, 10 Nov 2009 07:13:21 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.201
X-Spam-Level:
X-Spam-Status: No, score=-4.201 tagged_above=-999 required=5 tests=[BAYES_00=-2.599, HELO_EQ_DE=0.35, HELO_MISMATCH_DE=1.448, J_CHICKENPOX_33=0.6, RCVD_IN_DNSWL_MED=-4]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id gg+eqc++CGSt for <tcpm@core3.amsl.com>; Tue, 10 Nov 2009 07:13:19 -0800 (PST)
Received: from mta-1.ms.rz.rwth-aachen.de (mta-1.ms.rz.RWTH-Aachen.DE [134.130.7.72]) by core3.amsl.com (Postfix) with ESMTP id 2904328C1C8 for <tcpm@ietf.org>; Tue, 10 Nov 2009 07:13:19 -0800 (PST)
MIME-version: 1.0
Content-transfer-encoding: 7bit
Content-type: text/plain; charset="us-ascii"
Received: from ironport-out-1.rz.rwth-aachen.de ([134.130.5.40]) by mta-1.ms.rz.RWTH-Aachen.de (Sun Java(tm) System Messaging Server 6.3-7.04 (built Sep 26 2008)) with ESMTP id <0KSW008BBFMXN570@mta-1.ms.rz.RWTH-Aachen.de> for tcpm@ietf.org; Tue, 10 Nov 2009 16:13:45 +0100 (CET)
X-IronPort-AV: E=Sophos;i="4.44,716,1249250400"; d="scan'208";a="33228142"
Received: from relay-auth-2.ms.rz.rwth-aachen.de (HELO relay-auth-2) ([134.130.7.79]) by ironport-in-1.rz.rwth-aachen.de with ESMTP; Tue, 10 Nov 2009 16:13:45 +0100
Received: from 43-047.eduroam.rwth-aachen.de ([unknown] [134.61.43.47]) by relay-auth-2.ms.rz.rwth-aachen.de (Sun Java(tm) System Messaging Server 7.0-3.01 64bit (built Dec 9 2008)) with ESMTPA id <0KSW005JWFMWE660@relay-auth-2.ms.rz.rwth-aachen.de> for tcpm@ietf.org; Tue, 10 Nov 2009 16:13:45 +0100 (CET)
From: Alexander Zimmermann <Alexander.Zimmermann@nets.rwth-aachen.de>
In-reply-to: <5FDC413D5FA246468C200652D63E627A065D0E76@LDCMVEXC1-PRD.hq.netapp.com>
Date: Tue, 10 Nov 2009 16:13:44 +0100
Message-id: <489EB3AF-F3B9-4196-A25C-F19B1B67079F@nets.rwth-aachen.de>
References: <5FDC413D5FA246468C200652D63E627A065D0E76@LDCMVEXC1-PRD.hq.netapp.com>
To: "Scheffenegger, Richard" <rs@netapp.com>
X-Mailer: Apple Mail (2.1077)
Cc: "tcpm@ietf.org" <tcpm@ietf.org>
Subject: Re: [tcpm] Detect Lost Retransmit with SACK
X-BeenThere: tcpm@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: TCP Maintenance and Minor Extensions Working Group <tcpm.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/tcpm>, <mailto:tcpm-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/tcpm>
List-Post: <mailto:tcpm@ietf.org>
List-Help: <mailto:tcpm-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/tcpm>, <mailto:tcpm-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 10 Nov 2009 15:13:21 -0000
Hi Richard, thanks for the updated example. However, since your mailer is a little bit too eager in formatting emails, could you send your example as an attached file? Alex Am 10.11.2009 um 15:34 schrieb Scheffenegger, Richard: > > Thanks Alex, > > I will try to give my example in another form: (RWND = 40000; > the timing might not be perfectly depicted). > > ACK Transmitted Received ACK Sent > Received Segment Segment (Including SACK Blocks) > > > 0- 999 > 1000- 1999 > 0- 999 > 1000 > 1000 1000- 1999 > 2000- 2999 2000 > 2000 3000- 3999 > 4000- 4999 2000- 2999 > 5000- 5999 3000 > 3000 6000- 6999 3000- 3999 > 7000- 7999 4000 > 4000 8000- 8999 4000- 4999 > 9000- 9999 5000 > 5000 10000-10999 5000- 5999 > 11000-11999 6000 > 6000 12000-12999 6000- 6999 > 13000-13999 7000 > 7000 7000- 7999 > 14000-14999 8000 > 8000 8000- 8999 > 15000-15999 9000 > 9000 9000-10000 > 16000-16999 10000 > 10000 (dropped) > 17000-17999 > (dropped) > . > (dropped) > . > (dropped) > . > (dropped) > . > 15000-15999 > 10000, > SACK=15k-16k > 10000, SACK=15k-16k 16000-16999 > 18000-18999 10000, > SACK=15k-17k > 10000, SACK=15k-17k 17000-17999 > 19000-19999 10000, > SACK=15k-18k > 10000, SACK=15k-18k . > 10000-10999 > 18000-18999 > 10000, > SACK=15k-19k > 10000, SACK=15k-19k 19000-19999 > 11000-11999 10000, > SACK=15k-20k > 10000, SACK=15k-20k (dropped) > 12000-12999 > 11000-11999 > 10000, > SACK=11k-12k;15k-20k > 10000, SACK=11k-12k;15k-20k 12000-12999 > 13000-13999 10000, > SACK=11k-13k;15k-20k > 10000, SACK=11k-13k;15k-20k > 14000-14999 13000-13999 > 10000, > SACK=11k-14k;15k-20k > 10000, SACK=11k-14k;15k-20k 14000-14999 > !*A 20000-20999 10000, > SACK=11k-20k > ! 10000, SACK=11k-20k > ! 21000-21999 20000-20999 > ! 22000-22999 10000, > SACK=11k-21k > ! 10000, SACK=11k-21k > ! 23000-23999 21000-21999 > ! 24000-24999 10000, > SACK=11k-22k > ! 10000, SACK=11k-22k 22000-22999 > ! 25000-25999 10000, > SACK=11k-23k > ! 10000, SACK=11k-23k 23000-23999 > !*B 26000-26999 10000, > SACK=11k-24k > ! :: :: :: :: > !RWND Full: 10000, SACK=11k-50k > ! 10000, SACK=11k-50k > ! > ! :: :: :: :: > ! > !RTO: > ! 10000-10999 > ! 50000 > !Slow-Start > > > All the Lines marked with ! Indicate current best practise behaviour > (RFC, no drafts), if I'm not mistaken - left out LimitedTransmit for > simplicity's sake. > > At point *A (or one ACK later), the sender would have the earliest > possibility to detect a lost retransmission, taking into account the > usual 3 ACK reordering hold-down... In this example, this happens by > coincidence at the same time, that the sender has finished fast > retransmission (and would go into fastrecovery, restoring CWND, etc; > this is NOT a requirement....; Actually, the cwnd is likely to be in > the order of 100reds of segments, and most of the time, the sender > will have finished the retransmission episode before one RTT is up) > > At point *B, the sender could detect with 100% certainty (2*RTT) that > one retransmitted segment was lost. > > However, current practise (excluding Linux with FACK for now, as > that's not in RFCs) is to continue sending SND.NXT, until RWND is > full or RTO expires... > > Note that the suggested algorithm will never trigger if no > retransmitted packet is lost - if would behave exactly the same as > currently. > > Only when *A or *B marks are detected, the DUPACK detection logic > would re-arm (a more complex implementation could re-arm at the first > sign of retransmission loss, and dis-arm if a ACK within DupAck > distance ACKs the segment, for which it armed before). > > Thus, a lost retransmission would be retried close to the earliest > possibility, instead of waiting until RTO (a bit like what FACK seems > to try to do, but with low reliability as it seems). > > Multiple Burst loss events, each lossing a different segment in > one cwnd would be handled by SACK. > > If there are extended periods of time, where no communication is > possible (the same segment doesn't get lost only twice, but multiple > times), RTO would eventually fire and, using the RTO backoff > algorithm, retry at ever increasing intervals with very low > (1-2 segments) rate... > > > Do you have a test bed, where you can deliberately drop the same > segment twice (or n times) and check the TCP Behaviour for yourself? > > Best regards, > > > > Richard Scheffenegger > Field Escalation Engineer > NetApp Global Support > NetApp > +43 1 3676811 3146 Office (2143 3146 - internal) > +43 676 654 3146 Mobile > www.netapp.com > Franz-Klein-Gasse 5 > 1190 Wien > > > -----Original Message----- > From: Alexander Zimmermann > [mailto:alexander.zimmermann@nets.rwth-aachen.de] > Sent: Dienstag, 10. November 2009 13:51 > To: Scheffenegger, Richard > Cc: tcpm@ietf.org > Subject: Re: Detect Lost Retransmit with SACK > > Hi Richard, > > I discussed your example with Arnd (he is a line-of-sight colleague). > Your "algorithms" > may workwhen you have only one bust lost per cwnd. If you have multiple > non-burst > loss (e.g. WLAN), IMHO, is doesn't work. > > Am 09.11.2009 um 18:27 schrieb Scheffenegger, Richard: > >> >> Hi Alexander, >> >> Thanks for the welcome :) >> >> I fork another thread with the LimitedTransport||FastRecovery / ABC > interaction... >> >> >> I will try to sketch up an example to demonstrate what problem I'm > trying to address: >> >> >> Let's assume the cwnd is already open for at least 7 segments, before > the segment with >> sequence number 10000 is the first one to be dropped by the network. >> >> Also, let's assume that FastRetransmit runs from the left edge of the > leftmost hole >> (SND.UNA) upwards, and that per ACK only a single segment is sent. >> >> >> Triggering ACK Left Right Left Right >> Segment Edge 1 Edge 1 Edge 2 Edge 2 >> >> 9000 9000 >> 10000 (lost) * >> 11000 (lost) >> 12000 (lost) >> 13000 (lost) >> 14000 (lost) >> 15000 10000 15000 16000 >> 16000 10000 15000 17000 >> 17000 10000 15000 18000 > > Ok, I count 9 segments ;-) Anyway, your example is a little bit strange. > You assume you send 9 segment in a burst. Then your ACK for 9000 will > trigger > the segment 18000. Then the 2 DUPACKs for 15000 and 16000 will trigger > 19000, > 20000 respectively (Limited Transmit). The third DUPACK will trigger the > Fast > Retransmit 10000. Since NextSeq() and pipe allow you retransmit 11000, > 12000. > > At this point you have to wait since the pipe is full (if I calculate > pipe in a rush correctly). > A RTT later you will get 3 Dupacks, even if the 10000 is not lost. > > OK, I think you can adjust your example so that it works for the given > case, however in > other scenarios (multiple loss, reordering, packet duplication,...) it > will be much more > complicated. > > I suggest writing examples as Ilpo does in > http://tools.ietf.org/html/draft-ietf-tcpm-sack-recovery-entry-00. > It's much more easier to read. > >> >> 3 ACKs trigger fast retransmit >> >> 10000 (lost again) >> 11000 10000 11000 12000 15000 18000 >> 12000 10000 11000 13000 15000 18000 >> 13000 10000 11000 14000 15000 18000 >> -> here we have again 3 ACKs indicating a another loss of one of the > retransmitted >> packets. The leftmost hole did not change, while the overall number of > SACKed >> octets did decrease for 3 consecutive ACKs (4; 3 and 2 segments marked > by SACK). >> > > Alex > > // > // Dipl.-Inform. Alexander Zimmermann > // Department of Computer Science, Informatik 4 > // RWTH Aachen University > // Ahornstr. 55, 52056 Aachen, Germany > // phone: (49-241) 80-21422, fax: (49-241) 80-22220 > // email: zimmermann@cs.rwth-aachen.de > // web: http://www.umic-mesh.net > // > // // Dipl.-Inform. Alexander Zimmermann // Department of Computer Science, Informatik 4 // RWTH Aachen University // Ahornstr. 55, 52056 Aachen, Germany // phone: (49-241) 80-21422, fax: (49-241) 80-22220 // email: zimmermann@cs.rwth-aachen.de // web: http://www.umic-mesh.net //
- [tcpm] Detect Lost Retransmit with SACK Alexander Zimmermann
- Re: [tcpm] Detect Lost Retransmit with SACK Scheffenegger, Richard
- [tcpm] LimitedTransport||FastRecovery / ABC inter… Scheffenegger, Richard
- Re: [tcpm] Detect Lost Retransmit with SACK Scheffenegger, Richard
- Re: [tcpm] Detect Lost Retransmit with SACK Alexander Zimmermann
- Re: [tcpm] Detect Lost Retransmit with SACK Scheffenegger, Richard
- Re: [tcpm] Detect Lost Retransmit with SACK Alexander Zimmermann
- Re: [tcpm] Detect Lost Retransmit with SACK Ilpo Järvinen