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
//