Re: [tcpm] AccECN and DSACK

Yoshifumi Nishida <nsd.ietf@gmail.com> Tue, 21 November 2023 03:43 UTC

Return-Path: <nsd.ietf@gmail.com>
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 2E345C14CE45 for <tcpm@ietfa.amsl.com>; Mon, 20 Nov 2023 19:43:19 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.105
X-Spam-Level:
X-Spam-Status: No, score=-2.105 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id iGseHNaJmrS9 for <tcpm@ietfa.amsl.com>; Mon, 20 Nov 2023 19:43:15 -0800 (PST)
Received: from mail-wr1-x434.google.com (mail-wr1-x434.google.com [IPv6:2a00:1450:4864:20::434]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 0C317C14CE3F for <tcpm@ietf.org>; Mon, 20 Nov 2023 19:43:15 -0800 (PST)
Received: by mail-wr1-x434.google.com with SMTP id ffacd0b85a97d-33139ecdca7so3118478f8f.0 for <tcpm@ietf.org>; Mon, 20 Nov 2023 19:43:14 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700538193; x=1701142993; darn=ietf.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=c6UXujTmKjPjXhYto8Dukm4FjBIuTHj5Bb5Mx5jJkTQ=; b=gicTWZOnBmObwZyj7siESetAWaIFasilPGA60qEQriDa05c2ZBGgpqXs3yfkoaNUjk 3Ah4KO5OcZrD/t6rw0OuXr/ZewL7sMPprVVDNWbeUnTB13ja/3+zNKJ5ystI6BwbH6fP btmYoeWYkB4ewIQ3cj/IRv65X2D7m26EoISZIUWRox90NIdLo+hKWHfcyDY+rrtSlCBK uIYUgf+0dapfGtckVAuN1J/WluRWBr2bZCmluqKqjRUTRg4aga5lmaS6TmT3Y0OLiZ1/ 5M6kDCtkeLB6dk6TgySoDqdcllSqX7fpqTn9GvuexSXrqGA7zKzpnYrEzsk91jVqek5E toUw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700538193; x=1701142993; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=c6UXujTmKjPjXhYto8Dukm4FjBIuTHj5Bb5Mx5jJkTQ=; b=dM5jGxMbMORPt5LRv9K35TPKxZZno/u/HSIS2g3wjQMMnY5VVMIpkki+ZMGffldI2I oJm1xe5FiwwAW3w3LJIdKCc5zO8MimIluptUfkQathaTGegGmSRXpKURTfWWTyApa+EV vWisgM77cwd8BNT3gLHiukK1XaCzahicp3+jzZpQL/k1MZ0GYDjrY5TUUdrh+7E5dDa9 sE9fcIGHdGxOfcFIGcw8yrc/uYXSsl0vVUlv6newBVRtl6k/33HZZpfKECOIMPYBgZ8d h6C7O3KxSB5t/YXv6L8CpZ92ugVc3y/UHSbg0qmQiKI0D+Av8gOp+I5GKcDbs8Pg6XQo D/eg==
X-Gm-Message-State: AOJu0YyHC5PfALAKQS9Fy6RjJgqVjG81QkxsjqcNt+9tCn0yL5tnOJ78 hayU+QLDUsGkUi2h+dBeAj+9vl4V8WALUdAP50k=
X-Google-Smtp-Source: AGHT+IFNcxLPRDUmySvyQpnSjT/qaXAklVtYYAUXogvV4ov3xSx/3Y+OC84XLJZsIpB+naiO/N+F5Kx0oMKPoQbeBlc=
X-Received: by 2002:adf:e692:0:b0:32f:7967:aa4d with SMTP id r18-20020adfe692000000b0032f7967aa4dmr6392463wrm.68.1700538192683; Mon, 20 Nov 2023 19:43:12 -0800 (PST)
MIME-Version: 1.0
References: <084E4782-C220-4474-A39E-2617224FD1CD@fh-muenster.de> <ea82f083-9f01-470b-98c1-68489b706169@gmx.at> <CAAK044SLamjWht+5PTVu7E=_qzhkhYCEueShQpScTEu_PueAOQ@mail.gmail.com> <7b36150f-50a9-41c5-a71f-b68a84965773@bobbriscoe.net> <fb27a6f4-7cb6-43bf-bd62-8e6bb1a8700e@gmx.at> <41312b57-9ed3-46fa-946f-f3f625c5c5e9@bobbriscoe.net> <477633fd-784c-43fb-b2a0-02b673c94fea@gmx.at> <9aac7a8f-692d-4294-b81e-528a7f790f58@bobbriscoe.net> <ef624bd8-600a-4b2b-ac56-2d2b1deaf245@gmx.at> <2ed3f94b-a56b-48e1-83f0-997ff7ea0670@bobbriscoe.net> <e4484f82-f339-f487-9bfd-256abe97ab86@cs.helsinki.fi> <9bcc5dc1-00ad-4dbe-be1f-587cd64a2773@gmx.at> <e8656fc-9d6c-28e8-9d48-80473e398ad7@cs.helsinki.fi>
In-Reply-To: <e8656fc-9d6c-28e8-9d48-80473e398ad7@cs.helsinki.fi>
From: Yoshifumi Nishida <nsd.ietf@gmail.com>
Date: Mon, 20 Nov 2023 19:43:01 -0800
Message-ID: <CAAK044Rt5JhAsBRwPS7cn8=m87EVW1L3LuFo0G3D16eWPLiNTA@mail.gmail.com>
To: Markku Kojo <kojo@cs.helsinki.fi>
Cc: rs.ietf@gmx.at, Bob Briscoe <ietf@bobbriscoe.net>, tuexen@fh-muenster.de, tcpm IETF list <tcpm@ietf.org>
Content-Type: multipart/alternative; boundary="000000000000e6e65e060aa166d4"
Archived-At: <https://mailarchive.ietf.org/arch/msg/tcpm/L_Q_1_7AUFI6_zpOlqP0wMHUzBw>
Subject: Re: [tcpm] AccECN and DSACK
X-BeenThere: tcpm@ietf.org
X-Mailman-Version: 2.1.39
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: Tue, 21 Nov 2023 03:43:19 -0000

Hi folks,

I think there are discussions for ECN++ spec and Accecn spec in this
thread.
I would like to focus on only Accecn spec at first so that we can finalize
the draft and ship it quickly.

As far as I look at Fig 3b and Fig 5 in
https://www.cs.helsinki.fi/u/kojo/IETF/AccECN2023.pdf, A must be an ECN++
node because it sets ECT marks on ACKs. It cannot be just an AccECN node.
I strongly believe the behavior of A should be specified in ECN++ draft,
but not accecn draft.

So, I think we just need to check if we want to mandate D-SACK in accecn
draft here.

I think I understand the case described in Fig 5a. But, it seems to me that
several conditions are required for this scenario. E.g, I think sending
exact 2 ack-on-ack packets right before TLP retransmission is unlikely to
happen very often.
Also, if A doesn't like this scenario, A simply can choose not to set ECT
marks on ACKs, but I think this should be a part of ECN++ spec anyway.
In case of Fig 5b, I think it depends on how to detect Ack-on-ack packets
at A, which should also belong to ECN++ spec.

So, I think a question here would be if we want to mandate D-SACK for
relatively small possibilities or not.
If I overlook something, please let me know

Thanks,
--
Yoshi


On Mon, Nov 20, 2023 at 12:33 PM Markku Kojo <kojo@cs.helsinki.fi> wrote:

> Hi Richard, all
>
> On Fri, 17 Nov 2023, rs.ietf@gmx.at wrote:
>
> > Hi Markku,
> >
> >
> > Am 17.11.2023 um 18:26 schrieb Markku Kojo:
> >> Bob, Richard, Yoshi, all,
> >>
> >> On Wed, 15 Nov 2023, Bob Briscoe wrote:
> >>
> >>> Richard,
> >>>
> >>> Thx for the clarification. So the draft will say nothing about
> >>> timestamps.
> >>>
> >>> To confirm, in the editor's copy of ECN++, I'll add the Δ(ACE)≥3
> >>> requirement to the additional DupACK check (In
> >>> deployments where SACK blocks might sometimes be removed, and ideally
> >>> only if no SACK blocks have been seen at all, despite SACK having been
> >>> negotiated).
> >>
> >> I'm afraid that the suggested rule (ACE counter is 3 or more) is
> >> extreamily unreliable. It should be quite easy to see that there are a
> >> multitude of scenarios where the data pkt that triggers a genuine DupACK
> >> can itself be CE-marked and preceded by two (or more) CE-marked pure
> >> ACKs, in which case the ACE counter in the DupACK is three (or higher),
> >> resulting in genuine DupACK being ignored. Sounds like a very bad idea
> >> to me.
> >
> > Sorry. You completely lost me.
> >
> > How is an ACK of new data a dupack?
>
> [MK] And you lost me totally, sorry. ;)
> I don't know what made you think that the data pkt could carry new,
> in-order data? I said "data pkt that triggers a genuine DupACK". How can
> this data pkt be other than out-of-order or duplicate data pkt if it
> triggers a DupACK? It is definitely not a new data pkt arriving in order
> and triggering a new ACK. And, yes, in case of out-of-order data pkt it
> carries new data but that data won't get acknowledged but triggers a
> DupACK.
> I thought this should not require a specific scenario to understand it,
> sorry. I should have been more accurate and say that the data pkt
> is either duplicate or out-of order pkt as well as the additional details
> I now add below. Whichever specific scenario you select where a pkt
> receiver receives the following sequence of pkts that I described, will
> result in ACE delta being 3. Or maybe I am missing something?
>
> Assume no unacknowledged data at the pkt receiver and all earlier CE marks
> have been acknowledged:
> 1. A pure ACK marked CE arrives (CE pkt counter incremented by 1, does not
> trigger an ACK).
> 2. A pure ACK marked CE arrives (CE pkt counter incremented by 1, does
> not trigger an ACK).
> 3. A duplicate or out-of-order data pkt arrives (CE pkt counter
> incremented by 1, triggers genuine DupACK with ACE delta = 3).
>
> Please find also a specific scenario that breaks TLP logic (see below).
>
> > Or, since I have to imagine what scenario you are thinking about (please
> > - provide a good depiction of the segment sequences exchanged), how
> > would a discontinous data packet, with the same ACK seq number (to be a
> > dup ack) NOT carry a SACK block?
>
> [MK] I think I have said already earlier that with F-RTO or RACK-TLP we
> are not considering arrival of out-of-order data pkts that trigger three
> DupACKs or three AoAs that may be incorrectly interpreted as three
> DupACKs.
> When a duplicate data segment for the highest seg number already
> received by the data receiver arrives it triggers DupACK without a SACK
> option as per RFC 2018. Or, if SACK blocks were removed like Bob
> mentioned above, then it may be an out-of-order data pkt.
>
> > Furthermore, a singular ACK for a new data packet is commonly not
> > refered to as DupACK, but a regular in-sequence ACK.
> >
> > Or are we suddenly bringing in subsequent data packets with or without
> > loss/reordering?
> >
> > In any case, as described it is *extremely* easy to differentiate from a
> > genuine ACE-ACK (new ACK number, likely more recent timestamp, while not
> > containing SACK).
> >
> >
> >> Maybe the best way is to require the other end to implement and apply
> >> DSACK (MUST), and use DupACKs arriving without SACK and ACE<3 to turn
> >> off ECN-capable pure ACKs for the rest of the connection.
> >
> > Again, I can not follow. How would DSACK help in the above situation?
> >
> > If the new CE-marked data segment is beyond the right edge, it either
> > advances ACK, or carries a SACK (but the scenario didn't contain any
> > losses...). If it is a TLP packet overlapping with the first
> > transmission, by virtue of (still) being at the very right edge, this
> > may be the 1st DupACK (not triggering any DupACK based mechanism), but
> > even if we now conjecture 3 TLPs for some arcane reason, and no DSACK
> > (despite all RACK implementations I know do support DSACK by virtue to
> > improving the RACK mechansims), since these would still be at the
> > rightmost edge, no erraneous (additional) retransmission (with CC
> > response) would be triggered. (Please explain first, how three
> > consecutive TLP transmissions would occur, since these are only
> > happening once).
>
> [MK] Sorry, I don't follow. We are discussing RACK-TLP (TLP part for
> it) and F-RTO that have been designed to distinguish whether arriving
> ACKs are due to real loss or duplicate data segment(s). A single
> extra DupACK (or ignored DupACK) may break the logic.
>
> >
> >> Without the data sender (AoA receiver) knowing that the other end
> >> employs SACK, I cannot find a reliable enough way to distinguish genuine
> >> DupACK and AoA.
> >
> > Which is why the guidance is already to only allow the use of
> > ECT-enabled ACKs, when the session does have SACK enabled.
>
> [MK] Yes, and I have been trying to explain that enabling SACK is not
> enough if the other end (data receiver) does not implement DSACK.
>
> >> Currently there is no RFC I am aware of that says
> >> negotiating SACK would negotiate DSACK as well or that if one implements
> >> SACK one SHOULD/MUST implement DSACK as well. As long as this is not
> >> said in any RFC, IMO it would be inappropriate to rely on DSACK being
> >> employed as specified in RFC 2883. That is one important reason (not the
> >> only even though I earlier only mentioned this) why RFC 5682 and RFC
> >> 8985 do not rely on DSACK alone but treat the non-SACK DupACKS the same
> >> as DSACK DupACKs to ensure correct operation in the current Internet
> >> (works also with F-RTO even if SACk-blocks are removed).
> >
> > Please provide a fully worked example showing how excluding an ACK which
> > has delta-ACE >= 3, no SACK blocks, which is not advancing snd_una from
> > subsequent DupAck processing breaks existing mechanisms. Ideally in a
> > situation where DSACK would have provided a different outcome.
>
> [MK] Please see the scenarios (Fig 5 a) that I have added and are
> available at:
>
>   https://www.cs.helsinki.fi/u/kojo/IETF/AccECN2023.pdf
>
> For your convenience, the first two added scenarios (Fig 4 a) and b)) are
> without any AoA interference. That is, they are for the two normal cases
> (duplicate data segment due to spurious TLP and real loss) that TLP logic
> has been designed to distinguish from each other even when DSACK is not
> implemented by the data receiver. See RFC 8985, Sec 7.4.2 that I have
> pointed to already earlier (maybe more than once). Pls, see also the
> description in the RFC (case 2). In both cases for Fig 4 the ACKs are
> delayed. The only difference is that the end of flight data segment (data
> 200) is not lost in Fig 4 a) while in Fig 4 b) it is lost.
>
> In the Figures 5 a) and 5 b) I have modified the data traffic from B to A
> such that an appropriate amount of ECN-capable ACKs may get triggered from
> A to B and (some of them) marked CE. In Fig 5 a) there may be any number
> data pkts (>=2) from B to A arriving at A after the original transmission
> of data 200 but before the PTO-triggred retrinsmission of data 200 as long
> as they trigger pure ACKs of which two become CE_marked. As shown in the
> Fig 5 a), if B does not implement DSACK it will result in the AoA (DupACK
> 201 with ACE delta = 3) becoming ignored and TLP logic makes incorrect
> desicion as it does not detect the spurious PTO. So, ACE rule seems not
> reliable to me but maybe I am missing something? If B implements DSACK,
> it would include DSACK block for data 200 in the DupACK 201 and TLP logic
> would correctly detect spurious PTO (case 1) unless it is removed in the
> middle.
>
> Fig 5 b) shows a scenario where data receiver does not implement DSACK,
> resulting in A not detecting loss and inappropriately not reacting
> to congestion which is one of the worst violations against the congestion
> control principles. In my reading of the various replies, it seems to me
> that I and Bob agree that DSACK MUST be implemented at a data receiver
> and AoA MUST not include SACK option (requirements in the AccECN draft)
> but Richard seems to disagree(?). So, this is a scenario that Richerd
> requested earlier in this thread.
> Even though the ACE rule may work in the scenario in Fig 5 b), I ignore
> it here because it seems unusable as per shown in Fig 5 a). Similarly to
> Fig a), in Fig 5 b) there may be any number of data segments from B to
> A as long as they arrive at B before the TLP probe (rexmit of data 200)
> and they trigger at least three pure ACKS out of which three pure ACKs
> become CE marked. As shown in the figure, the AoA fake DupACK will
> conceal the loss of data 200. If A knows that DSACK is implemented at
> B and B never includes a SACK option in AoAs, the TLP logic at A can be
> modified to ignore DupACKs without a SACK option. With such modification
> AoA (DupACK 201) is ignored and does not end the TLP episode, allowing
> ACK 202 to reveal the loss and A to correctly react to loss.
>
>
> >> If SACK blocks are removed in the middle, it does not help ECN++ sender
> >> even if the other end is required to apply DSACK but additional
> >> safeguards are required.
> >
> > I mentioned this, as it is a (rather uncommon) pathological issue which
> > may happen.
>
> [MK] I am not aware of any data showing how common it is today but it is
> known to happen. Do you have any pointers to Internet-wide data?
> IMO, a proper stds track spec should take such misbehaviour into
> account.
>
> [MK] And, it is not only that SACK blocks may get removed in the middle.
> There are (or at least have been) TCP implementations that negotiate SACK
> but do not include (any) SACK blocks. This is another reason, why it is
> important require in the AccECN draft that an AccECN implementation
> MUST implement both RFC 2018 and RFC 2883 in full, if it sends Acks of
> Acks.
>
> > With the suggested discrimination of ACE-ACKs, that ACK (and only this
> > particular one) would be excluded from subsequent DupACK processing.
> > Since genuine DupACKs would not match the ACE-ACK checks, these would
> > trigger all other mechanisms - albeit at most 1 ACK "late".
>
> [MK] Pls, Ack if you agree that the ACE rule that you suggested is
> unreliable and cannot be applied (as shown in Fig 5 a).
>
> >
> >> I'm not sure if No SACK and ACE<3 rule is good
> >> enough, because no full analysis nor experimental evidence exists to
> >> judge on.
> >
> > Which is why I asked repeatedly for some good examples and scenarios to
> > fully analyze.
>
> [MK] My suggested rule "if No SACK and ACE delta <3, the turn off
> ECN-capable pure Acks" seems not workable anymore after Bob's
> clarification for the "Increment-Triggered ACKs" rule. But, if there is
> no SACK block in DupACK and ACE delta=0, doesn't it indicate that SACK
> blocks are removed (given that MUST implement RFC 2018 and RFC 2883 and
> reguired in AccECN draft)? The common security practice that IETF has
> followed earlier is that if misbehaviour that brakes the designed logic
> for some feature is detected, then that feature should be disabled.
> Or are you suggesting that this is unreasonable practice?
>
> >> Particularly, I am worried about short flows that are very
> >> common and with such flows genuine DupACKs may get interpreted
> >> incorrectly.
> >
> > Well, what is your definition of a short flow? Would a flow with a
> > congestion window of at least 18 segments, for the minimal theoretical
> > possible number of delayed, ECT-enabled ACKs, all of which would get
> > CE-marked, count as a short flow? Remember that this would require in
> > the order of 30 segments (or 45 kB) at the very least.
>
> [MK] Sorry, I donät follow. The number of ECT-enabled ACKs is not coverned
> by the flow that (potentially) suffers from the AoAs but the flow of data
> from the other direction. So, you may have a data flow from A to B of any
> lenght and and how many AoAs it may encounter depends (almost) solely on
> the data flow from B to A. Almost solelely as AoA ping-pong effect may
> be affected by the flow from A to B itself.
> And, your 18 segments minimum rule holds only for the case where three
> DupACKs are needed to trigger false fast rexmit. Actually, the minimum
> cwnd to trigger enough ECT-enabled ACKs for three DupACKs is not 18
> because if there is a pkt loss, it is enough to have 9 out-of-order data
> segments that will trigger 9 ECN-capable DupACKs.
> Moreover, breaking the RACK-TLP or F-RTO logic reguires just one fake AoA
> DupACK.
>
> > But at this bare minimum flow size, ending after this, none of any
> > possible misclassification or erraneous processing would matter.
>
> [MK] Right, it is not that serious if the flow ends. I was thinking a
> common application limited behaviour that consists of short data bursts
> that are repeated (which maybe should not be called a short flow). If the
> end of flight loss in each such burst is repeatedly misinterpreted (loss
> concealed), it starts to be quite bad behaviour.
>
> > So, the short flow would need to be larger than this. And even (much)
> > larger to account for the much lower probability of CE-marked ACKs to
> > happen.
> >
> >> This means that a rule should rather be used in different
> >> way than Richard suggested; the stack should immediately start treating
> >> DupACKs without SACK as genuine DupACKs for the rest of the connection
> >> in addition to turning ECN-capable pure ACKs off.
> >
> > Whats the definition of your DupACK here? I'm confused. Rather than
>
> [MK] My apologies for missing (not repeating) a crucial point. After
> detecting misbehavior (SACK block are being removed), the stack should
> *disable ECN-capable pure ACKs* and start treating DupACKs without SACK
> as genuine DupACKs in order to allow correct behaviour of all algos
> that depend on the crucial RFC 5681 rule that an ACK MUST NOT be
> generated more than once for any data segment.
>
> Hope this clarifies,
>
> /Markku
>
>   > determining which ACK may NOT be a DupACK to stop confusing earlier
> > mechanisms, which don't have an understanding of AccECN and ECT-enabled
> > ACKs, suddenly every DupAck (presumably masking out the presence/change
> > of the ACE field, as well as any TCP option - including SACK in
> > particular) should be accepted as DupACK under all circumstances?
> >
> > This confuses me even more...
> >
> >
> > Sorry,
> >   Richard
> >