Re: revision RFC 2001 (draft-ietf-tcpimpl-cong-control-00.txt)

Andi Kleen <ak@muc.de> Thu, 13 August 1998 02:50 UTC

Return-Path: <owner-tcp-impl@relay.engr.sgi.com>
Message-ID: <19980813045030.A1120@kali.lrz-muenchen.de>
Date: Thu, 13 Aug 1998 04:50:30 +0200
From: Andi Kleen <ak@muc.de>
To: Kacheong.Poon@eng.Sun.COM, Andi Kleen <ak@muc.de>
Cc: David Borman <dab@bsdi.com>, tcp-impl@cthulhu.engr.sgi.com, mathis@psc.edu
Subject: Re: revision RFC 2001 (draft-ietf-tcpimpl-cong-control-00.txt)
References: <k2iujx3mw9.fsf@zero.aec.at> <Roam.SIMC.2.0.6.902971866.24899.kcpoon@jurassic>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
X-Mailer: Mutt 0.93i
In-Reply-To: <Roam.SIMC.2.0.6.902971866.24899.kcpoon@jurassic>; from Kacheong.Poon@eng.Sun.COM on Thu, Aug 13, 1998 at 03:31:06AM +0200
Sender: owner-tcp-impl@relay.engr.sgi.com
Precedence: bulk
Status: RO
Content-Length: 1246
Lines: 40

On Thu, Aug 13, 1998 at 03:31:06AM +0200, Kacheong.Poon@eng.Sun.COM wrote:
> > Most BSD implementation (at least Free/NetBSD) don't have the problem, 
> > because they simply send an ACK every second packet, no matter how big
> > the packets were (this means BSD will send more acks than linux in some
> > situations)
> 
> I just got the latest FreeBSD source.  The following part of code has not
> changed.

[...]

You're right, FreeBSD does not do this. I just looked at the NetBSD source
and somehow believed FreeBSD did the same. Seems I was wrong.

In NetBSD the TCP_SETUP_ACK macro controls the ACK behaviour

#define	TCP_SETUP_ACK(tp, ti) \
do { \
	if ((tp)->t_flags & TF_DELACK || \
	    (tcp_ack_on_push && (ti)->ti_flags & TH_PUSH)) \
		tp->t_flags |= TF_ACKNOW; \
	else \
		TCP_SET_DELACK(tp); \
} while (0)


And then in the fast packet receive path:

	TCP_SETUP_ACK(tp, ti);
	if (tp->t_flags & TF_ACKNOW)
		(void) tcp_output(tp);

This means FreeBSD has a similar problem to Linux when the path changes
and the MTU shrinks during a connection then it'll go into delayed ACK
mode even for bulk data. NetBSD fixed it. The FreeBSD algorithm seems to
match the original 4.4BSD-Lite code as described in Stephens TCP/IP Ill. V.2

-Andi