home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1997 December / Internet_Info_CD-ROM_Walnut_Creek_December_1997.iso / rfc / rfc2197 < prev    next >
Text File  |  1997-09-15  |  15KB  |  452 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. Network Working Group                                       N. Freed
  8. Request for Comments: 2197                                  Innosoft
  9. Obsoletes: 1854                                       September 1997
  10. Category: Standards Track
  11.  
  12.  
  13.                          SMTP Service Extension
  14.                          for Command Pipelining
  15.  
  16. Status of this Memo
  17.  
  18.    This document specifies an Internet standards track protocol for the
  19.    Internet community, and requests discussion and suggestions for
  20.    improvements.  Please refer to the current edition of the "Internet
  21.    Official Protocol Standards" (STD 1) for the standardization state
  22.    and status of this protocol.  Distribution of this memo is unlimited.
  23.  
  24. 1.  Abstract
  25.  
  26.    This memo defines an extension to the SMTP service whereby a server
  27.    can indicate the extent of its ability to accept multiple commands in
  28.    a single TCP send operation. Using a single TCP send operation for
  29.    multiple commands can improve SMTP performance significantly.
  30.  
  31.    The present document is an updated version of RFC 1854 [3].  Only
  32.    textual and editorial changes have been made; the protocol has not
  33.    changed in any way.
  34.  
  35. 2.  Introduction
  36.  
  37.    Although SMTP is widely and robustly deployed, certain extensions may
  38.    nevertheless prove useful. In particular, many parts of the Internet
  39.    make use of high latency network links.  SMTP's intrinsic one
  40.    command-one response structure is significantly penalized by high
  41.    latency links, often to the point where the factors contributing to
  42.    overall connection time are dominated by the time spent waiting for
  43.    responses to individual commands (turnaround time).
  44.  
  45.    In the best of all worlds it would be possible to simply deploy SMTP
  46.    client software that makes use of command pipelining: batching up
  47.    multiple commands into single TCP send operations. Unfortunately, the
  48.    original SMTP specification [1] did not explicitly state that SMTP
  49.    servers must support this.  As a result a non-trivial number of
  50.    Internet SMTP servers cannot adequately handle command pipelining.
  51.    Flaws known to exist in deployed servers include:
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58. Freed                       Standards Track                     [Page 1]
  59.  
  60. RFC 2197                 SMTP Service Extension           September 1997
  61.  
  62.  
  63.     (1)   Connection handoff and buffer flushes in the middle of
  64.           the SMTP dialogue.  Creation of server processes for
  65.           incoming SMTP connections is a useful, obvious, and
  66.           harmless implementation technique. However, some SMTP
  67.           servers defer process forking and connection handoff
  68.           until some intermediate point in the SMTP dialogue.
  69.           When this is done material read from the TCP connection
  70.           and kept in process buffers can be lost.
  71.  
  72.     (2)   Flushing the TCP input buffer when an SMTP command
  73.           fails. SMTP commands often fail but there is no reason
  74.           to flush the TCP input buffer when this happens.
  75.           Nevertheless, some SMTP servers do this.
  76.  
  77.     (3)   Improper processing and promulgation of SMTP command
  78.           failures. For example, some SMTP servers will refuse to
  79.           accept a DATA command if the last RCPT TO command
  80.           fails, paying no attention to the success or failure of
  81.           prior RCPT TO command results. Other servers will
  82.           accept a DATA command even when all previous RCPT TO
  83.           commands have failed. Although it is possible to
  84.           accommodate this sort of behavior in a client that
  85.           employs command pipelining, it does complicate the
  86.           construction of the client unnecessarily.
  87.  
  88.    This memo uses the mechanism described in [2] to define an extension
  89.    to the SMTP service whereby an SMTP server can declare that it is
  90.    capable of handling pipelined commands. The SMTP client can then
  91.    check for this declaration and use pipelining only when the server
  92.    declares itself capable of handling it.
  93.  
  94. 2.1.  Requirements notation
  95.  
  96.    This document occasionally uses terms that appear in capital letters.
  97.    When the terms "MUST", "SHOULD", "MUST NOT", "SHOULD NOT", and "MAY"
  98.    appear capitalized, they are being used to indicate particular
  99.    requirements of this specification. A discussion of the meanings of
  100.    these terms appears in RFC 2119 [4].
  101.  
  102. 3.  Framework for the Command Pipelining Extension
  103.  
  104.    The Command Pipelining extension is defined as follows:
  105.  
  106.     (1)   the name of the SMTP service extension is Pipelining;
  107.  
  108.     (2)   the EHLO keyword value associated with the extension is
  109.           PIPELINING;
  110.  
  111.  
  112.  
  113.  
  114. Freed                       Standards Track                     [Page 2]
  115.  
  116. RFC 2197                 SMTP Service Extension           September 1997
  117.  
  118.  
  119.     (3)   no parameter is used with the PIPELINING EHLO keyword;
  120.  
  121.     (4)   no additional parameters are added to either the MAIL
  122.           FROM or RCPT TO commands.
  123.  
  124.     (5)   no additional SMTP verbs are defined by this extension;
  125.           and,
  126.  
  127.     (6)   the next section specifies how support for the
  128.           extension affects the behavior of a server and client
  129.           SMTP.
  130.  
  131. 4.  The Pipelining Service Extension
  132.  
  133.    When a client SMTP wishes to employ command pipelining, it first
  134.    issues the EHLO command to the server SMTP. If the server SMTP
  135.    responds with code 250 to the EHLO command, and the response includes
  136.    the EHLO keyword value PIPELINING, then the server SMTP has indicated
  137.    that it can accommodate SMTP command pipelining.
  138.  
  139. 4.1.  Client use of pipelining
  140.  
  141.    Once the client SMTP has confirmed that support exists for the
  142.    pipelining extension, the client SMTP may then elect to transmit
  143.    groups of SMTP commands in batches without waiting for a response to
  144.    each individual command. In particular, the commands RSET, MAIL FROM,
  145.    SEND FROM, SOML FROM, SAML FROM, and RCPT TO can all appear anywhere
  146.    in a pipelined command group.  The EHLO, DATA, VRFY, EXPN, TURN,
  147.    QUIT, and NOOP commands can only appear as the last command in a
  148.    group since their success or failure produces a change of state which
  149.    the client SMTP must accommodate. (NOOP is included in this group so
  150.    it can be used as a synchronization point.)
  151.  
  152.    Additional commands added by other SMTP extensions may only appear as
  153.    the last command in a group unless otherwise specified by the
  154.    extensions that define the commands.
  155.  
  156.    The actual transfer of message content is explicitly allowed to be
  157.    the first "command" in a group. That is, a RSET/MAIL FROM sequence
  158.    used to initiate a new message transaction can be placed in the same
  159.    group as the final transfer of the headers and body of the previous
  160.    message.
  161.  
  162.    Client SMTP implementations that employ pipelining MUST check ALL
  163.    statuses associated with each command in a group. For example, if
  164.    none of the RCPT TO recipient addresses were accepted the client must
  165.  
  166.  
  167.  
  168.  
  169.  
  170. Freed                       Standards Track                     [Page 3]
  171.  
  172. RFC 2197                 SMTP Service Extension           September 1997
  173.  
  174.  
  175.    then check the response to the DATA command -- the client cannot
  176.    assume that the DATA command will be rejected just because none of
  177.    the RCPT TO commands worked.  If the DATA command was properly
  178.    rejected the client SMTP can just issue RSET, but if the DATA command
  179.    was accepted the client SMTP should send a single dot.
  180.  
  181.    Command statuses MUST be coordinated with responses by counting each
  182.    separate response and correlating that count with the number of
  183.    commands known to have been issued.  Multiline responses MUST be
  184.    supported. Matching on the basis of either the error code value or
  185.    associated text is expressly forbidden.
  186.  
  187.    Client SMTP implementations MAY elect to operate in a nonblocking
  188.    fashion, processing server responses immediately upon receipt, even
  189.    if there is still data pending transmission from the client's
  190.    previous TCP send operation. If nonblocking operation is not
  191.    supported, however, client SMTP implementations MUST also check the
  192.    TCP window size and make sure that each group of commands fits
  193.    entirely within the window. The window size is usually, but not
  194.    always, 4K octets.  Failure to perform this check can lead to
  195.    deadlock conditions.
  196.  
  197.    Clients MUST NOT confuse responses to multiple commands with
  198.    multiline responses. Each command requires one or more lines of
  199.    response, the last line not containing a dash between the response
  200.    code and the response string.
  201.  
  202. 4.2.  Server support of pipelining
  203.  
  204.    A server SMTP implementation that offers the pipelining extension:
  205.  
  206.     (1)   MUST NOT flush or otherwise lose the contents of the
  207.           TCP input buffer under any circumstances whatsoever.
  208.  
  209.     (2)   SHOULD issue a positive response to the DATA command if
  210.           and only if one or more valid RCPT TO addresses have
  211.           been previously received.
  212.  
  213.     (3)   MUST NOT, after issuing a positive response to a DATA
  214.           command with no valid recipients and subsequently
  215.           receiving an empty message, send any message whatsoever
  216.           to anybody.
  217.  
  218.     (4)   SHOULD elect to store responses to grouped RSET, MAIL
  219.           FROM, SEND FROM, SOML FROM, SAML FROM, and RCPT TO
  220.           commands in an internal buffer so they can sent as a
  221.           unit.
  222.  
  223.  
  224.  
  225.  
  226. Freed                       Standards Track                     [Page 4]
  227.  
  228. RFC 2197                 SMTP Service Extension           September 1997
  229.  
  230.  
  231.     (5)   MUST NOT buffer responses to EHLO, DATA, VRFY, EXPN,
  232.           TURN, QUIT, and NOOP.
  233.  
  234.     (6)   MUST NOT buffer responses to unrecognized commands.
  235.  
  236.     (7)   MUST send all pending responses immediately whenever
  237.           the local TCP input buffer is emptied.
  238.  
  239.     (8)   MUST NOT make assumptions about commands that are yet
  240.           to be received.
  241.  
  242.     (9)   SHOULD issue response text that indicates, either
  243.           implicitly or explicitly, what command the response
  244.           matches.
  245.  
  246.    The overriding intent of these server requirements is to make it as
  247.    easy as possible for servers to conform to these pipelining
  248.    extensions.
  249.  
  250. 5.  Examples
  251.  
  252.    Consider the following SMTP dialogue that does not use pipelining:
  253.  
  254.    S: <wait for open connection>
  255.    C: <open connection to server>
  256.    S: 220 innosoft.com SMTP service ready
  257.    C: HELO dbc.mtview.ca.us
  258.    S: 250 innosoft.com
  259.    C: MAIL FROM:<mrose@dbc.mtview.ca.us>
  260.    S: 250 sender <mrose@dbc.mtview.ca.us> OK
  261.    C: RCPT TO:<ned@innosoft.com>
  262.    S: 250 recipient <ned@innosoft.com> OK
  263.    C: RCPT TO:<dan@innosoft.com>
  264.    S: 250 recipient <dan@innosoft.com> OK
  265.    C: RCPT TO:<kvc@innosoft.com>
  266.    S: 250 recipient <kvc@innosoft.com> OK
  267.    C: DATA
  268.    S: 354 enter mail, end with line containing only "."
  269.     ...
  270.    C: .
  271.    S: 250 message sent
  272.    C: QUIT
  273.    S: 221 goodbye
  274.  
  275.  
  276.  
  277.  
  278.  
  279.  
  280.  
  281.  
  282. Freed                       Standards Track                     [Page 5]
  283.  
  284. RFC 2197                 SMTP Service Extension           September 1997
  285.  
  286.  
  287.    The client waits for a server response a total of 9 times in this
  288.    simple example. But if pipelining is employed the following dialogue
  289.    is possible:
  290.  
  291.    S: <wait for open connection>
  292.    C: <open connection to server>
  293.    S: 220 innosoft.com SMTP service ready
  294.    C: EHLO dbc.mtview.ca.us
  295.    S: 250-innosoft.com
  296.    S: 250 PIPELINING
  297.    C: MAIL FROM:<mrose@dbc.mtview.ca.us>
  298.    C: RCPT TO:<ned@innosoft.com>
  299.    C: RCPT TO:<dan@innosoft.com>
  300.    C: RCPT TO:<kvc@innosoft.com>
  301.    C: DATA
  302.    S: 250 sender <mrose@dbc.mtview.ca.us> OK
  303.    S: 250 recipient <ned@innosoft.com> OK
  304.    S: 250 recipient <dan@innosoft.com> OK
  305.    S: 250 recipient <kvc@innosoft.com> OK
  306.    S: 354 enter mail, end with line containing only "."
  307.     ...
  308.    C: .
  309.    C: QUIT
  310.    S: 250 message sent
  311.    S: 221 goodbye
  312.  
  313.  
  314.    The total number of turnarounds has been reduced from 9 to 4.
  315.  
  316.    The next example illustrates one possible form of behavior when
  317.    pipelining is used and all recipients are rejected:
  318.  
  319.    S: <wait for open connection>
  320.    C: <open connection to server>
  321.    S: 220 innosoft.com SMTP service ready
  322.    C: EHLO dbc.mtview.ca.us
  323.    S: 250-innosoft.com
  324.    S: 250 PIPELINING
  325.    C: MAIL FROM:<mrose@dbc.mtview.ca.us>
  326.    C: RCPT TO:<nsb@thumper.bellcore.com>
  327.    C: RCPT TO:<galvin@tis.com>
  328.    C: DATA
  329.    S: 250 sender <mrose@dbc.mtview.ca.us> OK
  330.    S: 550 remote mail to <nsb@thumper.bellore.com> not allowed
  331.    S: 550 remote mail to <galvin@tis.com> not allowed
  332.    S: 554 no valid recipients given
  333.    C: QUIT
  334.    S: 221 goodbye
  335.  
  336.  
  337.  
  338. Freed                       Standards Track                     [Page 6]
  339.  
  340. RFC 2197                 SMTP Service Extension           September 1997
  341.  
  342.  
  343.    The client SMTP waits for the server 4 times here as well. If the
  344.    server SMTP does not check for at least one valid recipient prior to
  345.    accepting the DATA command, the following dialogue would result:
  346.  
  347.    S: <wait for open connection>
  348.    C: <open connection to server>
  349.    S: 220 innosoft.com SMTP service ready
  350.    C: EHLO dbc.mtview.ca.us
  351.    S: 250-innosoft.com
  352.    S: 250 PIPELINING
  353.    C: MAIL FROM:<mrose@dbc.mtview.ca.us>
  354.    C: RCPT TO:<nsb@thumper.bellcore.com>
  355.    C: RCPT TO:<galvin@tis.com>
  356.    C: DATA
  357.    S: 250 sender <mrose@dbc.mtview.ca.us> OK
  358.    S: 550 remote mail to <nsb@thumper.bellore.com> not allowed
  359.    S: 550 remote mail to <galvin@tis.com> not allowed
  360.    S: 354 enter mail, end with line containing only "."
  361.    C: .
  362.    C: QUIT
  363.    S: 554 no valid recipients
  364.    S: 221 goodbye
  365.  
  366. 6.  Security Considerations
  367.  
  368.    This document does not discuss security issues and is not believed to
  369.    raise any security issues not endemic in electronic mail and present
  370.    in fully conforming implementations of [1].
  371.  
  372. 7.  Acknowledgements
  373.  
  374.    This document is based on the SMTP service extension model presented
  375.    in RFC 1425. Marshall Rose's description of SMTP command pipelining
  376.    in his book "The Internet Message" also served as a source of
  377.    inspiration for this extension.
  378.  
  379. 8.  References
  380.  
  381.    [1]  Postel, J., "Simple Mail Transfer Protocol", STD 10,
  382.         RFC 821, August 1982.
  383.  
  384.    [2]  Klensin, J., Freed, N., Rose, M., Stefferud, E., and
  385.         D. Crocker, "SMTP Service Extensions", RFC 1869,
  386.         November 1995.
  387.  
  388.    [3]  Freed, N., "SMTP Service Extension for Command Pipelining",
  389.         RFC 1854, October 1995.
  390.  
  391.  
  392.  
  393.  
  394. Freed                       Standards Track                     [Page 7]
  395.  
  396. RFC 2197                 SMTP Service Extension           September 1997
  397.  
  398.  
  399.    [4]  Bradner, S., "Key words for use in RFCs to Indicate
  400.         Requirement Levels", RFC 2119, March 1997.
  401.  
  402. 9.  Author's Address
  403.  
  404.    Ned Freed
  405.    Innosoft International, Inc.
  406.    1050 Lakes Drive
  407.    West Covina, CA 91790
  408.    USA
  409.  
  410.    Phone: +1 626 919 3600
  411.    Fax: +1 626 919 3614
  412.    EMail: ned.freed@innosoft.com
  413.  
  414.    This document is a product of work done by the Internet Engineering
  415.    Task Force Working Group on Messaging Extensions, Alan Cargille,
  416.    chair.
  417.  
  418.  
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434.  
  435.  
  436.  
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450. Freed                       Standards Track                     [Page 8]
  451.  
  452.