Re: [tcpm] Detect Lost Retransmit with SACK
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [tcpm] Detect Lost Retransmit with SACK



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 at nets.rwth-aachen.de] 
> Sent: Dienstag, 10. November 2009 13:51
> To: Scheffenegger, Richard
> Cc: tcpm at 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 at 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 at cs.rwth-aachen.de
// web: http://www.umic-mesh.net
//


Note: Messages sent to this list are the opinions of the senders and do not imply endorsement by the IETF.