SMTP Service Extension for Command Pipelining
RFC 1854

Document Type RFC - Proposed Standard (October 1995; No errata)
Obsoleted by RFC 2197
Last updated 2013-03-02
Stream IETF
Formats plain text pdf htmlized bibtex
Stream WG state (None)
Document shepherd No shepherd assigned
IESG IESG state RFC 1854 (Proposed Standard)
Consensus Boilerplate Unknown
Telechat date
Responsible AD (None)
Send notices to (None)
Network Working Group                                           N. Freed
Request For Comments: 1854                  Innosoft International, Inc.
Category: Standards Track                          A. Cargille, WG Chair
                                                            October 1995

                         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.

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.

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:

 (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

Freed & Cargille            Standards Track                     [Page 1]
RFC 1854                    SMTP Pipelining                 October 1995

       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.

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

    (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
          extension affects the behavior of a server and client
          SMTP.

Freed & Cargille            Standards Track                     [Page 2]
RFC 1854                    SMTP Pipelining                 October 1995

2.  The Pipelining Service Extension

   When a client SMTP wishes to employ command pipelining, it first
   issues the EHLO command to the server SMTP. If the server SMTP
   responds with code 250 to the EHLO command, and the response includes
   the EHLO keyword value PIPELINING, then the server SMTP has indicated
   that it can accommodate SMTP command pipelining.

2.1.  Client use of pipelining

   Once the client SMTP has confirmed that support exists for the
Show full document text