Re: [tcpm] RFC793bis AD review

Yuchung Cheng <ycheng@google.com> Fri, 02 July 2021 01:15 UTC

Return-Path: <ycheng@google.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 025E73A1292 for <tcpm@ietfa.amsl.com>; Thu, 1 Jul 2021 18:15:49 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -17.6
X-Spam-Level:
X-Spam-Status: No, score=-17.6 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, ENV_AND_HDR_SPF_MATCH=-0.5, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001, USER_IN_DEF_DKIM_WL=-7.5, USER_IN_DEF_SPF_WL=-7.5] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=google.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 KVYVz7XVSHtr for <tcpm@ietfa.amsl.com>; Thu, 1 Jul 2021 18:15:44 -0700 (PDT)
Received: from mail-wm1-x32b.google.com (mail-wm1-x32b.google.com [IPv6:2a00:1450:4864:20::32b]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 32F383A128C for <tcpm@ietf.org>; Thu, 1 Jul 2021 18:15:44 -0700 (PDT)
Received: by mail-wm1-x32b.google.com with SMTP id l1so5631220wme.4 for <tcpm@ietf.org>; Thu, 01 Jul 2021 18:15:43 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=xmzfJqFxQVQAedPLtYPOi4qeqQwkDMeRHWqAepq+LN8=; b=UHKXZWA2sg6lXMMZ1Z+ZL3kx+UnGC7tA4r7RVTw30XaIJnE0yHU481zD/JbUx0SFiu DUtiwkS+iYgp0ZeX8vwrmtpdZmMQkxd8C+k2AhFtuR1CjlhscbHfaUncZbT5fqdg49vL kO45OAB4akbxHlpr0wNTTynxdRaUBWSQKuFmoKcpiy9FaRN1ykhSzTMxD1wEqQ90fcTv SL4/yRr8ztMlLqvSj9WMekIUBVziMmS7+rPMSAtsiNwS/GjYHPlGz1EzqPzjJ4pOKuZ4 T6TcjzAFXiiAK9sD3yb0f44yXwOH1kSnE05qYEx8AeqREoDYolGwOpScqiaIkuiNEZXB LToQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=xmzfJqFxQVQAedPLtYPOi4qeqQwkDMeRHWqAepq+LN8=; b=C29gbiL8voiFZHZP6daCpkOHt2+c9sYE8oJUwTRUqGTkHT1nurfYCnbLkE/Ejx1T5F 7LqiL2rTBDZO2rkyYn05zOJHzheERcRQ4gvlouWM+JCo8+k0HfPOLvr3HwEBkU1QE2Lb jo2Inqi0hhDtr4/pj7gReQuB15XChko6+sKUb4WgDuut1TYXVgt6a4JeZLzt55H9lacd LE96ag3A4/KAIsCY4kS14fWsDefe9IZg2wosu7GUF5b3H/WNmq/epkr/OmdxKj3EzqOH Tj1UEtANUBdPaLbSUbRduSw9rmaxu5PV96GQ2v6EyAcyN8zYTlEjg/9PzuQ4/iliAQqX WFoQ==
X-Gm-Message-State: AOAM531ASz8jXx8rBCZS6feRBorNAYn2f/MorZcRhLssxRWNM99IqFbY YgR6xe7NmBvUZJ1RW7pk8xB4Oj7CtJjC0G/WRqlnEw==
X-Google-Smtp-Source: ABdhPJxwTw4iOPpqNKiwPY7Kd7N31fGDsdWefZi1xl3qiJN9DwEhGpdc6DoXRYzBovBuGGiR8FAkVwZxYdG8CKEvaOI=
X-Received: by 2002:a1c:7204:: with SMTP id n4mr13815520wmc.7.1625188537337; Thu, 01 Jul 2021 18:15:37 -0700 (PDT)
MIME-Version: 1.0
References: <CAM4esxQggOyqpO4RhE151En2mATce8jL0s4dt6CEeqEAqaXkQw@mail.gmail.com> <59e1d10e-542c-3f1f-7098-4f1d8932da5b@mti-systems.com> <CAM4esxQRstfNwbU=jQiK6V_P_JF9nQiuZuBRRgGmnHbKzqJqsA@mail.gmail.com>
In-Reply-To: <CAM4esxQRstfNwbU=jQiK6V_P_JF9nQiuZuBRRgGmnHbKzqJqsA@mail.gmail.com>
From: Yuchung Cheng <ycheng@google.com>
Date: Thu, 1 Jul 2021 18:15:00 -0700
Message-ID: <CAK6E8=eJeOP+O6YQiYqojg9Qh2eVxOq7F_BNxX42wRX6vKX1fg@mail.gmail.com>
To: Martin Duke <martin.h.duke@gmail.com>
Cc: Wesley Eddy <wes@mti-systems.com>, "tcpm@ietf.org Extensions" <tcpm@ietf.org>, draft-ietf-tcpm-rfc793bis.all@ietf.org, Neal Cardwell <ncardwell@google.com>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Archived-At: <https://mailarchive.ietf.org/arch/msg/tcpm/e2BXgzhLmhaJtedJ9BGoZNat09s>
Subject: Re: [tcpm] RFC793bis AD review
X-BeenThere: tcpm@ietf.org
X-Mailman-Version: 2.1.29
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: Fri, 02 Jul 2021 01:15:49 -0000

On Thu, Jul 1, 2021 at 11:25 AM Martin Duke <martin.h.duke@gmail.com> wrote:
>
>
>
> On Wed, Jun 30, 2021 at 2:50 PM Wesley Eddy <wes@mti-systems.com> wrote:
>>
>> Here are my replies on each finding, with proposed changes to make sure you agree, before cutting another revision of the document:
>>
>>
>> On 6/24/2021 4:12 PM, Martin Duke wrote:
>>
>>
>> (Document Header) Please update the Intended Status to "Internet Standard".
>>
>> There doesn't seem to be a way to force this in xml2rfc3; the 'category' attribute is set to 'std' (Standards Track) and there's no distinction (this looks consistent with other recent Internet Standard RFCs).
>>
>> So, I think no change is needed on this.
>
>
> OK
>
>>
>>
>> (3.8.3) R1 and R2 can be measured in retransmissions or seconds; the proposed bounds are in retransmissions for R1 and seconds for R2. So if I have a time-based R1, should that be 3? If I have a retransmission based R2, should I compare that to the value of RTO somehow?
>>
>> This is heritage from RFC 1122.  The text on R1 mentions "at the current RTO", so I think RO is definitely the intended conversion factor, but since you asked, maybe it's not clear enough?  Do you think maybe in part (a) of 3.8.3 we could just change:
>>
>>     R1 and R2 might be measured in time units or as a count of retransmissions.
>>
>> to:
>>
>>     R1 and R2 might be measured in time units or as a count of retransmissions (with the current RTO as a conversion factor, if needed).
>>
> I like that, thanks.
hmm but some would convert to time by simply <count>*<rto> w/o
factoring exponential backoffs. how about

"R1 and R2 might be measured in time units or as a count of
retransmissions (with the current RTO and corresponding backoffs as a
conversion factor, if needed)."


>
>>
>>
>> (3.8.5)  This section is unclear as to whether the sender can cause the Urgent Pointer to recede (move to the left), and if so, if that MUST be reported to the application like a pointer advance.
>>
>> Receding looks the same as advancing so much that it wraps.  So, if not already in urgent mode, that would seem to cause a change to urgent mode, while if not already in urgent mode, that would fall under the existing rule of:
>>
>>     If the urgent pointer is updated while the user is in "urgent mode", the update will be invisible to the user.
>>
>> So ... also given that the use of urgent pointer is deprecated anyways and we don't want to cause changes to TCP in this doc, I'm proposing we do nothing to clarify this, if you agree?
>
> I don't think
>
> SEQ 5000 URG 3000
> SEQ 5001 URG 1500
>
> would have a common-sense interpretation that the urg ptr was now 7501 + 2^32. I share your grumpiness about sweating the useless urgent pointer, but it would appear there is a gap in the spec and that in principle these recedes could exist in the wild. This spec mostly matters for new implementations; maybe the safest thing is for those new implementations to prepare to handle a receding pointer, but that senders MUST NOT recede. I would welcome a quick question to the WG if that logic seems spurious to you.
>
> Meanwhile, it appears we've uncovered a contradiction! In 3.8.5 we have
>
> If the urgent pointer is updated while the user is in "urgent mode", the
>    update will be invisible to the user.
>
> A TCP implementation MUST (MUST-32) inform the application layer
>    asynchronously whenever it receives an Urgent pointer and there was
>    previously no pending urgent data, or whenever the Urgent pointer
>    advances in the data stream.
>
>  If the latter text is correct, AND we decide to allow receding, we should decide what to do with recedes here.
>>
>> (3.8.6.1)
>>
>> The sending TCP peer must be prepared to accept from the user and
>>    send at least one octet of new data even if the send window is zero.
>>    The sending TCP peer must regularly retransmit to the receiving TCP
>>    peer even when the window is zero
>>
>> Please clarify that these probes only happen when there is new data, if that's the intent.
>>
>> The "accept from the user" part means that new data was written already, right?  If the user doesn't write data into the socket, there's nothing to be sent.
>
> I have been messing with QUIC too long and may have forgotten how this works. But IIRC, this text kind of confuses a few different kinds of transmissions with zero window probes. It might be helpful to actually define "zero window probe" -- a segment of one byte of data designed to elicit an ack with a window update. The retransmission discussion is related but somewhat confusing as currently written. There are four zero-window scenarios that I can see.
>
> 1) If there is outstanding in-window data, we will get ACKs so there is no need for a ZWP.
>
> 2) No send buffer data, but the application generates data while in zero-window. Clearly, the spec says TCP accepts a byte and sends it.
>
> 3) TCP has previously refused application data due to window restrictions, and now we're in zero-window. TCP needs to wake the app to send again so that we have material for ZWP.
>
> 4) TCP accepted some data, held it for Nagle, and then the receiver reneged; or all in-flight data is now out of window due to reneging. This data ought to constitute a ZWP whether or not it is strictly a "retransmission".
>
> If you believe all of my statements correct, I am happy to propose alternate text that is not as wordy as the above.,

