Re: [tcpm] Reviewed for draft-ietf-tcpm-accurate-ecn-23

Gorry Fairhurst <gorry@erg.abdn.ac.uk> Sun, 26 March 2023 17:57 UTC

Return-Path: <gorry@erg.abdn.ac.uk>
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 E67A4C14CEF9 for <tcpm@ietfa.amsl.com>; Sun, 26 Mar 2023 10:57:35 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.896
X-Spam-Level:
X-Spam-Status: No, score=-1.896 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HTML_MESSAGE=0.001, NICE_REPLY_A=-0.001, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001] autolearn=ham autolearn_force=no
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 EdhuulEGZ74Q for <tcpm@ietfa.amsl.com>; Sun, 26 Mar 2023 10:57:31 -0700 (PDT)
Received: from pegasus.erg.abdn.ac.uk (pegasus.erg.abdn.ac.uk [137.50.19.135]) by ietfa.amsl.com (Postfix) with ESMTP id 3B26CC14CEED for <tcpm@ietf.org>; Sun, 26 Mar 2023 10:57:30 -0700 (PDT)
Received: from [192.168.1.73] (fgrpf.plus.com [212.159.18.54]) by pegasus.erg.abdn.ac.uk (Postfix) with ESMTPSA id 018561B0019A; Sun, 26 Mar 2023 18:57:26 +0100 (BST)
Content-Type: multipart/alternative; boundary="------------6v9mWRBuLGlwustKrjk0Tgvy"
Message-ID: <b3a57dd9-df69-a05c-b135-04af7f9744b4@erg.abdn.ac.uk>
Date: Sun, 26 Mar 2023 18:57:26 +0100
MIME-Version: 1.0
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.8.0
To: Bob Briscoe <ietf@bobbriscoe.net>
Cc: tcpm IETF list <tcpm@ietf.org>
References: <678c501b-2520-1844-92f3-7e9c319df525@erg.abdn.ac.uk> <9e2e5095-6ff9-2a8d-71fa-cd1d2b745d75@bobbriscoe.net> <dd8c9571-2ebc-df14-4b09-00efa361c59b@erg.abdn.ac.uk> <b20c39c5-1638-77d8-704c-ae7cdb2a381e@bobbriscoe.net>
From: Gorry Fairhurst <gorry@erg.abdn.ac.uk>
Organization: UNIVERSITY OF ABERDEEN
In-Reply-To: <b20c39c5-1638-77d8-704c-ae7cdb2a381e@bobbriscoe.net>
Archived-At: <https://mailarchive.ietf.org/arch/msg/tcpm/dtKb6DfCL1ZL6Hl2d8-W7b--LHA>
Subject: Re: [tcpm] Reviewed for draft-ietf-tcpm-accurate-ecn-23
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: Sun, 26 Mar 2023 17:57:36 -0000

See below,
Gorry

