Re: [tcpm] WGLC for draft-ietf-tcpm-rack-08

Mirja Kuehlewind <> Mon, 06 April 2020 12:40 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id C11B83A07AA for <>; Mon, 6 Apr 2020 05:40:57 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -2.269
X-Spam-Status: No, score=-2.269 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.168, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: (amavisd-new); dkim=pass (1024-bit key)
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id 9lrPmEROUmvB for <>; Mon, 6 Apr 2020 05:40:52 -0700 (PDT)
Received: from ( []) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id C0AD83A07A9 for <>; Mon, 6 Apr 2020 05:40:51 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901;; cv=none; b=Q8gdKaDxjGlwY0pDKDZEBJpiYcwZQYerqk5FMaVdBLVvD4RIkI2I2b6YdbHIcwM0IhBtYFYlDMykIiWsLXax2+2WexwKdp2N0PAsyTzS+4agTSXqiJn87+fDNL92hJVFaiVZe86ryvdn2+eEpczs611X2ZShwBuFlABXdUTupXyiR0j8nC1WKxRV2/hY7faVinfXvg5WtqCnHqnw0z6d3LcRYndgx8v1iT+abaWDf9qlPf4buRb/psVKDcktXdXEMZznFXz1jAXHpQjuZwRBO4oHj/cP5jK0E2bMf+xCVVjJGen4dGapDEswHzXmiw8vHVXE+xTfQrrDJ2gEeI5kgA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed;; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=VLwsO8RNILe3F4/kBoXdNybga+g63zZkzhGZRhqfhO4=; b=hQlg3VhftJgPwlCTm/LXIcwK7xWAgcFsPZv9mlk8qHArKHf4VbFUpCl794B7UF/r4qLF9xZKN+NEb9OjgAnrmiWPhbQIuYbINTpScdp97PBT4UVphHerHgElEZKOPPwrFu/NR5OJYX7vriy7us62zZrqLwfdwlQYz2hhVRE4nufLBpm22zOsw55V4BLRo06vI2jagmmGjumxR/MrOki6MDle5OAAJ/EqKCMhSKA1Bpo8rjt6zzbU42q0CM214jxjQMKjfgAy/2pqlRF8fOTcFgM/jxhgzMexQ15uXVRMr8OcolGpR+sATzXDPlg5zKo1bkR6EigR+MSQuzY+4YroVQ==
ARC-Authentication-Results: i=1; 1; spf=pass; dmarc=pass action=none; dkim=pass; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=VLwsO8RNILe3F4/kBoXdNybga+g63zZkzhGZRhqfhO4=; b=Q3k5Cs76OMYHM+DNpM3zDuTpfNrB9FA2PsLhcTli5fl1BZCrY4Xdn9ttJakxWf6aXfbw1Q5PKC9jfphC1O4IRujQgxwo80IdIGUhi+5RpvV4thLktr/vkJcpVKIwlNeOrpxj3mYpVAzRkB2NAaQgrFgWKnO6/QQpV84w38iq9CA=
Received: from ( by ( with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2900.14; Mon, 6 Apr 2020 12:40:45 +0000
Received: from ([fe80::298a:36c6:fff4:f8f8]) by ([fe80::298a:36c6:fff4:f8f8%3]) with mapi id 15.20.2900.012; Mon, 6 Apr 2020 12:40:45 +0000
From: Mirja Kuehlewind <>
To: Michael Tuexen <>, tcpm IETF list <>
Thread-Topic: [tcpm] WGLC for draft-ietf-tcpm-rack-08
Thread-Index: AQHWBuKWELjW9re2QEma+q+W/mNu5qhsNO8A
Date: Mon, 6 Apr 2020 12:40:44 +0000
Message-ID: <>
References: <>
In-Reply-To: <>
Accept-Language: en-US
Content-Language: en-GB
user-agent: Microsoft-MacOutlook/
authentication-results: spf=none (sender IP is );
x-originating-ip: [2003:de:e727:100:38a5:2983:a284:b7fb]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: d5cb6d51-13cb-4516-acac-08d7da27b9b4
x-ms-traffictypediagnostic: AM0PR07MB4084:
x-microsoft-antispam-prvs: <>
x-ms-oob-tlc-oobclassifiers: OLM:10000;
x-forefront-prvs: 0365C0E14B
x-forefront-antispam-report: CIP:; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM;; PTR:; CAT:NONE; SFTY:; SFS:(10009020)(4636009)(136003)(376002)(346002)(39860400002)(366004)(396003)(71200400001)(316002)(110136005)(6486002)(6506007)(2616005)(6512007)(186003)(44832011)(478600001)(5660300002)(81156014)(966005)(8936002)(81166006)(66446008)(64756008)(66556008)(66476007)(66946007)(76116006)(8676002)(36756003)(2906002)(33656002)(86362001); DIR:OUT; SFP:1101;
received-spf: None ( does not designate permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: XMydj+rJtfEvWstmFVMxMHxdOmsTBs5n4uFbvty05pVj5I8SgnfUSL4tGDg/+kJekcAs4s1LkRLPL1uQB1fpUa1At9Qrq17hi7y1kk4Hq+Yju+v2pstuqeySoXVvlwQwdcxrlY4V76ZzRZLXfL+FmzNqM7ajxEIxvdMZ+jQQS4f4xn2/9HnJAmLqYeIIwvg2fmnXivjtmgxkZjBQGkitL8WeCPE+eWQ+uISctVhj9bTQxCnSX/VWmCDGgTmKUbvUIpVkxF2eqTK1tFFHljzSrL7j4Nj5dZO049gufJT1tso5cJNohq+Gfjxt2Q1ICGUy/qHmTDiqFwjJVEmS+wySxrN5A2BCsEXNMeLW+rSl9uy2gtk/zbdvyfFKra3ehi8mvw3SyxiApGfsur17mvH0F4zJFrh7+isfzvItfGYN1QA0teoXCvkcy5Vs10Fjb3chEukEW+VnJpXgm5MzZ+4gquGot4k/JMBT9WQ2UrphqHMynGrxB1vI8QlJbjVIfCLzL/CocRnl83zg3HZKbjWerw==
x-ms-exchange-antispam-messagedata: 2NVhJWPPrmiphWa1r+Z9hk9924rr8nrWsfpUVsn1i/7jOrJAlZswDJCBximu1cWPev3AIBHGU1ttxZ4zVoSgW3ymKN4Ye2qXTihxU+HvdDPtnicUiAKgYzehVhh2jGka2snBB4k7OhVlZ9JAnYHHZl1dYkwCx4yrG257tjXIK2L/6IoaHNx758JVVGCO2qAoHkf2yaqaWhZ1Midq9W2weA==
x-ms-exchange-transport-forked: True
Content-Type: text/plain; charset="utf-8"
Content-ID: <>
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-CrossTenant-Network-Message-Id: d5cb6d51-13cb-4516-acac-08d7da27b9b4
X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Apr 2020 12:40:44.9850 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 92e84ceb-fbfd-47ab-be52-080c6b87953f
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: 177WlGXC6HZpihwV6zybC+7xwBFk/NlIAO5xMZTmvykgBIN2iH+g1sFZUvNrd0Q4X/mE0hseev77eqWTdVKsqnUPKml77DcSBIGYu6d94zU=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR07MB4084
Archived-At: <>
Subject: Re: [tcpm] WGLC for draft-ietf-tcpm-rack-08
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: TCP Maintenance and Minor Extensions Working Group <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Mon, 06 Apr 2020 12:40:58 -0000

Hi all,

I reviewed this document and I think content-wise this is ready to move on (just some small questions below).

I would like to see another editorial pass on the document. There are more detail comments below but I think the main points are a) provide a more detailed algorithm overview section (either in section 3 or beginning of section 7 to make it easier to understand the steps in the subsections in 7 and b) have an own main section for TLP and introduce parameters used for TLP also in section 6 and mention TLP in the intro already. It's still obvious that TLP was squeezed in later on....

Further I think the security considerations could be more extensive: it could a) mention again some of the reordering consideration in section 4 (or maybe some of the text can be moved there entirely to not break the reading flow so much at the beginning of the doc) and b) say more about the impact of this algorithm on spurious retransmission (I guess it can both increase or decrease the number of spurious retransmissions in certain scenarios) and c) mention again the impact on congestion control as described in section 8.5 that a window reduction can happen both earlier or later in different scenarios.

