[tcpm] Nagle Algorithm and Delayed ACKs

Thomas Narten <narten@us.ibm.com> Fri, 24 July 2009 19:53 UTC

Return-Path: <narten@us.ibm.com>
X-Original-To: tcpm@core3.amsl.com
Delivered-To: tcpm@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id C08AA3A69A7 for <tcpm@core3.amsl.com>; Fri, 24 Jul 2009 12:53:59 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -6.599
X-Spam-Level:
X-Spam-Status: No, score=-6.599 tagged_above=-999 required=5 tests=[BAYES_00=-2.599, RCVD_IN_DNSWL_MED=-4]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 5cRSh2daqQsT for <tcpm@core3.amsl.com>; Fri, 24 Jul 2009 12:53:58 -0700 (PDT)
Received: from e3.ny.us.ibm.com (e3.ny.us.ibm.com [32.97.182.143]) by core3.amsl.com (Postfix) with ESMTP id 5B8D33A67E4 for <tcpm@ietf.org>; Fri, 24 Jul 2009 12:53:32 -0700 (PDT)
Received: from d01relay02.pok.ibm.com (d01relay02.pok.ibm.com [9.56.227.234]) by e3.ny.us.ibm.com (8.13.1/8.13.1) with ESMTP id n6OJkXnK007575 for <tcpm@ietf.org>; Fri, 24 Jul 2009 15:46:33 -0400
Received: from d01av01.pok.ibm.com (d01av01.pok.ibm.com [9.56.224.215]) by d01relay02.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id n6OJqRf8258256 for <tcpm@ietf.org>; Fri, 24 Jul 2009 15:52:27 -0400
Received: from d01av01.pok.ibm.com (loopback [127.0.0.1]) by d01av01.pok.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id n6OJqQXh030584 for <tcpm@ietf.org>; Fri, 24 Jul 2009 15:52:26 -0400
Received: from cichlid.raleigh.ibm.com (sig-9-65-207-1.mts.ibm.com [9.65.207.1]) by d01av01.pok.ibm.com (8.12.11.20060308/8.12.11) with ESMTP id n6OJqPnN030447 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for <tcpm@ietf.org>; Fri, 24 Jul 2009 15:52:26 -0400
Received: from cichlid (localhost [127.0.0.1]) by cichlid.raleigh.ibm.com (8.14.3/8.12.5) with ESMTP id n6OJqMVZ006081 for <tcpm@ietf.org>; Fri, 24 Jul 2009 15:52:24 -0400
Message-Id: <200907241952.n6OJqMVZ006081@cichlid.raleigh.ibm.com>
To: tcpm@ietf.org
Date: Fri, 24 Jul 2009 15:52:22 -0400
From: Thomas Narten <narten@us.ibm.com>
Subject: [tcpm] Nagle Algorithm and Delayed ACKs
X-BeenThere: tcpm@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: TCP Maintenance and Minor Extensions Working Group <tcpm.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/tcpm>, <mailto:tcpm-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/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, 24 Jul 2009 19:53:59 -0000

It has been long known that the Nagle Algorithm and Delayed ACKs
combine in ways that can be problematic. Googling around, I found
Stewart Chesire's writeup
(http://www.stuartcheshire.org/papers/NagleDelayedAck/) as well as an
ancient (!) ID from Greg Minshall
(http://lists.w3.org/Archives/Public/ietf-discuss/1998Dec/0025.html)

The TCP_NODELAY socket option can be used to turn off the Nagle
Algorithm, but applications have to know to enable it -- which they
often don't know, until after they've run into problems and traced
them down to the specific problem.  This can be a long and expensive
process (e.g., involve help desk calls).

What is the current thinking on this problem? Am I right in assuming
that:

 - the Nagle Algorithm is still a SHOULD to implement
 - Delayed ACKs are also a SHOULD to implement?
 - Most everyone provides a TCP_NODELAY type socket option?

Is that all there is to it? Is this considered good enough?

Have there not been in any attempts over the last ten years to update
the above recommendations to make them work together better without an
application needing to set the TCP_NODELAY option, in those cases
where it matters?

Thomas