SMTP Service Extension for Command Pipelining
RFC 2197

Document Type RFC - Draft Standard (September 1997; No errata)
Obsoleted by RFC 2920
Obsoletes RFC 1854
Was draft-freed-smtp-pipeline (individual)
Last updated 2013-03-02
Stream Legacy
Formats plain text pdf html bibtex
Stream Legacy state (None)
Consensus Boilerplate Unknown
RFC Editor Note (None)
IESG IESG state RFC 2197 (Draft Standard)
Telechat date
Responsible AD (None)
Send notices to (None)
Network Working Group                                       N. Freed
Request for Comments: 2197                                  Innosoft
Obsoletes: 1854                                       September 1997
Category: Standards Track

                         SMTP Service Extension
                         for Command Pipelining

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

1.  Abstract

   This memo defines an extension to the SMTP service whereby a server
   can indicate the extent of its ability to accept multiple commands in
   a single TCP send operation. Using a single TCP send operation for
   multiple commands can improve SMTP performance significantly.

   The present document is an updated version of RFC 1854 [3].  Only
   textual and editorial changes have been made; the protocol has not
   changed in any way.

2.  Introduction

   Although SMTP is widely and robustly deployed, certain extensions may
   nevertheless prove useful. In particular, many parts of the Internet
   make use of high latency network links.  SMTP's intrinsic one
   command-one response structure is significantly penalized by high
   latency links, often to the point where the factors contributing to
   overall connection time are dominated by the time spent waiting for
   responses to individual commands (turnaround time).

   In the best of all worlds it would be possible to simply deploy SMTP
   client software that makes use of command pipelining: batching up
   multiple commands into single TCP send operations. Unfortunately, the
   original SMTP specification [1] did not explicitly state that SMTP
   servers must support this.  As a result a non-trivial number of
   Internet SMTP servers cannot adequately handle command pipelining.
   Flaws known to exist in deployed servers include:

Freed                       Standards Track                     [Page 1]
RFC 2197                 SMTP Service Extension           September 1997

    (1)   Connection handoff and buffer flushes in the middle of
          the SMTP dialogue.  Creation of server processes for
          incoming SMTP connections is a useful, obvious, and
          harmless implementation technique. However, some SMTP
          servers defer process forking and connection handoff
          until some intermediate point in the SMTP dialogue.
          When this is done material read from the TCP connection
          and kept in process buffers can be lost.

    (2)   Flushing the TCP input buffer when an SMTP command
          fails. SMTP commands often fail but there is no reason
          to flush the TCP input buffer when this happens.
          Nevertheless, some SMTP servers do this.

    (3)   Improper processing and promulgation of SMTP command
          failures. For example, some SMTP servers will refuse to
          accept a DATA command if the last RCPT TO command
          fails, paying no attention to the success or failure of
          prior RCPT TO command results. Other servers will
          accept a DATA command even when all previous RCPT TO
          commands have failed. Although it is possible to
          accommodate this sort of behavior in a client that
          employs command pipelining, it does complicate the
          construction of the client unnecessarily.

   This memo uses the mechanism described in [2] to define an extension
   to the SMTP service whereby an SMTP server can declare that it is
   capable of handling pipelined commands. The SMTP client can then
   check for this declaration and use pipelining only when the server
   declares itself capable of handling it.

2.1.  Requirements notation

   This document occasionally uses terms that appear in capital letters.
   When the terms "MUST", "SHOULD", "MUST NOT", "SHOULD NOT", and "MAY"
   appear capitalized, they are being used to indicate particular
   requirements of this specification. A discussion of the meanings of
   these terms appears in RFC 2119 [4].

3.  Framework for the Command Pipelining Extension

   The Command Pipelining extension is defined as follows:

    (1)   the name of the SMTP service extension is Pipelining;

    (2)   the EHLO keyword value associated with the extension is
          PIPELINING;

Freed                       Standards Track                     [Page 2]
RFC 2197                 SMTP Service Extension           September 1997

    (3)   no parameter is used with the PIPELINING EHLO keyword;

    (4)   no additional parameters are added to either the MAIL
          FROM or RCPT TO commands.

    (5)   no additional SMTP verbs are defined by this extension;
          and,

    (6)   the next section specifies how support for the
Show full document text