Re: [tcpm] RACK - variable explanation

Ilpo Järvinen <ilpo.jarvinen@helsinki.fi> Wed, 28 November 2018 15:57 UTC

Return-Path: <ilpo.jarvinen@helsinki.fi>
X-Original-To: tcpm@ietfa.amsl.com
Delivered-To: tcpm@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 97B5E130EB8 for <tcpm@ietfa.amsl.com>; Wed, 28 Nov 2018 07:57:08 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.2
X-Spam-Level:
X-Spam-Status: No, score=-4.2 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=unavailable autolearn_force=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id RTBMKoQzHm-M for <tcpm@ietfa.amsl.com>; Wed, 28 Nov 2018 07:57:07 -0800 (PST)
Received: from smtp-rs2-vallila1.fe.helsinki.fi (smtp-rs2-vallila1.fe.helsinki.fi [128.214.173.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 856EA128CF3 for <tcpm@ietf.org>; Wed, 28 Nov 2018 07:57:06 -0800 (PST)
Received: from whs-18.cs.helsinki.fi (whs-18.cs.helsinki.fi [128.214.166.46]) by smtp-rs2.it.helsinki.fi (8.14.7/8.14.7) with ESMTP id wASFuihV026582; Wed, 28 Nov 2018 17:56:46 +0200
Received: by whs-18.cs.helsinki.fi (Postfix, from userid 1070048) id C52FD360362; Wed, 28 Nov 2018 17:56:44 +0200 (EET)
Received: from localhost (localhost [127.0.0.1]) by whs-18.cs.helsinki.fi (Postfix) with ESMTP id C3B54360013; Wed, 28 Nov 2018 17:56:44 +0200 (EET)
Date: Wed, 28 Nov 2018 17:56:44 +0200
From: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>
X-X-Sender: ijjarvin@whs-18.cs.helsinki.fi
To: Richard Scheffenegger <rs.ietf@gmx.at>
cc: Neal Cardwell <ncardwell=40google.com@dmarc.ietf.org>, Felix Weinrank <weinrank@fh-muenster.de>, "tcpm@ietf.org" <tcpm@ietf.org>
In-Reply-To: <5f27394f-5f88-457d-5a2a-8ce4fcd80202@gmx.at>
Message-ID: <alpine.DEB.2.20.1811281745410.5188@whs-18.cs.helsinki.fi>
References: <8d43389c-93c1-899d-37ab-808c471eed47@fh-muenster.de> <CADVnQymCDpqTxwVLv0WYZvj84msfXf7OzfHYfj=d7Uj-pCHmFQ@mail.gmail.com> <632bc671-4294-5eb3-ff8a-8c7dd492beb1@fh-muenster.de> <CADVnQymfVD5bZ-q4mdxDhPEg=R5igiueHG+3nJF8DTEKn4ngVQ@mail.gmail.com> <5f27394f-5f88-457d-5a2a-8ce4fcd80202@gmx.at>
User-Agent: Alpine 2.20 (DEB 67 2015-01-07)
MIME-Version: 1.0
Content-Type: text/plain; charset="US-ASCII"
Archived-At: <https://mailarchive.ietf.org/arch/msg/tcpm/ECqtx35-SoYzmEB_HZe70N6RWgM>
Subject: Re: [tcpm] RACK - variable explanation
X-BeenThere: tcpm@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: TCP Maintenance and Minor Extensions Working Group <tcpm.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/tcpm>, <mailto:tcpm-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/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: Wed, 28 Nov 2018 15:57:10 -0000

On Wed, 28 Nov 2018, Richard Scheffenegger wrote:
> Am 22.11.2018 um 17:16 schrieb Neal Cardwell:
> > On Thu, Nov 22, 2018 at 10:28 AM Felix Weinrank <weinrank@fh-muenster.de>
> > wrote:
> > > 
> > > I don't completely understand the following check:
> > > 
> > >          If RACK.reordering_seen is FALSE:
> > >              If in loss recovery:  /* If in fast or timeout recovery */
> > >                  RACK.reo_wnd = 0
> > >                  Return
> > >              Else if RACK.pkts_sacked >= RACK.dupthresh:
> > >                  RACK.reo_wnd = 0
> > >                  return
> > > 
> > > The Draft says:
> > > "RACK.pkts_sacked" returns the total number of packets selectively
> > > acknowledged in the SACK scoreboard.
> > > 
> > > Whats the purpose of this check: RACK.pkts_sacked >= RACK.dupthresh
> > 
> > This is the traditional TCP Fast Retransmit heuristic, described in
> > https://tools.ietf.org/html/rfc5681 in section 3.2, and
> > https://tools.ietf.org/html/rfc6675 in section 5, and the older
> > https://tools.ietf.org/html/rfc2001 in section 3.
> 
> To be pedandic, only RFC3517 and RFC6675 would be applicable directly, as RACK
> requires SACK support.
> 
> Also, RFC6675 explicitly shortened the trigger condition from receiving 3
> DupACKs down to FACK > (dupthresh - 1)*SMSS. 

Where does that "FACK" part come from? Not from RFC6675 for sure. The 
condition given in RFC6675 requires at least that many bytes to be 
acknowledged by SACK blocks to trigger recovery, not just sequence 
distance like FACK does.

> That is, RFC6675 allows
> entering Loss Recovery on the first ACK(SACK), without waiting for any
> duplicate ACKs at all... Thus it is much more "aggressive", and I've seen two
> independent examples recently, where Receivers exploit this capability (and
> don't work well against a RFC3517 sender).
> 
> Earlier 3517 still needed 3 duplicate ACKs.
> 
> In that context, RACK takes a middle ground, as the receiver has to have seen
> dupthresh data segments, but the sender can enter loss recovery already, even
> when ACK loss, ACK compression or ACK thinning are prevalent in the return
> path.
> 
> (A single ACK, with an appropriate SACK block(s) is still sufficient to enter
> LR with RACK, but unlike 6675, positive proof that 3 packets got delivered is
> required).
> 
> Which is a Good Thing (TM) :)

RFC6675 algorithm requires a positive proof that at least 3 MSS sized 
packets were delirered. The algorithm just doesn't use dup ACK as a proxy 
for that but bases the decision on scoreboard details only. Maybe you're 
misreading the RFC6675 somehow?

-- 
 i.