Re: [Idr] WG Adoption call for draft-spaghetti-idr-bgp-sendholdtimer-09 (2/28/2023 to 3/14/2023)

Jeffrey Haas <jhaas@pfrc.org> Wed, 08 March 2023 15:11 UTC

Return-Path: <jhaas@pfrc.org>
X-Original-To: idr@ietfa.amsl.com
Delivered-To: idr@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 49811C15153D for <idr@ietfa.amsl.com>; Wed, 8 Mar 2023 07:11:41 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.9
X-Spam-Level:
X-Spam-Status: No, score=-1.9 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_PASS=-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 cVxPi3Mp30CO for <idr@ietfa.amsl.com>; Wed, 8 Mar 2023 07:11:39 -0800 (PST)
Received: from slice.pfrc.org (slice.pfrc.org [67.207.130.108]) by ietfa.amsl.com (Postfix) with ESMTP id 84E1CC151543 for <idr@ietf.org>; Wed, 8 Mar 2023 07:11:39 -0800 (PST)
Received: from smtpclient.apple (104-10-90-238.lightspeed.livnmi.sbcglobal.net [104.10.90.238]) by slice.pfrc.org (Postfix) with ESMTPSA id AD0551E037; Wed, 8 Mar 2023 10:11:38 -0500 (EST)
Content-Type: text/plain; charset="us-ascii"
Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.120.41.1.1\))
From: Jeffrey Haas <jhaas@pfrc.org>
In-Reply-To: <alpine.DEB.2.20.2303081108250.2636@uplift.swm.pp.se>
Date: Wed, 08 Mar 2023 10:11:38 -0500
Cc: Robert Raszuk <robert@raszuk.net>, idr@ietf.org
Content-Transfer-Encoding: quoted-printable
Message-Id: <9505159A-F31F-4C1C-84BB-C9A2E7E46ED4@pfrc.org>
References: <BYAPR08MB4872FD426205CAC6F82D22BEB3AD9@BYAPR08MB4872.namprd08.prod.outlook.com> <CAOj+MMHF9G5-CmGPJpWja=1kgBrV=EYtzyhQr9La1722=D+ugA@mail.gmail.com> <m2edq1ac7s.wl-randy@psg.com> <ZAZSyywxxg0HkaDw@snel> <CAOj+MMGiB8iiqKbj40kZsSFAQXCQ+baGQWuA7oQ1D0qF5aygeQ@mail.gmail.com> <alpine.DEB.2.20.2303070725390.2636@uplift.swm.pp.se> <CAOj+MMGUfxd1LLta9=_HU+uMKcbVVE6ijkG84-ST0LDo3m2MYQ@mail.gmail.com> <alpine.DEB.2.20.2303070953000.2636@uplift.swm.pp.se> <CAOj+MMF8gELjxXB=kmn3eTu8X96vP7ueOTSA6Q+V_086wfO=NQ@mail.gmail.com> <alpine.DEB.2.20.2303071107360.2636@uplift.swm.pp.se> <3caaea46-cc66-f084-ec9b-98783d6daa49@foobar.org> <CAOj+MME=-drWX_1=9T8jqBGvEfwB59PmjLoh65i8wvdppKFKYg@mail.gmail.com> <alpine.DEB.2.20.2303071224040.2636@uplift.swm.pp.se> <CAOj+MMFc29DOAL6QK3u9gzPBQPv3wRdhTRHRPD_1ABebtuX0=w@mail.gmail.com> <alpine.DEB.2.20.2303071246590.2636@uplift.swm.pp.se> <DB2B7372-D021-4E86-AF83-C6A55EF72D75@pfrc.org> <alpine.DEB.2.20.2303081108250.2636@uplift.swm.pp.se>
To: Mikael Abrahamsson <swmike@swm.pp.se>
X-Mailer: Apple Mail (2.3696.120.41.1.1)
Archived-At: <https://mailarchive.ietf.org/arch/msg/idr/VPlg_IExvJKCYJpmLX-b7m7-Xes>
Subject: Re: [Idr] WG Adoption call for draft-spaghetti-idr-bgp-sendholdtimer-09 (2/28/2023 to 3/14/2023)
X-BeenThere: idr@ietf.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: Inter-Domain Routing <idr.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/idr>, <mailto:idr-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/idr/>
List-Post: <mailto:idr@ietf.org>
List-Help: <mailto:idr-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/idr>, <mailto:idr-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 08 Mar 2023 15:11:41 -0000


