Re: [tcpm] RACK - variable explanation

"Scheffenegger, Richard" <rs.ietf@gmx.at> Wed, 28 November 2018 15:27 UTC

Return-Path: <rs.ietf@gmx.at>
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 E5307130FB8 for <tcpm@ietfa.amsl.com>; Wed, 28 Nov 2018 07:27:56 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.599
X-Spam-Level:
X-Spam-Status: No, score=-2.599 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, 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 l-X_uRSF0UIv for <tcpm@ietfa.amsl.com>; Wed, 28 Nov 2018 07:27:55 -0800 (PST)
Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id EE5AB130E12 for <tcpm@ietf.org>; Wed, 28 Nov 2018 07:27:54 -0800 (PST)
Received: from [10.68.35.97] ([217.70.211.18]) by mail.gmx.com (mrgmx001 [212.227.17.190]) with ESMTPSA (Nemesis) id 0Lmb2Z-1fsPgd26Ut-00aFEA; Wed, 28 Nov 2018 16:27:48 +0100
To: Neal Cardwell <ncardwell=40google.com@dmarc.ietf.org>, Felix Weinrank <weinrank@fh-muenster.de>
Cc: "tcpm@ietf.org" <tcpm@ietf.org>
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>
From: "Scheffenegger, Richard" <rs.ietf@gmx.at>
Message-ID: <5f27394f-5f88-457d-5a2a-8ce4fcd80202@gmx.at>
Date: Wed, 28 Nov 2018 16:27:47 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.3.1
MIME-Version: 1.0
In-Reply-To: <CADVnQymfVD5bZ-q4mdxDhPEg=R5igiueHG+3nJF8DTEKn4ngVQ@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"; format="flowed"
Content-Transfer-Encoding: 7bit
X-Provags-ID: V03:K1:kjSPXNQin6oaizVzBrWwoXFbgnveVPUZKnHBsQEoiA/tw4DcQpX iwMup3E0zdWetSurwviPcFWk2etQORes57Edm8U5/53+ZRArRu0DQmEKqKiBATP2u9YhZ2V zqTQ62fUu7atkKxkEjEeWN5ju5/qXCoDk7513kbXQEDvk9PHv05chYiPK2nDs2pJ7UH/RXG y7YO8NG8cKrbaAkRFuhDw==
X-UI-Out-Filterresults: notjunk:1;V03:K0:kAEh6EDj2Z4=:au52IwEXaqcmOvQ5iJQjIk Qyj+FEYF1Sk6Z/Hr7nEiPkYi2hGT2d8Suu4Is3AN4660j7sxlZCMBic1BPeWzGH54Ed9Aciqz CohlF+qOQLaBQ/SA/mhtKIGt+6JbLZ84E+qGJiknPcupuc83KQ/WmCiVg+bov1KkFAXOheFyb zM7F8QKy8M3tVry+RNuTnZBlaILTJ5PBQWYEyZcezAwXF6N8nprMNHXm1X97MhYFjpO6ddOnS MnuJqkc8JswZIIBuj46fU7BjC0kb1SvN7PgQ5JCTxePvGnGCyPuskAI+2DYdjO1coh4Y3QEBf G6ExvIea8svSXOtn9O5qbC7PAPTPdzKHBRYHGJTc2PYqhNp73DPqDskR6LM70U1+WLmYNT0aW g5OyquOxHtb54tI9asUIpuU1trJBmQAZvIEc9oHCfpXGdEIoaJrngTcaYwLPpSa1B+ASxtexF YvA3EpP/rNRw2ynhVLpHCWg39545mEyu33sk1gBg/g+f3fCEXOKmKIrGWloquwUmexdkaugOW VKOj+jXnz0Waph10e6k1tZ9BxaFRXCufUT5jWsB1M40Y52Ck03b7hh5hXxqdkLg070+ZSC8nR Uu+M8JBuuO4YlFs0oQQ6QOZ3jrwdnatys1ZHYzaGGqYoQp1WNm4YDZNj8FOa5yNX7pcncp2vx pXSBq1oIRlZBdfrKR20MUEDdHfnn+ogjKzQbLXK+fKtspeSfpdCubaYRk2f4yjk21lC7XLQRi pL4C94fuU8IDF9M+39rmrAQJPIFXXEaeY3xgCHSJud0LF73cnYYo1Xoyi1Cp+sHmS5Or0eL5e PVCQ/DVwYXxp9PZ/VxQHJbyhTX0oR8xa5DBjtA9AvNonBeRvggc/bRiHOiLIG7VHl/foTIX6H dlfFK24rWuF8L38/g82thDvNx3uAc+jfEpsvNEtL+syXxWTRBSTDC0RhsQfmx0
Archived-At: <https://mailarchive.ietf.org/arch/msg/tcpm/m-0lUeWuShZ1VXxbAQS4Rq1TV7A>
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:28:07 -0000

Hi Neal,


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. 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) :)

> 
> One way to think about it would be: if a receiver selectively
> acknowledges a data sequence range, then that means there is an
> unacknowledged "hole" in the sequence space below the selectively
> acknowledged range.  There are two main possibilities for this hole:
> (1) That unacknowledged hole will stay unacknowledged indefinitely,
> suggesting that the original packets containing that data were
> permanently lost, and need to be retransmitted (which this algorithm
> triggers). (2) That unacknowledged hole will be acknowledged later,
> which would suggest that the network reordered the data somewhere in
> transit, delaying the earlier data and causing it to arrive after the
> later data. Waiting for three data segments to be selectively
> acknowledged allows extra "settling" time for that reordered packet to
> make it to the receiver and fill that hole; this implicit settling
> delay helps avoid spurious retransmits in cases where the network has
> started to reorder packets but the sender has not had a chance to
> observe the reordering yet. For cases where the sender has observed
> reordering (RACK.reord is true) then the sender maintains (in
> RACK.reo_wnd) an explicit estimate of how long (in time) it should
> wait for such reordering to settle, before triggering a fast
> retransmit.
>