On 26/03/2023 18:11, Bob Briscoe wrote:
> Gorry, See [BB2] I think we're close to converged.
>
> On 26/03/2023 14:51, Gorry Fairhurst wrote:
>> On 26/03/2023 03:06, Bob Briscoe wrote:
>>> Gorry,
>>>
>>> Thank you as always for your extensive review. See responses tagged 
>>> [BB] inline.
>>> No comment = proposal accepted.
>>
>> I see you have a plan, I made a few additional comments [GF2].
>>
>>>
>>> On 25/03/2023 17:28, Gorry Fairhurst wrote:
>>>> I have just reviewed draft-ietf-tcpm-accurate-ecn-23 for a WGLC.
>>>>
>>>> This ID is significantly easier to read than an earlier version I 
>>>> read, but still is not an easy read - and I did not have time to 
>>>> re-check all the logic, but I did look at the text and have the 
>>>> following set of comments. Most of these relate to sentences were 
>>>> clarity could be improved, or RFC2119 language could be more 
>>>> explicit about the subject. Many of these could be resolved by 
>>>> simple text changes, and where possible I have provided the text 
>>>> from the ID, and in most cases a suggestion remedy.
>>>>
>>>> Best wishes,
>>>>
>>>> Gorry
>>>>
>>>> P.S. When you complete all the updates after the WGLC, I suggest 
>>>> you post a review request to TSVWG, just to keep the process good - 
>>>> because this does plan to update a TSVWG spec.
>>>>
>>>> =========
>>>>
>>>> This statement causes concern:
>>>> AccECN is intended to be a complete replacement for classic TCP/ECN 
>>>> feedback, not a fork in the design of TCP.
>>>> Is it possible the intent is:
>>>> AccECN is intended to offer a complete replacement for classic 
>>>> TCP/ECN feedback, not a fork in the design of TCP.
>>>> - To me the importance being that this does not immediately 
>>>> obsolete current TCP, it simply provides a negotiated mechanism to 
>>>> replace it.
>>>>
>>>> ===================
>>>> Section 1
>>>> ===
>>>> Recently, proposed mechanisms like Congestion Exposure (ConEx 
>>>> [RFC7713]), DCTCP [RFC8257] or L4S [RFC9330] need to know when more 
>>>> than one marking is received in one RTT which is information that 
>>>> cannot be provided by the feedback scheme as specified in [RFC3168].
>>>> - Add comma, so that:
>>>> Recently, proposed mechanisms like Congestion Exposure (ConEx 
>>>> [RFC7713]), DCTCP [RFC8257] or L4S [RFC9330] need to know when more 
>>>> than one marking is received in one RTT, which is information that 
>>>> cannot be provided by the feedback scheme as specified in [RFC3168].
>>>> ===
>>>> This document specifies an update to the ECN feedback scheme of RFC 
>>>> 3168 that provides more accurate information and could be used by 
>>>> these and potentially other future TCP extensions.
>>>> - could we note this is an alternative rather than replacement:
>>>> This document specifies an update to the ECN feedback scheme of RFC 
>>>> 3168 that provides an alternative more accurate information and 
>>>> could be used by these and potentially other future TCP extensions.
>>>> ===
>>>> This documents specifies a standards track scheme
>>>> - remove s
>>>> This document specifies a standards track scheme
>>>> ===
>>>> Then terminology is defined
>>>> - do we need a comma:
>>>> Then, terminology is defined
>>>> ===
>>>> Section 1.2
>>>> ===
>>>> Therefore an AccECN receiver aims to act as a generic (dumb) 
>>>> reflector of congestion information so that in future new sender 
>>>> behaviours can be deployed unilaterally.
>>>> - why /aims to/ ... why does this not specify this?
>>>> - is /dumb/ necessary, it's an unfortunate word choice - simple 
>>>> could be alternative?
>>>
>>> [BB] Yes, 'aims to' should be moved to the later part of the sentence.
>>> The terminology 'dumb' was borrowed from the "intelligent vs dumb 
>>> network" phrasing of the e2e argument. 'Simple' would lose the 
>>> intended nuance of 'mechanistic' or 'robotic', and the former is 
>>> least overloaded with other meanings these days (robotic is starting 
>>> to mean the opposite!). So how about:
>>>
>>>     Therefore an AccECN receiver acts as a generic (mechanistic) 
>>> reflector of congestion information with the aim that in future new 
>>> sender behaviours can be deployed unilaterally.
>>>
>>> There are other occurrences of 'dumb reflector' - so I'll change 
>>> them all.
>>>
>>>
>> [GF2] Seems OK to me.
>>>> ===
>>>> Classic ECN: the ECN protocol specified in [RFC3168].
>>>> - Upper case /The/ to be consistent?
>>>> ===
>>>> Classic ECN feedback: the
>>>> - Upper case /The/ to be consistent?
>>>> ===
>>>> which ensures the signal is received reliably even if ACKs are lost.
>>>> - well not if all are lost! Could this be:
>>>> which provides resilience of the signal to loss or reordering of ACKs.
>>>> ====
>>>> Para after table talks of a TCP sender, but the terminology talks 
>>>> of a data sender and a TCP server; but not a TCP sender. Presumably 
>>>> this is a data sender.
>>>> ====
>>>> - It might be useful to say that a TCP connection between a TCP 
>>>> client and a TCP server provides bidirectional communication 
>>>> between two pairs of TCP senders and TCP receivers, forming two 
>>>> independent half connections/.
>>>
>>> [BB] Yes, we use half connection a number of times later, and this 
>>> would be a good place to introduce it.
>>>
>>>> ====
>>>> I think the whole of section 2 could be informative? ~If it is, can 
>>>> we say this?
>>>
>>> [BB] We do already; in the first para of §2:
>>> "This section provides an informative overview of the AccECN 
>>> protocol that will be normatively specified in Section 3 
>>> <https://datatracker.ietf.org/doc/html/draft-ietf-tcpm-accurate-ecn-23#accecn_Spec>"
>>>
>> [GF2] Oh, fine.
>>>> ====
>>>> The RFC 2119 conformance terms are defined in 1.3, but then are 
>>>> followed by an informative set of sections. I for one, would much 
>>>> prefer that definition block moved to the start of section 3.
>>>
>>> [BB] Much of the other terminology defined in §1.3 is needed sooner. 
>>> So, to do as you ask, we'd have to to split up the terminology 
>>> section, which I don't want to do. It's not incorrect as it is, so 
>>> let's leave it.
>>>
>> [GF2] I still think splitting the terminology would be better to 
>> include the RFC declarations at the start of the section that uses them.
>
> [BB2] It is very common RFC practice to stick all RFC2119 boilerplate 
> and other terminology in an early section (often after the Intro), 
> whether or not it will be immediately used in the subsequent section. 
> Including in your latest RFC [RFC9268] actually :P
>
[GF3] There can still be feedback on requests containing normative and 
informative sections, andyway, I'm not the shepherd, so no further 
comment from me on this point.
>
>>>> ===
>>>> but it is more likely to suffer from middlebox interference.
>>>> - I think we could be more future-looking, and propose:
>>>> but is currently more likely to suffer from middlebox interference.
>>>> ===
>>>> However cycling is still a possibility at the Data Sender because a 
>>>> whole sequence of ACKs carrying intervening values of the field 
>>>> might all be lost or delayed in transit.
>>>> - This is about reception of ACKs? I wasn't sure first read, could 
>>>> we write:
>>>> However ACKs received at the Data Sender could still cycle because 
>>>> a whole sequence of ACKs carrying intervening values of the field 
>>>> might all be lost or delayed in transit.
>>>> ===
>>>> had been an infeasibly long sequence of ACK losses.
>>>> - what does infeasible mean here, it seems very imprecise. It would 
>>>> have been easier not to judge the feasibility and simply said /a 
>>>> long/...
>>>
>>> [BB] 'long' is less precise than 'infeasibly long', which conveys 
>>> the meaning of 'not just long, but so long that we do not need to 
>>> consider the possibility of it occurring in practice'.
>>> The main meaning of Infeasible is impracticable, so I would like to 
>>> leave this as-is.
>>>
>> [GF2] Not a huge issue to me.
>>>> ===
>>>> Therefore, as long as the AccECN Option is available
>>>> - unfortunate use of /as long/ just after discussing length of ACK 
>>>> drops?
>>>> Providing that the AccECN Option is available
>>>> ===
>>>> is provided in order to protect
>>>> - ordering is not implied, this could be:
>>>> is provided to protect
>>>
>>> [BB] The intended meaning was not "provided in order, to protect." 
>>> Rather it was "provided in_order_to protect." So your suggestion 
>>> does indeed remove the ambiguity.
>>>
>>>> ===
>>>> The TCP server MUST NOT set one of these 4 combination of flags on 
>>>> the SYN/ACK unless the preceding SYN requested support for AccECN 
>>>> as above.
>>>> - What is the client response if this does happen?
>>>
>>> [BB] To rephrase your question into a stand-alone question, "What 
>>> does a non-AccECN client do if it somehow receives a SYN-ACK that 
>>> implies the server supports AccECN?
>>>
>>> This draft doesn't specify what non-AccECN clients do, and it would 
>>> be pointless to try, because they are already out there, and their 
>>> specs already say what they do.
>>> Nonetheless, FYI, clients implementing either of the two non-AccECN 
>>> specs currently out there would both handle a randomly appearing 
>>> AccECN SYN-ACK correctly. Specifically:
>>>
>>> 1) RFC3168, §6.1.1:
>>>          If a host has received at least one [...]
>>>          non-ECN-setup SYN-ACK packet, then it SHOULD NOT set ECT on
>>>          data packets.
>>>          ...
>>>          Receivers MUST correctly handle all forms of the non-ECN-setup
>>>          [...] SYN-ACK packets.
>>>
>>> Even if an RFC3168 client only checked the last 2 flags of the 3 
>>> AccECN flags, none of the three 2-bit combinations that imply AccECN 
>>> support would be expected by an RFC3168 client (by design of AccECN).
>>>
>>> Therefore:
>>>
>>>   * An RFC3168 client would handle a randomly appearing AccECN
>>>     SYN-ACK correctly,
>>>       o whether it checked all the TCP flags (as required by the
>>>         second sentence quoted from RFC3168 above)
>>>       o or even if it only checked CWR and ECE.
>>>
>>>
>>> 2) RFC9293:
>>> Altho this recommends TCP implementations support RFC3168, there are 
>>> many RFC793 TCP implementations that do not. Such a non-ECN TCP 
>>> client will have no logic to check the ECN flags during the 3WHS and 
>>> therefore it will not notice that a SYN-ACK is (incorrectly) 
>>> responding as if it was asked to support AccECN.
>>>
>>> Therefore, again,
>>>
>>>   * a non-ECN TCP client will handle a randomly appearing AccECN
>>>     SYN-ACK correctly, just continuing to not support any form of ECN.
>>>
>>>
>> [GF2] Thanks for this explantion, I think setting these bits defines 
>> the mode - so it's a little weird as a requirement, but I get it.
>>>
>>>> ==
>>>> interference than other intermittent causes of loss, e.g. 
>>>> congestion, wireless interference, etc.¶
>>>> - two uses of the word /interference/ with different meaning, could 
>>>> the second be replaced by /loss/?
>>>
>>> [BB] Good point. I think "transmission loss" would be better.
>>>
>>>> ==
>>>> It MUST NOT send an ECN-setup SYN [RFC3168] within the same 
>>>> connection as it has sent a SYN requesting AccECN feedback.
>>>> /as/when/ or something else?
>>>> It MUST NOT send an ECN-setup SYN [RFC3168] within the same 
>>>> connection when it has sent a SYN requesting AccECN feedback.
>>>
>>> [BB] I don't see the problem here. "The same ... as" is correct 
>>> English, whereas "the same ... when" is not.
>>> A similar sentence proves this is a correct construction: "It MUST 
>>> NOT send a message within the same millisecond as it has sent 
>>> another message"
>>>
>>> If this makes the reader stumble, we could rephrase entirely:
>>>     It MUST NOT send an ECN-setup SYN [RFC3168] during a connection 
>>> in which it has also sent a SYN requesting AccECN feedback.
>>> However, I don't think that's any better, so I'd prefer to leave it 
>>> as-is.
>>>
>> [GF2] That proposal seems much clearer to me, I understand now.
>>>> ===
>>>> It MUST NOT send an ECN-setup SYN/ACK [RFC3168] within the same 
>>>> connection as it has sent a SYN/ACK agreeing to use AccECN feedback.
>>>> /as/when/ or something else?
>>>> It MUST NOT send an ECN-setup SYN/ACK [RFC3168] within the same 
>>>> connection when it has sent a SYN/ACK agreeing to use AccECN feedback.
>>>
>>> [BB] Ditto.
>>>
>> [G2] I'd prefer to find a way to make this one more clear.
>
> [BB2] I'll try. Brain's not in best trim at the mo.
>
>>>> ===
>>>> It is still obliged to respond appropriately to AccECN feedback 
>>>> that indicates there were ECN marks on packets it had previously sent
>>>> -Please explicitly say what is "it"?
>>>> The Data Sender is still obliged to respond appropriately to AccECN 
>>>> feedback that indicates there were ECN marks on packets it had 
>>>> previously sent
>>>> ==
>>>> In general, it is obliged to respond to congestion feedback even when
>>>> - what is it? Receiver/Sender?
>>>> In general, the Data Sender is obliged to respond to congestion 
>>>> feedback even when
>>>> ===
>>>> Unlike an RFC 3168 data sender, it MUST NOT set CWR to indicate it 
>>>> has received and responded
>>>> - what is it? Receiver/Sender?
>>>> Unlike an RFC 3168 data sender, a Data Receiver MUST NOT set CWR to 
>>>> indicate it has received and responded
>>>
>>> [BB] The problem you've identified occurs because there is an aside 
>>> about all the 'switching feedback negotiation' bullets, just before 
>>> all the 'congestion response' bullets.
>>> This tends to lose the thread of the Data-Sender context.
>>>
>>> Nonetheless, I've also noticed that:
>>> * some of the bullets under "As a Data Sender" are about sending 
>>> control packets, not data.
>>> * some of the bullets under "As a Data Receiver" are about receiving 
>>> control packets, not data.
>>>
>>> So I shall have to restructure the whole section.
>>> Let me do that, then give it to you to review again.
>> [GF2] OK
>>>
>>> ==
>>>> if it receives an ECN-setup SYN or ECN-setup SYN/ACK [RFC3168] 
>>>> during the same
>>>> - to avoid doubt in citing this RFC2119 requirement, can we write:
>>>> if a Data Receiver receives an ECN-setup SYN or ECN-setup SYN/ACK 
>>>> [RFC3168] during the same
>>>> ===
>>>> If for any reason it is not willing to
>>>> - to avoid doubt in citing this RFC2119 requirement, can we write:
>>>> If for any reason the Data Receiver is not willing to
>>>> ===
>>>> it MUST NOT use reception
>>>>
>>>> - to avoid doubt in citing this RFC2119 requirement, can we write:
>>>>
>>>> A Data Receiver MUST NOT use reception
>>>
>>> [BB] As above, I'll restructure the whole of this section before 
>>> giving to you to review again.
>>> Sorry about this.
>>>
>>>
>>>> ===
>>>> correct ECN feedback logic, as the packets
>>>> - could we replace /as/?
>>>> correct ECN feedback logic, because packets
>>>> ===
>>>> Whenever a host feeds back the value
>>>> - Is that the Data Receiver? Sender? or both? - it would better to 
>>>> match the clauses above.
>>>
>>> [BB] Yes, this could s/host/Data Receiver/
>>> But I will also make it clear that the stuff about the feedback 
>>> being on a retransmission is about a retransmission for the other 
>>> half connection.
>>>
>> [GF2] I see.
>>>> ===
>>>> When a host first enters AccECN mode, in its role as a Data Receiver
>>>> - could this be more simply said:
>>>> When Data Receiver first enters AccECN mode,
>>>
>>> [BB] Not really, because a host enters AccECN mode as a whole (not 
>>> separately per half connection).
>> [GF2] That was not clear, ... I think this applies to several places, 
>> so maybe a clear statement that explains this in th eirght place 
>> would be best?
>
> [BB2] OK. But, actually, I just went to do it, and it's already there 
> in §3.1.1:
>
>     "If a TCP server (B) that is AccECN-enabled receives a SYN with 
> the above three flags set, it MUST set *both its half connections* 
> into AccECN mode."
> ...
>     "Once a TCP client (A) has sent the above SYN to declare that it 
> supports AccECN, and once it has received the above SYN/ACK segment 
> that confirms that the TCP server supports AccECN, the TCP client MUST 
> set *both its half connections* into AccECN mode."
>
[GF3] It was the word "host" that I didn't see mentioned.
>
>>>
>>>> ==
>>>> When a host enters AccECN mode, in its role as a Data Sender
>>>> - could this be more simply:
>>>> When Data Sender first enters AccECN mode,
>>>
>>> [BB] Ditto.
>>>
>>>> ==
>>>> A host MUST NOT interpret the 3
>>>> - Is that the Data Receiver? Sender? or both? Client? Server?
>>>> A Data Receiver MUST NOT interpret the 3
>>>
>>> [BB] This does really mean "a host".
>>> It applies across the 3WHS and data transfer, so it's not just about 
>>> Data receiver or Data sender. And it applies to client and server. 
>>> So it is a general statement about what hosts interpret.
>>>
>>>> ==
>>>> An implementer MAY develop an alternative algorithm as long as it 
>>>> satisfies these requirements.¶
>>>> - doesn't seem like a /MAY/ can this be /may/ or /is permitted to/?
>>>
>>> [BB] I've checked the definition of 'MAY' in RFC2119, and I'm pretty 
>>> sure we really do mean 'MAY', but I'm always willing to be corrected.
>>> Can you try to explain why your understanding of 'MAY' would be 
>>> inappropriate here?
>>>
>>> I'm guessing that perhaps "an implementation MAY do x", but "an 
>>> implementer may do y"?
>>> If that's your concern, I would say in this case, "an implementer 
>>> may produce code that MAY do y," so I don't see a great difference.
>>>
>> [GF2] I do not mind on this one at all, check and see what works.
>>>> ==
>>>> the Data Sender SHOULD believe the ACE counter, unless it can be 
>>>> sure that it is counting all control packets correctly.¶
>>>> - what does believe mean? use?
>>>
>>>     '...SHOULD consider the ACE counter to be correct (and its count 
>>> of control packets to be incomplete)'
>>>
>>>> ===
>>>> Section 3.2.3. The AccECN Option
>>>> - Could we please add RFC-Ed instructions to ensure replacement of 
>>>> TBD1 and TBD2 during final edit?
>>>
>>> [BB] In my local editor's copy, we already have the early assignment 
>>> numbers now.
>>>
>>>> ===
>>>> All implementations of a Data Sender that read any AccECN Option 
>>>> MUST be able to read in AccECN Options of any of the above lengths.
>>>> - I think /in/ seems odd.
>>>> - This makes me wonder what happens if they do not?
>>>> - REQUIRED to implement?
>>>
>>> [BB] I can s/read in/read/
>>> For any spec (not only AccECN), if an implementation does not 
>>> implement a 'MUST', it is not an implementation of the spec. So all 
>>> bets would be off.
>>>
>>> All this is clarifying is that, altho' it is optional to implement 
>>> the AccECN Option, if you do implement it, you have to be able to 
>>> read all the valid option lengths.
>>>
>>>> ==
>>>> Whenever the Data Sender receives ACK carrying
>>>> - add /an/
>>>> Whenever the Data Sender receives an ACK carrying
>>>> ===
>>>> If the ACK has not been superseded,
>>>> - please explain superseded!
>>>
>>> [BB] I'll add '(see Appendix A.1)', which defines superseded precisely.
>>>
>>>> ===
>>>> AccECN is for congestion control, which SHOULD generally be 
>>>> considered important relative to other TCP options.
>>>> - what does important mean here?
>>>> - Does this have to be a /SHOULD/ could it be a should and explain?
>>>
>>> I'll reword as
>>>     "which implementations SHOULD generally prioritize over other 
>>> TCP options when there is insufficient space for all the options in 
>>> use."
>>> Then I think 'SHOULD' becomes appropriate.
>>>
>> [GF2] - yes.
>>>> ===
>>>> it (the server) has to have confirmed
>>>> - why not just say the server?
>>>> the server has to have confirmed
>>>
>>> [BB] In a SYN cookie scenario, the server deliberately forgets what 
>>> it would normally remember. So I had to use 'it', because the server 
>>> is reverse engineering what 'it' did earlier, where 'it' is another 
>>> incarnation of itself that it doesn't remember. Otherwise, just 
>>> saying "it can assume that the server has to have confirmed..." 
>>> makes it sound like some other server.
>>>
>>> A little rephrasing is needed here anyway, so I've tried to say this 
>>> another way:
>>>
>>> ORIGINAL:
>>>
>>> If a TCP server using SYN Cookies supports AccECN and if ..., and if 
>>> ...,
>>> it can assume that:
>>> *  the TCP client has to have requested AccECN support on the SYN
>>> *  it (the server) has to have confirmed that it supported AccECN
>>>
>>> PROPOSED:
>>>
>>> If a TCP server using SYN Cookies supports AccECN and if ..., and if 
>>> ...,
>>> the server can infer the first two stages of the handshake:
>>> *  the TCP client has to have requested AccECN support on the SYN
>>> *  then, even though the server kept no state, it has to have confirmed
>>>    that it supported AccECN
>>>
>>>
>>>> ===
>>>> Each host needs to maintain eight additional counters. The hosts 
>>>> have to apply some additional tests to detect tampering by 
>>>> middleboxes,
>>>> - Is this sender or receiver code?
>>>
>>> [BB] Here, 'hosts' is appropriate because this is a general 
>>> statement about all the additional tests; some are during the 3WHS 
>>> (when either client or server is comparing what it received against 
>>> what it sent); while other tests are conducted by the Data Receiver 
>>> part of a half-connection.
>>>
>>>> ===
>>>> I would suggest section 3.3 is made a separate top level section 
>>>> (section 4), to really call-out that this is not the TCP sender and 
>>>> receiver but the part that other people need to read.
>>>
>>> [BB] That would have been a really good idea earlier. I'd like to do 
>>> this. But I'm going to think long and hard before doing it now 
>>> though. I'm concerned that there might be cross refs within this or 
>>> other documents to §3.3 or §4 -- §8 that might break.
>>>
>>> Whether we do this or not, an additional piece in the doc roadmap 
>>> about this section would be useful.
>>>
>>>> ---
>>>> With the importance of section 3.3 in mind, I was surprised to see 
>>>> the top-level section had no text. Surely some text belongs here to 
>>>> say that deployment of AccECN places new requirements on networking 
>>>> equipment that forwards TCP, and inspects the TCP header information!
>>>
>>> [BB] I believe that section headings are powerful ways to say 
>>> exactly this, without having to repeat the same words with a few 
>>> gratuitous little words added to make sentences. Specifically:
>>>
>>> 4. AccECN Compliance Requirements for TCP Proxies, Offload Engines 
>>> and other Middleboxes
>>>  4.1. Requirements for TCP Proxies
>>>  ...
>>>  4.2. Requirements for Transparent Middleboxes and TCP Normalizers
>>>  ...
>>>  4.3. Requirements for TCP ACK Filtering
>>>  ...
>>>  4.4. Requirements for TCP Segmentation Offload
>>>  ...
>>>
>>> Again, if this idea had come earlier, I might have been more 
>>> inclined to add a sentence or two. But I'm not a fan of adding 
>>> significant amounts of text at this stage. Will probably add a 
>>> little tho.
>> [GF2] Little - even one sentence was what I had in mind. :-)
>>>
>>>> ===
>>>> End of 3.3.2:
>>>> However, to comply with
>>>> - I could live without the "However", which to me at least gives 
>>>> more weight - could even be a separate para to help this stand out!
>>>
>>> [BB] I can see the need to emphasize, but a new para wouldn't work - 
>>> the 'However' sentence is very much a continuation of the same flow 
>>> of thought.
>>>
>> [GF2] The problem with some of these /However/ is that they follow-on 
>> a sentence which then becomes normative. I'm happiest when the 
>> normative statements are single sentences that can be read on their 
>> own...
>
> [BB2] Understood, but in this case, there's no danger of the first 
> sentence being read as a requirement, because it says the opposite of 
> the subsequent normative MUST NOT sentence.
>
>>>> ===
>>>> I think 3.3.4 is different to 3.3.1 and 3.3.2, and really belongs 
>>>> with the rest or directly following 3.2. The reason is this, is 
>>>> about implementing TCP.
>>>
>>> [BB]
>>> This is a question of whether separate processors are independent 
>>> even if they run off the same power supply, or they're in the same 
>>> housing. Similar questions apply on where you draw the line between 
>>> an API and a protocol.
>>>
>>> In a similar vein, TCP Proxies /are/ TCP implementations. So they 
>>> ought not to be outside §3.
>>> So it seems we're now tending towards the idea that §3.3.1 and § 
>>> 3.3.4 ought to remain in §3.3, while §3.2 & §3.3 would be moved to a 
>>> new §4.
>>>
>>> But then we return to your original point that the types of company 
>>> that build all the functions of all four sections (§3.3.1-§3.3.4) 
>>> tend to be "networking equipment vendors" rather than end-system 
>>> developers. So we want to direct their eyes to their own section. 
>>> But then NFV blurs the distinction. This is not clear-cut. As I 
>>> said, I will think on it.
>>>
>> [GF2] OK, I think the text works best when grouped into topics that a 
>> specific group of readers would look at. 
>
> [BB2] I got that. But the problem is that even different subsections 
> of §3.3. are already addressable to different parts of the industry. 
> It's not clear cut. Not to mention the danger of late structural change.
>
> We might still do this (I would definitely have been in favour of it 
> if we'd thought of it earlier), but let's see whether there are other 
> views in the WG.
>
[GF3] I suspect you'll do the right thing, even if that's only to make 
super clear in the ouline of the document's contents.
>
>>>> ===
>>>> Section 4
>>>> For the avoidance of doubt it would have been nice to have one 
>>>> starting sentence that explains if these statements in section 4 
>>>> are *additional* requirements to section 3, which I think they are 
>>>> likely not, or a list of the impact of the changes in section 3 on 
>>>> RFC3168?
>>>
>>> [BB] Good point. You're right. They are not additional, which needs 
>>> saying.
>>>
>>>> ===
>>>> I don't have a strong opinion, but I think section 6 is much easier 
>>>> to read than some of the other materials, and seeing this after 
>>>> section 2 mighty have been good. Equally could it be moved to join 
>>>> other material before annexe B?
>>>
>>> [BB] It is intended to be like a 'Conclusions' section. The idea is 
>>> that it comes after the detailed spec, to sum up whether it meets 
>>> the original requirements. On that basis, it can't really come 
>>> before the detailed spec. I'd like to leave it where it is. But 
>>> would it help to change the title to 'Summary: Protocol Properties'?
>> [GF2] That would help, or just a couple of extra words.
>>>
>>>> ===
>>>> Section 10 looks like it should have an RFC-Ed comment to request 
>>>> removal before publication.
>>>> ===
>>>> Of course, other ways could be resorted to in order to extend 
>>>> AccECN or ECN in future
>>>> - could we be simpler and just say:
>>>> Other ways could have been used to extend ECN
>>>
>>> [BB] Certainly, we can remove 'Of course'.
>>>
>>> But you're suggesting we change the sense from 'could be in future' 
>>> to 'could have been in this spec'. That would be contrary to the 
>>> purpose (and headings) of this appendix. So we'd rather not do that 
>>> part of your suggestion.
>>>
>> [GF2] I'm less sure of the future, but do what people agree.
>>>> ===
>>>> In section 2:
>>>> could give conflicting feedback on the same segment
>>>> - which segment - the received segment or the segment that carries 
>>>> the feedback?
>>>
>>> [BB] We'll s/on/about/ which is what the conflict concern is.
>>>
>>>
>>>> ===
>>>> In section 2.4:
>>>> If the option is stripped,
>>>> - Maybe worth explaining in parenthesis
>>>> If a middlebox strips the option (removes the option from a TCP 
>>>> segment),
>>>> ===
>>>> In section 2.4:
>>>> Feedback in bytes is provided in order to protect
>>>> - seems one to confusion, can we remove /in order/ to avoid 
>>>> potential misunderstanding of ordering
>>>> Feedback in bytes provides protection against a receiver using 
>>>> attacks similar to 'ACK-Division' to artificially inflate the 
>>>> congestion window, which is why [RFC5681] now recommends that TCP 
>>>> counts acknowledged bytes not packets.
>>>> ===
>>>> Can the last para of section 2.4, be modified like this to allow it 
>>>> to appear in the guidance on middle boxes? :
>>>> Feedback in bytes protects from middlebox attacks similar to 
>>>> 'ACK-Division' that seek to artificially inflate the congestion 
>>>> window, which is why [RFC5681] now recommends that TCP counts 
>>>> acknowledged bytes not packets.
>>>
>>> [BB] A sentence directed at bad actors, boasting that we've designed 
>>> this so they cannot build middleboxes that mount this particular 
>>> attack wouldn't fit in the middlebox section.
>>> The section on middleboxes is guidance for /willing/ middlebox 
>>> implementers.
>>>
>>> The original sentence justifies a design choice of the AccECN 
>>> protocol. So it would be appropriate to just
>>>     s/against a receiver/against a receiver or middlebox/
>>>
>>>
>>>> ===
>>>> If it has set itself into classic ECN feedback mode it MUST then 
>>>> comply with [RFC3168].
>>>> - Can we replace the /it/s:
>>>> If a Data Receiver has set itself into classic ECN feedback mode it 
>>>> MUST then comply with [RFC3168].
>>>
>>> [BB] Yes, except s/Data Receiver/TCP client/, as per the preceding 
>>> sentence in the draft.
>>>
>>>> =================
>>>> Terms:
>>>>
>>>> /ECN bits/ is mentioned 3 times, but should always be /ECN Field/
>>>
>>> Agree on occurrences 1 & 2.
>>>
>>> Occurrence 3 is about the TCP flags - that needs
>>>     s/using the ECN bits in the TCP header/using three flags in the 
>>> TCP header already assigned to earlier ECN schemes/
>>>
>>>>
>>>> /ECN Field/ is not defined, should be as per [RFC3168] and define 
>>>> the ECN codepoint.
>>>
>>> [BB] OK. This just needs a change to the first sentence in §1.4 
>>> Recap of Existing ECN Feedback in IP/TCP.
>>>
>>> OLD:
>>>     ECN [RFC3168 <https://www.rfc-editor.org/info/rfc3168>] uses two 
>>> bits in the IP header.
>>> PROPOSED:
>>> [RFC3168 <https://www.rfc-editor.org/info/rfc3168>] defines the 
>>> two-bit ECN Field in the IP header, consisting of four codepoints.
>>>
>>> Table 1. is titled "The ECN Field in the IP header" and recaps the 
>>> definitions of the ECN codepoints, and the para before it describes 
>>> the semantics.
>>>
>>>>
>>>> endpoint and end-point are variously used, please be consistent.
>>>>
>>>> /Data Sender/ is defined and then /ECN sender/ used in the text. Do 
>>>> we need to define both terms? or are they the same?
>>>
>>> [BB] For the one occurrence, we'll
>>>     s/an ECN sender/a sender that supports ECN/
>>> and
>>>     s/in the IP header/in the IP header of a data packet/
>>>
>>>>
>>>> /TCP client/ and /TCP server/ use lower case, whereas Data Receiver 
>>>> and Data Sender use upper case. the text later about a /TCP sender/ 
>>>> lower case. These ought to be consistent?
>>>
>>> [BB] OK. I'll upper case TCP client and server.
>>>
>>> Of the 5 occurrences of 'TCP Sender', the middle 3 are within quotes 
>>> from RFC3168 (where it is defined) and the 1st & 5th ought to be in 
>>> quotes and upper-cased, because they are describing what RFC3168 says.
>>>
>>> That's it.
>>> As I said, I'll just do everything with no comment.
>>>
>>> Thank you v much again.
>>>
>>> Cheers
>>>
>>>
>>>
>>> Bob
>>>
>>>
>> It looks like the next revision will address these issues,
>>
>> Gorry
>>
>
> [BB2] Will try.
>
> Cheers
>
>
> Bob
>
>>>>
>>>>
>>>> _______________________________________________
>>>> tcpm mailing list
>>>> tcpm@ietf.org
>>>> https://www.ietf.org/mailman/listinfo/tcpm
>>>
>>> -- 
>>> ________________________________________________________________
>>> Bob Briscoehttp://bobbriscoe.net/
>>
>>
>
> -- 
> ________________________________________________________________
> Bob Briscoehttp://bobbriscoe.net/

Gorry