Re: [tcpm] Reviewed for draft-ietf-tcpm-accurate-ecn-23
Gorry Fairhurst <gorry@erg.abdn.ac.uk> Mon, 27 March 2023 13:39 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 2FCD7C151B16 for <tcpm@ietfa.amsl.com>; Mon, 27 Mar 2023 06:39:56 -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 kfxV77Olgkcx for <tcpm@ietfa.amsl.com>; Mon, 27 Mar 2023 06:39:51 -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 13D4FC151542 for <tcpm@ietf.org>; Mon, 27 Mar 2023 06:39:50 -0700 (PDT)
Received: from [192.168.1.130] (fgrpf.plus.com [212.159.18.54]) by pegasus.erg.abdn.ac.uk (Postfix) with ESMTPSA id DEB861B0019A; Mon, 27 Mar 2023 14:39:46 +0100 (BST)
Content-Type: multipart/alternative; boundary="------------PQEqyGtdV8lYa00Q0U96pmqo"
Message-ID: <25c93256-c1a7-9c4f-6526-871f8128f71d@erg.abdn.ac.uk>
Date: Mon, 27 Mar 2023 14:39:46 +0100
MIME-Version: 1.0
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.9.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> <b3a57dd9-df69-a05c-b135-04af7f9744b4@erg.abdn.ac.uk> <054b88ce-bfed-a929-180f-ea7419adf3ef@bobbriscoe.net>
From: Gorry Fairhurst <gorry@erg.abdn.ac.uk>
Organization: UNIVERSITY OF ABERDEEN
In-Reply-To: <054b88ce-bfed-a929-180f-ea7419adf3ef@bobbriscoe.net>
Archived-At: <https://mailarchive.ietf.org/arch/msg/tcpm/P8CpbORebXaZPFY7bZZWqNI4SXE>
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: Mon, 27 Mar 2023 13:39:56 -0000
On 27/03/2023 14:28, Bob Briscoe wrote: > Gorry, I've addressed all your points in my editor's local copy, also > on github. > > See [BB3] for 3 further notes... OK, see below, > > On 26/03/2023 18:57, Gorry Fairhurst wrote: >> 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. > > [BB3] Sorry, I overlooked this in the first pass. > AccECN is definitely not an alternative (as explained in the sentence > "not a fork in the design of TCP"). It is a superset. > I know you are trying to avoid any implication that AccECN obsoletes > RFC3168, but there was no such implication in this sentence as it > stood. That is captured by the well-understood word "update". > [GF4] "Update" is OK. Staing the word "replace" raises more alarms, even if that is what I personally hope. > Nonetheless, I would like to add the following important point to this > sentence, which doesn't seem to have been said anywhere in the Intro: > 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*, while still also > supporting the pre-existing TCP congestion controllers that use just > one feedback signal per round*. [GF4] That text is clear. > > A later sentence makes it even clearer that RFC3168 feedback has not > gone away: > "AccECN feedback complements TCP's loss feedback and it can > coexist alongside 'classic' [RFC3168 > <https://www.rfc-editor.org/info/rfc3168>] TCP/ECN feedback." > Good. >>>>>> === >>>>>> 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. > > [BB3] I've done the restructuring. > I just wanted to explain why we didn't use phrases like "A Data > Receiver MUST NOT use reception ..." > It's because we would need to repeat each time "A Data Receiver *in > AccECN mode* MUST NOT use reception ..." > I wanted to avoid continually repeating this rather long phrase. > > [GF4] I'll read when ready - I expect that issues will be addressed, >>>>> >>>>> >>>>>> === >>>>>> 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. > > [BB3] The co-authors have decided we'd rather not promote the section > no. of the middlebox section. Richard pointed out there could be > x-refs from code and/or test results into specific section numbers. > > We added a sentence at the end of the abstract: "The document also > specifies the treatment of this updated TCP wire protocol by middleboxes." > And, in the doc roadmap, we have promoted this subsection up so it > gets a mention. > [GF4] Sounds like a useful compromise that I think is expected to resolve the issue. > >>>>> >>>>> 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 >> > > -- > ________________________________________________________________ > Bob Briscoehttp://bobbriscoe.net/ Gorry
- [tcpm] Reviewed for draft-ietf-tcpm-accurate-ecn-… Gorry Fairhurst
- Re: [tcpm] Reviewed for draft-ietf-tcpm-accurate-… Michael Tuexen
- Re: [tcpm] Reviewed for draft-ietf-tcpm-accurate-… Bob Briscoe
- Re: [tcpm] Reviewed for draft-ietf-tcpm-accurate-… Gorry Fairhurst
- Re: [tcpm] Reviewed for draft-ietf-tcpm-accurate-… Bob Briscoe
- Re: [tcpm] Reviewed for draft-ietf-tcpm-accurate-… Gorry Fairhurst
- Re: [tcpm] Reviewed for draft-ietf-tcpm-accurate-… Bob Briscoe
- Re: [tcpm] Reviewed for draft-ietf-tcpm-accurate-… Gorry Fairhurst