Re: [quicwg/base-drafts] An example ECN validation algorithm (#3320)

Jana Iyengar <notifications@github.com> Tue, 07 January 2020 23:06 UTC

Return-Path: <noreply@github.com>
X-Original-To: quic-issues@ietfa.amsl.com
Delivered-To: quic-issues@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 7F93C12013C for <quic-issues@ietfa.amsl.com>; Tue, 7 Jan 2020 15:06:34 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -8
X-Spam-Level:
X-Spam-Status: No, score=-8 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1, RCVD_IN_DNSWL_HI=-5, SPF_HELO_NONE=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=github.com
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 C-aGeV0un_n5 for <quic-issues@ietfa.amsl.com>; Tue, 7 Jan 2020 15:06:32 -0800 (PST)
Received: from out-24.smtp.github.com (out-24.smtp.github.com [192.30.252.207]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id D366A120025 for <quic-issues@ietf.org>; Tue, 7 Jan 2020 15:06:31 -0800 (PST)
Received: from github-lowworker-ca5950c.va3-iad.github.net (github-lowworker-ca5950c.va3-iad.github.net [10.48.17.57]) by smtp.github.com (Postfix) with ESMTP id D845C6A000A for <quic-issues@ietf.org>; Tue, 7 Jan 2020 15:06:30 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=github.com; s=pf2014; t=1578438390; bh=q1R3ZqWycPnpduLct0MtxYLrnxMLUN5CN+F7pGTVLDE=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:List-ID: List-Archive:List-Post:List-Unsubscribe:From; b=Kmowb3PXSisF+S7YQ06I/8GVkkjjCfrPdQzWTDeY1g2r32Z4SHX8LMS4+1rnllvRn gTRNkB2pQO1Kv8NKorZtJKP3YsSGd8OYTLe2Ujv8BfG+iBLKXtR558DpK2V+6SRIpZ fJLOqrUv82O0EkMZ/MXP00xPDaueJsiYGTHLL3lo=
Date: Tue, 07 Jan 2020 15:06:30 -0800
From: Jana Iyengar <notifications@github.com>
Reply-To: quicwg/base-drafts <reply+AFTOJK6LYBW2EMIJQPVXQS54EJAXNEVBNHHCBC7C3M@reply.github.com>
To: quicwg/base-drafts <base-drafts@noreply.github.com>
Cc: Subscribed <subscribed@noreply.github.com>
Message-ID: <quicwg/base-drafts/pull/3320/review/339557244@github.com>
In-Reply-To: <quicwg/base-drafts/pull/3320@github.com>
References: <quicwg/base-drafts/pull/3320@github.com>
Subject: Re: [quicwg/base-drafts] An example ECN validation algorithm (#3320)
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary="--==_mimepart_5e150ef6c7cea_798b3f8a524cd9685963a"; charset="UTF-8"
Content-Transfer-Encoding: 7bit
Precedence: list
X-GitHub-Sender: janaiyengar
X-GitHub-Recipient: quic-issues
X-GitHub-Reason: subscribed
X-Auto-Response-Suppress: All
X-GitHub-Recipient-Address: quic-issues@ietf.org
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic-issues/Z3D9gzuXrTwJ5Qo5qLQtfwqQY9k>
X-BeenThere: quic-issues@ietf.org
X-Mailman-Version: 2.1.29
List-Id: Notification list for GitHub issues related to the QUIC WG <quic-issues.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic-issues>, <mailto:quic-issues-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic-issues/>
List-Post: <mailto:quic-issues@ietf.org>
List-Help: <mailto:quic-issues-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic-issues>, <mailto:quic-issues-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 07 Jan 2020 23:06:34 -0000

janaiyengar commented on this pull request.

Thank you for working on this. 

> @@ -3488,6 +3489,54 @@ Even if validation fails, an endpoint MAY revalidate ECN on the same path at any
 later time in the connection.
 
 
+#### Exemplary ECN Validation Algorithm {#ecn-alg}
+
+Each time that an endpoint commences sending on a new network path, it

```suggestion
Each time an endpoint commences sending on a new network path, it
```

> @@ -3488,6 +3489,54 @@ Even if validation fails, an endpoint MAY revalidate ECN on the same path at any
 later time in the connection.
 
 
+#### Exemplary ECN Validation Algorithm {#ecn-alg}
+
+Each time that an endpoint commences sending on a new network path, it
+determines whether the path supports ECN.  If the path supports ECN, the goal is
+to use ECN.  Endpoints might also periodically reassess a path that was
+determined not support ECN.
+
+This section describes one method for testing new paths.  This algorithm is
+intended to show how a path might be tested for ECN support.  Endpoints can
+implement different methods.
+
+The path has an ECN state that is one of "testing", "unknown", "failed", or

Paths don't have ECN state. Suggestion: "For each path an endpoint sends on, it records known ECN support on that path as one of ..."

> @@ -3488,6 +3489,54 @@ Even if validation fails, an endpoint MAY revalidate ECN on the same path at any
 later time in the connection.
 
 
+#### Exemplary ECN Validation Algorithm {#ecn-alg}
+
+Each time that an endpoint commences sending on a new network path, it
+determines whether the path supports ECN.  If the path supports ECN, the goal is
+to use ECN.  Endpoints might also periodically reassess a path that was
+determined not support ECN.
+
+This section describes one method for testing new paths.  This algorithm is
+intended to show how a path might be tested for ECN support.  Endpoints can
+implement different methods.
+
+The path has an ECN state that is one of "testing", "unknown", "failed", or
+"capable".  In the "testing" and "capable" states the endpoint sends packets

```suggestion
"capable".  On paths that are recorded as "testing" or "capable", the endpoint sends packets
```

> +Each time that an endpoint commences sending on a new network path, it
+determines whether the path supports ECN.  If the path supports ECN, the goal is
+to use ECN.  Endpoints might also periodically reassess a path that was
+determined not support ECN.
+
+This section describes one method for testing new paths.  This algorithm is
+intended to show how a path might be tested for ECN support.  Endpoints can
+implement different methods.
+
+The path has an ECN state that is one of "testing", "unknown", "failed", or
+"capable".  In the "testing" and "capable" states the endpoint sends packets
+with an ECT(0) marking; otherwise, the endpoint sends unmarked packets.
+
+To start testing a path, the ECN state is set to "testing" and existing ECN
+counts are remembered as a baseline.  It should not be necessary to disregard
+the effect of packets sent prior to starting testing, though it is necessary for

It's not clear what "effect of packets" this is talking about.

> +
+This section describes one method for testing new paths.  This algorithm is
+intended to show how a path might be tested for ECN support.  Endpoints can
+implement different methods.
+
+The path has an ECN state that is one of "testing", "unknown", "failed", or
+"capable".  In the "testing" and "capable" states the endpoint sends packets
+with an ECT(0) marking; otherwise, the endpoint sends unmarked packets.
+
+To start testing a path, the ECN state is set to "testing" and existing ECN
+counts are remembered as a baseline.  It should not be necessary to disregard
+the effect of packets sent prior to starting testing, though it is necessary for
+a sender to remember what markings were used for every packet that is
+acknowledged; see {{ecn-ack}}.
+
+The testing period runs for a number of packets or round trip times as

```suggestion
The testing period runs for a number of packets or round-trip times, as
```

> +This section describes one method for testing new paths.  This algorithm is
+intended to show how a path might be tested for ECN support.  Endpoints can
+implement different methods.
+
+The path has an ECN state that is one of "testing", "unknown", "failed", or
+"capable".  In the "testing" and "capable" states the endpoint sends packets
+with an ECT(0) marking; otherwise, the endpoint sends unmarked packets.
+
+To start testing a path, the ECN state is set to "testing" and existing ECN
+counts are remembered as a baseline.  It should not be necessary to disregard
+the effect of packets sent prior to starting testing, though it is necessary for
+a sender to remember what markings were used for every packet that is
+acknowledged; see {{ecn-ack}}.
+
+The testing period runs for a number of packets or round trip times as
+determined by the endpoint.  During this time, packets sent are marked with

```suggestion
determined by the endpoint.
```

Redundant. You've already said this 2 paras above.

> +intended to show how a path might be tested for ECN support.  Endpoints can
+implement different methods.
+
+The path has an ECN state that is one of "testing", "unknown", "failed", or
+"capable".  In the "testing" and "capable" states the endpoint sends packets
+with an ECT(0) marking; otherwise, the endpoint sends unmarked packets.
+
+To start testing a path, the ECN state is set to "testing" and existing ECN
+counts are remembered as a baseline.  It should not be necessary to disregard
+the effect of packets sent prior to starting testing, though it is necessary for
+a sender to remember what markings were used for every packet that is
+acknowledged; see {{ecn-ack}}.
+
+The testing period runs for a number of packets or round trip times as
+determined by the endpoint.  During this time, packets sent are marked with
+ECT(0).  The goal is to limit the duration of the testing period, but to ensure

```suggestion
The goal is not to limit the duration of the testing period, but to ensure
```

> +implement different methods.
+
+The path has an ECN state that is one of "testing", "unknown", "failed", or
+"capable".  In the "testing" and "capable" states the endpoint sends packets
+with an ECT(0) marking; otherwise, the endpoint sends unmarked packets.
+
+To start testing a path, the ECN state is set to "testing" and existing ECN
+counts are remembered as a baseline.  It should not be necessary to disregard
+the effect of packets sent prior to starting testing, though it is necessary for
+a sender to remember what markings were used for every packet that is
+acknowledged; see {{ecn-ack}}.
+
+The testing period runs for a number of packets or round trip times as
+determined by the endpoint.  During this time, packets sent are marked with
+ECT(0).  The goal is to limit the duration of the testing period, but to ensure
+that enough marked packets are sent that it is likely that ECN counts will

```suggestion
that enough marked packets are sent for received ECN counts to
```

> +
+To start testing a path, the ECN state is set to "testing" and existing ECN
+counts are remembered as a baseline.  It should not be necessary to disregard
+the effect of packets sent prior to starting testing, though it is necessary for
+a sender to remember what markings were used for every packet that is
+acknowledged; see {{ecn-ack}}.
+
+The testing period runs for a number of packets or round trip times as
+determined by the endpoint.  During this time, packets sent are marked with
+ECT(0).  The goal is to limit the duration of the testing period, but to ensure
+that enough marked packets are sent that it is likely that ECN counts will
+provide a clear indication of how the path treats marked packets.
+
+<!-- Do we need a more concrete recommendation here?  For instance, I might say
+"Endpoints could test with packets that amount to between 1 to 2 times the
+initial congestion window over a period between 1 to 2 times the estimated RTT."

This is an example, and as such, it's useful for us to provide a specific value here. We should also expect that anyone implementing this is likely to use these exemplary values.

> +the effect of packets sent prior to starting testing, though it is necessary for
+a sender to remember what markings were used for every packet that is
+acknowledged; see {{ecn-ack}}.
+
+The testing period runs for a number of packets or round trip times as
+determined by the endpoint.  During this time, packets sent are marked with
+ECT(0).  The goal is to limit the duration of the testing period, but to ensure
+that enough marked packets are sent that it is likely that ECN counts will
+provide a clear indication of how the path treats marked packets.
+
+<!-- Do we need a more concrete recommendation here?  For instance, I might say
+"Endpoints could test with packets that amount to between 1 to 2 times the
+initial congestion window over a period between 1 to 2 times the estimated RTT."
+-->
+
+After the testing period ends, the ECN state for the path becomes "unknown".

Why does this have to go to "unknown" and not directly to "capable" or "failed"?

> +
+The testing period runs for a number of packets or round trip times as
+determined by the endpoint.  During this time, packets sent are marked with
+ECT(0).  The goal is to limit the duration of the testing period, but to ensure
+that enough marked packets are sent that it is likely that ECN counts will
+provide a clear indication of how the path treats marked packets.
+
+<!-- Do we need a more concrete recommendation here?  For instance, I might say
+"Endpoints could test with packets that amount to between 1 to 2 times the
+initial congestion window over a period between 1 to 2 times the estimated RTT."
+-->
+
+After the testing period ends, the ECN state for the path becomes "unknown".
+From the "unknown" state, successful validation of the ECN counts an ACK frame
+(see {{ecn-ack}}) causes the ECN state for the path to become "capable", unless
+no marked packet has been acknowledged.

You will be blocked, but only until the PTO timer fires. There is a question still of what to do afterwards. While it is rare, I suspect we need this fallback as a failsafe.

> +determined by the endpoint.  During this time, packets sent are marked with
+ECT(0).  The goal is to limit the duration of the testing period, but to ensure
+that enough marked packets are sent that it is likely that ECN counts will
+provide a clear indication of how the path treats marked packets.
+
+<!-- Do we need a more concrete recommendation here?  For instance, I might say
+"Endpoints could test with packets that amount to between 1 to 2 times the
+initial congestion window over a period between 1 to 2 times the estimated RTT."
+-->
+
+After the testing period ends, the ECN state for the path becomes "unknown".
+From the "unknown" state, successful validation of the ECN counts an ACK frame
+(see {{ecn-ack}}) causes the ECN state for the path to become "capable", unless
+no marked packet has been acknowledged.
+
+At any point, if validation of ECN counts fails, the ECN state becomes "failed".

```suggestion
If validation of ECN counts fails at any time, the endpoint records ECN state for the path as "failed".
```

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/pull/3320#pullrequestreview-339557244