Here are my technical questions/comments on section 7.2:

For this sentence:
"If no reordering has been observed, RACK uses
   RACK.reo_wnd of 0 during loss recovery, in order to retransmit
   quickly, or when the number of DUPACKs exceeds the classic DUPACK

And the respective pseudo code here:
       If RACK.reord is FALSE:
           If in loss recovery:  /* If in fast or timeout recovery */
               RACK.reo_wnd = 0
           Else if RACK.pkts_sacked >= RACK.dupthresh:
               RACK.reo_wnd = 0

My understanding here is that the RACK-based time threshold should not be used if in recovery or if no reordering is detected, right?

Why is that realized by setting the RACK.reo_wnd to zero rather than implementing this logic in RACK_detect_loss()? I think the difference would be that you don't reset RACK.reo_wnd but keep the previous state about adjustments. But wouldn't that be good/better?

My point it that the way it is described now confused me a bit and I'm looking for a way to better describe that part...

Also why is RACK.dupthresh a separate parameter in the RACK name space instead of using the "existing" one (as you do with Packet. xmit_ts)? Further this is actually not a parameter that is adjusted by the algorithm but a configured constant. It be helpful for the reader to indicate this in the naming, e.g. call it DUPTHRESH instead. In general I'm actually not sure that using the RACK name space in this document is really helpful.

