分享
 
 
 

RFC2197 - SMTP Service Extension for Command Pipelining

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

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 RFC1854 [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:

(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 RFC2119 [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;

(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.

4. 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.

4.1. Client use of pipelining

Once the client SMTP has confirmed that support exists for the

pipelining extension, the client SMTP may then elect to transmit

groups of SMTP commands in batches without waiting for a response to

each individual command. In particular, the commands RSET, MAIL FROM,

SEND FROM, SOML FROM, SAML FROM, and RCPT TO can all appear anywhere

in a pipelined command group. The EHLO, DATA, VRFY, EXPN, TURN,

QUIT, and NOOP commands can only appear as the last command in a

group since their success or failure produces a change of state which

the client SMTP must accommodate. (NOOP is included in this group so

it can be used as a synchronization point.)

Additional commands added by other SMTP extensions may only appear as

the last command in a group unless otherwise specified by the

extensions that define the commands.

The actual transfer of message content is explicitly allowed to be

the first "command" in a group. That is, a RSET/MAIL FROM sequence

used to initiate a new message transaction can be placed in the same

group as the final transfer of the headers and body of the previous

message.

Client SMTP implementations that employ pipelining MUST check ALL

statuses associated with each command in a group. For example, if

none of the RCPT TO recipient addresses were accepted the client must

then check the response to the DATA command -- the client cannot

assume that the DATA command will be rejected just because none of

the RCPT TO commands worked. If the DATA command was properly

rejected the client SMTP can just issue RSET, but if the DATA command

was accepted the client SMTP should send a single dot.

Command statuses MUST be coordinated with responses by counting each

separate response and correlating that count with the number of

commands known to have been issued. Multiline responses MUST be

supported. Matching on the basis of either the error code value or

associated text is expressly forbidden.

Client SMTP implementations MAY elect to operate in a nonblocking

fashion, processing server responses immediately upon receipt, even

if there is still data pending transmission from the client's

previous TCP send operation. If nonblocking operation is not

supported, however, client SMTP implementations MUST also check the

TCP window size and make sure that each group of commands fits

entirely within the window. The window size is usually, but not

always, 4K octets. Failure to perform this check can lead to

deadlock conditions.

Clients MUST NOT confuse responses to multiple commands with

multiline responses. Each command requires one or more lines of

response, the last line not containing a dash between the response

code and the response string.

4.2. Server support of pipelining

A server SMTP implementation that offers the pipelining extension:

(1) MUST NOT flush or otherwise lose the contents of the

TCP input buffer under any circumstances whatsoever.

(2) SHOULD issue a positive response to the DATA command if

and only if one or more valid RCPT TO addresses have

been previously received.

(3) MUST NOT, after issuing a positive response to a DATA

command with no valid recipients and subsequently

receiving an empty message, send any message whatsoever

to anybody.

(4) SHOULD elect to store responses to grouped RSET, MAIL

FROM, SEND FROM, SOML FROM, SAML FROM, and RCPT TO

commands in an internal buffer so they can sent as a

unit.

(5) MUST NOT buffer responses to EHLO, DATA, VRFY, EXPN,

TURN, QUIT, and NOOP.

(6) MUST NOT buffer responses to unrecognized commands.

(7) MUST send all pending responses immediately whenever

the local TCP input buffer is emptied.

(8) MUST NOT make assumptions about commands that are yet

to be received.

(9) SHOULD issue response text that indicates, either

implicitly or explicitly, what command the response

matches.

The overriding intent of these server requirements is to make it as

easy as possible for servers to conform to these pipelining

extensions.

5. Examples

Consider the following SMTP dialogue that does not use pipelining:

S: <wait for open connection>

C: <open connection to server>

S: 220 innosoft.com SMTP service ready

C: HELO dbc.mtview.ca.us

S: 250 innosoft.com

C: MAIL FROM:<mrose@dbc.mtview.ca.us>

S: 250 sender <mrose@dbc.mtview.ca.us> OK

C: RCPT TO:<ned@innosoft.com>

S: 250 recipient <ned@innosoft.com> OK

C: RCPT TO:<dan@innosoft.com>

S: 250 recipient <dan@innosoft.com> OK

C: RCPT TO:<kvc@innosoft.com>

S: 250 recipient <kvc@innosoft.com> OK

C: DATA

S: 354 enter mail, end with line containing only "."

...

C: .

S: 250 message sent

C: QUIT

S: 221 goodbye

The client waits for a server response a total of 9 times in this

simple example. But if pipelining is employed the following dialogue

is possible:

S: <wait for open connection>

C: <open connection to server>

S: 220 innosoft.com SMTP service ready

C: EHLO dbc.mtview.ca.us

S: 250-innosoft.com

S: 250 PIPELINING

C: MAIL FROM:<mrose@dbc.mtview.ca.us>

C: RCPT TO:<ned@innosoft.com>

C: RCPT TO:<dan@innosoft.com>

C: RCPT TO:<kvc@innosoft.com>

C: DATA

S: 250 sender <mrose@dbc.mtview.ca.us> OK

S: 250 recipient <ned@innosoft.com> OK

S: 250 recipient <dan@innosoft.com> OK

S: 250 recipient <kvc@innosoft.com> OK

S: 354 enter mail, end with line containing only "."

...

C: .

C: QUIT

S: 250 message sent

S: 221 goodbye

The total number of turnarounds has been reduced from 9 to 4.

The next example illustrates one possible form of behavior when

pipelining is used and all recipients are rejected:

S: <wait for open connection>

C: <open connection to server>

S: 220 innosoft.com SMTP service ready

C: EHLO dbc.mtview.ca.us

S: 250-innosoft.com

S: 250 PIPELINING

C: MAIL FROM:<mrose@dbc.mtview.ca.us>

C: RCPT TO:<nsb@thumper.bellcore.com>

C: RCPT TO:<galvin@tis.com>

C: DATA

S: 250 sender <mrose@dbc.mtview.ca.us> OK

S: 550 remote mail to <nsb@thumper.bellore.com> not allowed

S: 550 remote mail to <galvin@tis.com> not allowed

S: 554 no valid recipients given

C: QUIT

S: 221 goodbye

The client SMTP waits for the server 4 times here as well. If the

server SMTP does not check for at least one valid recipient prior to

accepting the DATA command, the following dialogue would result:

S: <wait for open connection>

C: <open connection to server>

S: 220 innosoft.com SMTP service ready

C: EHLO dbc.mtview.ca.us

S: 250-innosoft.com

S: 250 PIPELINING

C: MAIL FROM:<mrose@dbc.mtview.ca.us>

C: RCPT TO:<nsb@thumper.bellcore.com>

C: RCPT TO:<galvin@tis.com>

C: DATA

S: 250 sender <mrose@dbc.mtview.ca.us> OK

S: 550 remote mail to <nsb@thumper.bellore.com> not allowed

S: 550 remote mail to <galvin@tis.com> not allowed

S: 354 enter mail, end with line containing only "."

C: .

C: QUIT

S: 554 no valid recipients

S: 221 goodbye

6. Security Considerations

This document does not discuss security issues and is not believed to

raise any security issues not endemic in electronic mail and present

in fully conforming implementations of [1].

7. Acknowledgements

This document is based on the SMTP service extension model presented

in RFC1425. Marshall Rose's description of SMTP command pipelining

in his book "The Internet Message" also served as a source of

inspiration for this extension.

8. References

[1] Postel, J., "Simple Mail Transfer Protocol", STD 10,

RFC821, August 1982.

[2] Klensin, J., Freed, N., Rose, M., Stefferud, E., and

D. Crocker, "SMTP Service Extensions", RFC1869,

November 1995.

[3] Freed, N., "SMTP Service Extension for Command Pipelining",

RFC1854, October 1995.

[4] Bradner, S., "Key words for use in RFCs to Indicate

Requirement Levels", RFC2119, March 1997.

9. Author's Address

Ned Freed

Innosoft International, Inc.

1050 Lakes Drive

West Covina, CA 91790

USA

Phone: +1 626 919 3600

Fax: +1 626 919 3614

EMail: ned.freed@innosoft.com

This document is a product of work done by the Internet Engineering

Task Force Working Group on Messaging Extensions, Alan Cargille,

chair.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有