SMTP Service Extension for Command Pipelining (RFC2197)
Original Publication Date: 1997-Sep-01
Included in the Prior Art Database: 2000-Sep-13
Internet Society Requests For Comment (RFCs)
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.
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.
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 . Only
textual and editorial changes have been made; the protocol has not
changed in any way.
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  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
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