Waking up the application to take one more byte to probe the zero
window does not seem necessary since sending an older sequence will do
the job. Further, allowing such over-commit if the send buffer is full
seems extra complexity w/o practical benefit. How about:

"The sending TCP peer must regularly transmit new data (if available)
or retransmit to the receiving TCP peer even when the window is zero".
Let the implementation decide the best strategy as long as the
functionality works.




>
>
> (3.8.6.1) the first paragraph says
>
> Two minutes is recommended for the retransmission interval when the
>    window is zero.
>
> but the last one says
>
> The transmitting host SHOULD send the first zero-window probe when a
>    zero window has existed for the retransmission timeout period (SHLD-
>    29) (Section 3.8.1), and SHOULD increase exponentially the interval
>    between successive probes (SHLD-30).
>
> so is it 2 min or the RTO?
>
> Good question ... The first sentence comes from 793 and the other from 1122.  I think we should erase the first sentence, since the 1122 intent seems to be updating this (replacing the hard-coded 2 minute heuristic with the RTO one which adapts to reality).  Do you agree?
>
> Yes, I agree.
>>
>>
>> (3.8.6.2.1) If I read this algorithm correctly, an un-pushed send buffer of < MSS, if D < Fs*Max(SND.WND), will sit there indefinitely without
>> being transmitted; is this intentional?
>>
>> This comes from 1122.  I think the key to preventing what you mention is this part of the preceding paragraph:
>>
>>   To avoid a resulting deadlock, it is necessary to have a
>>    timeout to force transmission of data, overriding the SWS avoidance
>>    algorithm.
>>
>> So, SWS avoidance is not supposed to keep a sender waiting forever for the receiver to possibly advertise a bigger window; the sender is supposed to wake up and just send eventually.
>
>
> Yes, but the override timeout is embedded in step (4), which applies PUSH as a condition. Maybe that PUSH condition is incorrect?
>>
>>
>> (3.8.2) and (3.8.6.3) Should RFC 5681 be a normative reference, given the congestion control requirement? If not, (3.8.6.3) shouldn't require the reader to go there to fully implement delayed ACKs. I suggest
>>
>> s/an ACK for at least every second segment/an ACK for least every 2*MSS bytes of data
>>
>> to fully state what is in 5681.
>>
>> Yeah, I think 5681 should be normative (since we also rely on the for descriptions of slow start, etc. that we didn't try to duplicate within 793bis), but we should also fix the "second segment" sentence to match more exactly the text in 5681 about 2*RMSS.
>
>
> OK, there's currently the pointer to 5681 about sub-MSS stuff, so it's technically correct, but really clunky to force people to go there when it's so easy to state correctly. I think we agree.
>>
>>
>> <snip>
>>
>>
>> (3.10, OPEN/LISTEN)
>>
>> If active and the remote socket is specified, then change the
>>          connection from passive to active,
>>
>> I think you mean "If passive"?
>>
>> Actually, I think to be more clear this should say:
>>
>> "If the OPEN call is active ...", since it's referring to the case where an active OPEN is called when the socket is in LISTEN (passive).
>>
>> It's technically correct currently (just not very clear), if you read the "If active" as referring to the OPEN call rather than the socket (and it must be that way since a socket in the LISTEN state is the result of a passive OPEN).
>
>
> Yes, let's clarify
>
>>
>> (3.10, SEGMENT ARRIVES/LISTEN) Step 4 mentions RST but those have already been handled in Step 1.
>>
>> Yeah, you're definitely right, and in both cases the action is to ignore it, so this part of step 4 is irrelevant, but at least consistent.
>>
>> It looks like this is an errata to file on 793; should we do that quickly and then fix this doc accordingly?
>
> If that is better for your process, then sure.
>
>>
>> NITS:
>>
>> <snip>
>>
>>
>> (3.1, Options) "
>>
>>    Options: [TCP Option]; Options#Size == (DOffset-5)*32; present only
>>    when DOffset > 5.
>>
>> What is this notation?
>>
>> It is a little odd, but comes from reference [61] for draft-mcquistin-augmented-ascii-diagrams-08.
>
>
> OK
>
>>
>> <snip>
>>
>> I'm good with changing all of these above.
>>
>> Thank you for the detailed review!
>
> _______________________________________________
> tcpm mailing list
> tcpm@ietf.org
> https://www.ietf.org/mailman/listinfo/tcpm