> On Mar 8, 2023, at 5:14 AM, Mikael Abrahamsson <swmike@swm.pp.se> wrote:
> 
> On Tue, 7 Mar 2023, Jeffrey Haas wrote:
> 
>> Most typically it will be an application issue.  In some cases, it may be a TCP issue or other issue that results in dropped TCP ack packets.
>> 
>> The sender can't know.  It just knows that it can no longer send.
> 
> Sure. But if it's a connectivity problem and the session can't transmit keepalives and the receiving application is functioning normally then it'll notice the lack of bgp keepalives and drop the session because of that.

The issue may be unidirectional.  You may receive keepalives without being able to send anything.
(Indirectly an argument for BFD.)

> 
>> To use a previously supplied example, if the BGP session is stable and is only sending 19 byte keepalives every N seconds with a 32k window that started out empty, and the window isn't moving due to acks not being received, it will take a VERY long time before the sender blocks.
> 
> That's correct, but in that case we don't have much real data we wanted to send anyway, so it means the other side is still kind of "in sync" with us.

That's one way to picture the magnitude of the problem, if it makes you happy.

If a single withdraw is in that clogged pipe, and it's for a prefix that represents 20% of your traffic, how do you feel about it?


> 
>> However, if the ack is sent out in a tcp packet, but isn't acknowledged within the desired window, the session can be bounced without waiting on the block.
> 
> I see the user-timeout being brought up again. Is my understanding of how RCP works, flawed?
> 
> application1->socket1->tcpstack1->network->tcpstack2->socket2->application2
> 
> If application2 stops reading from its socket, then tcpstack2 buffer will fill up, it'll then reduce the window to 0,

Let's stop here since we're at the differentiating point for the two parallel discussions.

In one case, it's not necessary for a sender to block due to lack of buffer.  TCP can provide the necessary information via user-timeout that the receiver is not consuming the things sent to it.  This is the user-timeout methodology.

In the other case, the sender pays attention to whether it's blocked or not.  This will inevitably require the receiver not draining its socket (or dropped acks) and eventually zero-windowing (or close enough depending on the implementation) and the sender can't push a new update onto the socket.  This is the sendholdtimer methodology.

Both approaches will eventually tell you that a receiver isn't draining.  However, the sensitivity to detecting when that happens varies quite a bit across the two proposals.  The sendholdtimer proposal also depends heavily on expected traffic patterns and has some less consistent behavior based on size of PDUs.  (If your window has 19 bytes available, pushing a keepalive in a sluggish connection will reset the timer, but you can't push a single update to similarly reset the timer.)


> My understanding is that tcpstack1<->tcpstack2 will gladly acknowledge packets/tcp-keepalives forever in this wedged state, so how does user-timeout help?

Acknowledgment generally moves the window.  Things like tcp keepalive will happily work without the window budging, but will help with the cases where the failure is half duplex.  Same for BFD.


> From my understanding tcpstack1 only knows the packet has been received by tcpstack2, it has no idea if it's reached application2 or not and user-timeout doesn't help that?

A fault with both methods is you get no hint about application consumption based on window availability.  You simply know that stuff is sent and received.  For all you know, the bgp update has been received from the socket, then buffered by sending using RFC 1149.  

Addressing "has the application consumed the data it was sent" is out of scope here.  If you want it in scope, you'll require an explicit BGP ACK message.

-- Jeff