Re: [tcpm] RFC793bis AD review

Martin Duke <martin.h.duke@gmail.com> Mon, 12 July 2021 21:50 UTC

Return-Path: <martin.h.duke@gmail.com>
X-Original-To: tcpm@ietfa.amsl.com
Delivered-To: tcpm@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 51C153A0E89; Mon, 12 Jul 2021 14:50:54 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.097
X-Spam-Level:
X-Spam-Status: No, score=-2.097 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id rcR0pQrb8IpQ; Mon, 12 Jul 2021 14:50:49 -0700 (PDT)
Received: from mail-il1-x12d.google.com (mail-il1-x12d.google.com [IPv6:2607:f8b0:4864:20::12d]) (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 6DECA3A106E; Mon, 12 Jul 2021 14:50:36 -0700 (PDT)
Received: by mail-il1-x12d.google.com with SMTP id h3so21057207ilc.9; Mon, 12 Jul 2021 14:50:36 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=5ahkeDQS6b2VXqGf7I8XH3mwP77out6c11VSaI156+E=; b=eCddSckbN2gOJHm45LnWgIYZVZkiqZTdcbC0H3SPNQDn/Htk1GJZHbOusrrTLEVT0V ZDhMs8UU6gyPJOhLZKup2z0L6Vmrf8JdvEXZCyNYzIgWGuvqr68YhNMIK6orh7OO9NSy yjyyZsoPDM1CRnsvmwtm5ghB6ibmOhrkT4Q8a8v5JZg9H9N3VWR9OjEE6TVrYd1Zr+PL 8rDbglHle1cC6xi/bwpax8WWKBXcfLa9hn+K3AjOpoisLdJLEmeNmsSx61SiLU2GMPVQ kD9PLaixi3YtjufnG2F+0SR5j1QLGvNWgjKLRtBGptfZqS7g07pnn1rYSQ3Q1gv31/Ve YO0A==
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; bh=5ahkeDQS6b2VXqGf7I8XH3mwP77out6c11VSaI156+E=; b=KiTb4XubmQOLua/oNzz8DdwnfKLZFHuALu0ABOpeH7e/PFghMEX1oiWnSud9z4OJhN JHn5t7zUkN+X1+cpwy6Y10MhqNOvwflnk5Ccn/QYLzUwekWZeqW3EAgMVW4T8Qs5X8Hd 2LOe61iT9y5pG1OTVFzSlxPn8KfD+CIYs4h/pVF8B/BXIalaD9MTHKZEGrOteXMWbxj6 Wqo+xrGoxC4SIM2tOZIPevGlMwoCAPcYdvVpLjBgRtFkG7Fyf9HCPwqkIiHw/YbQuGDn UBqPDc3MWPdOkidM6Nqm8NZYnPODgb0Mrg8uBqDVSULIh085Rw6PQdmukID0pRFaI+0c /Lqw==
X-Gm-Message-State: AOAM530VlylqUTuzbQtoi5XmdZVylOdXxzNWzcSPGR8SWvQF+ghUSB0h 39tHh6YBoggqX+lizmR0MBRI0HLqRFI54prF8nQ=
X-Google-Smtp-Source: ABdhPJwUDJT2QTOaL3sKZUtncFfOAFdc4+TsJp0v+MD8V7zdW7ErBSBw6IomhjhFSTd+FxCJbTx3o7brq134+OMduTA=
X-Received: by 2002:a92:cd8a:: with SMTP id r10mr578638ilb.287.1626126635135; Mon, 12 Jul 2021 14:50:35 -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: Martin Duke <martin.h.duke@gmail.com>
Date: Mon, 12 Jul 2021 14:50:24 -0700
Message-ID: <CAM4esxTP6oUsHK9Qrc-Q3X0914XkmptV2iOjVJEsHA09ZUsDBg@mail.gmail.com>
To: Wesley Eddy <wes@mti-systems.com>
Cc: draft-ietf-tcpm-rfc793bis.all@ietf.org, "tcpm@ietf.org Extensions" <tcpm@ietf.org>
Content-Type: multipart/alternative; boundary="00000000000072782705c6f41c8e"
Archived-At: <https://mailarchive.ietf.org/arch/msg/tcpm/o1fIk5OHLcC41klS2yAX5JTtCLY>
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: Mon, 12 Jul 2021 21:51:02 -0000

Wes,

It looks like draft-24 of 793bis gets it all, except:

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.
>

I'm not holding up Last Call over this, but please fix it before IESG
Evaluation.

Thanks!


On Thu, Jul 1, 2021 at 11:24 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.
>
>
>>
>> (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.,
>
>
> (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 <https://datatracker.ietf.org/doc/html/draft-ietf-tcpm-rfc793bis-23#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!
>>
>