And another unrelated question but on the same part of the algorithm: where does the number 16 come from for the number of recovery cycles to keep any adaptation?

Then my more detailed (small and larger) editorial comments:

1) In the intro you use  a couple of times "we" which is maybe less common in RFCs as an RFC is a product of a wg not only of the author group. Maybe you can rephrase this.

2) also in the intro:
"The goal of RACK is to solve all the problems..."
"The goal of RACK is to address all the problems..."

3) Section 3 provides rather a high level overview. It would be nice to get more of an overview about the algorithm itself, e.g. explaining the different step described in section 7 on a high level. Or maybe you could add alternatively more text at the beginning of section 7 explaining how the different subsections "fit together". Actually doing both would also not hurt as some redundancy where you go step by step in more details is often really helpful for the reader.

4) Section 4 I first thought that some of this text could actually go into the security considerations, however, I guess there are also some requirement here, so not sure if that could be splitted up somehow. I think the problem I have here is that is breaks quite a bit the reading flow between the overview section and the actual algorithm part. 

5) I find the naming of both RACK.reo_wnd and RACK.reo_wnd_incr a bit confusing, as RACK.reo_wnd is a time  frame (and I would expect a packet window based on the naming, given we have the congestion window or the received window) and RACK.reo_wnd_incr is a multiplier (and I would expect some value that would be added when "incr" is used)

6) 7.2:
"   Sometimes the timestamps of RACK.Packet and Packet could carry the
   same transmit timestamps due to clock granularity or segmentation
   offloading (i.e. the two packets were handed to the NIC as a single
   unit).  In that case the sequence numbers of RACK.end_seq and
   Packet.end_seq are compared to break the tie."
The textual description is not fully clear to me (pseudo code is fine). I guess this text is in the context of update RACK.Packet itself, right? Maybe that the missing part that should be spelled out.

7) I would recommend to have section 7.3. to 7.6 in their own new main section as it is an supplemental but separate algorithm. Further I would also recommend to mention Tail Loss Probe also in the abstract and intro.

8) Section 7.5: At least SRTT was already used earlier on in the doc, so maybe just add all these definitions to section 6.1?

9) Section  8.1:
" The examples above show that RACK is particularly useful when the
   sender is limited by the application, which is common for
   interactive, request/response traffic."
I think that is actually an important point to make in the introduction of the document.

10) Also section 8.2:
"   RACK can easily and optionally support the conventional approach in
   [RFC6675][RFC5681] by resetting the reordering window to zero when
   the threshold is met.  Note that this approach differs slightly from
   [RFC6675] which considers a packet lost when at least DupThresh
   higher-sequence packets are SACKed. ..."
Also this information would be really helpful in the overview section already.

11) Also on both sections 8.1. and 8.2, I find the section titles not very well suitable. I would maybe suggest to rearrange the content a bit and have a section "Examples where RACK (and TLP) is beneficial" and another section on "Implementation considerations". At least for  the examples section I would recommend to use an own subsection.

12) Maybe rename section 8.3 to "Reasoning for basic reordering window size" (instead of " Adjusting the reordering window"...?

13) Section 8.4:
" Furthermore, RACK naturally works well with Tail Loss Probe [TLP]"
This reference should be removed as content was integrated into this document. Maybe the whole paragraph should be rephrased, removed entirely, or moved into the TLP section.

14) Section 8.5.1:
" Without RACK, the sender would time out, ..."
I suggest to say "Without RACK and TLP,..." as TLP is described as a separate optional algorithm but TLP is the important bit here. Also If you decide to have a separate example section, I would suggest to move this example there as well.

15) Should section 9 stay in the final RFC? If so, I recommend to move it into the appendix. However, it would also be nice to also provide results on the number of retransmissions (have they increased with RACK and TLP?). Alternatively I suggest removing this section and point to some paper maybe?

16) I think the security considerations could be more extensive, covering impact on reordering, spurious retransmission, and congestion control, as I said at the top of this mail.


On 31.03.20, 00:28, "tcpm on behalf of Michael Tuexen" < on behalf of> wrote:

    Dear all,
    just a quick reminder:
    We are currently running a WGLC for TCP RACK until Tuesday, April 7th 2020.
    Please send any comments, including indications to support this document,
    to the TCMP mailing list by then.
    The ID is available at
    Best regards