SMTP 针对命令流水线的服务扩展

【SMTP 针对命令流水线的服务扩展】本备忘录的状态
本文档讲述了一种Internet社区的Internet标准跟踪协议,它需要进一步进行讨论和建
议以得到改进 。请参考最新版的“Internet正式协议标准”(STD1)来获得本协议的标准化
程度和状态 。本备忘录的发布不受任何限制 。
版权声明
Copyright(C)TheInternetSociety(1999).AllRightsReserved.
摘要
该文档定义了对简单邮件传输协议(SMTP)服务的一种扩展 。这种扩展服务使得邮
件服务器在单次基于传输控制协议(TCP) 的发送操作中能够接受多条命令 。这样单次
TCP发送操作实现多条邮件传输命令可以显著提高SMTP的性能 。
目录
1介绍 2
1.1需求符号 2
2命令流水线扩展的基本框架结构 3
3流水线服务扩展 3
3.1客户端使用流水线 3
3.2服务器支持流水线 4
4举例 4
5安全方面的考虑 6
6致谢 6
6参考资料 7
8.作者的地址 7
9.版权说明 7
1介绍
虽然SMTP已经得到广泛,稳定的应用,但是一定程度的对其功能的扩展无疑是有
益的,尤其是对那种用在因特网上使用的高延迟的网络连接这种扩展更加必要.在这
种高延迟网络连接中,SMTP固有的一条命令对应一条回应的模式很不利,每次连接时
间都花费在等待个别命令的回应(周转时间)上了.
最简单的情况莫过于直接开发SMTP的客户端软件,势其使用命令流水线:把多条
命令集成在一条TCP的发送操作中.不幸的是,最初的SMTP规范[RFC-821]没有明确
的规定SMTP服务器必须支持命令流水线.因此,大量的因特网SMTP服务器不能完全
处理命令流水线.在现存的服务其中存在以下缺陷:
(1).在SMTP对话期间进行连接传递(connectionhandoff)和缓冲区的刷新.一般
来说,服务器对相应的SMTP连接请求生成相应的进程进行处理是一种有用,明显和
无害的实现技术,然而,一些SMTP服务器可能会推迟进行处理进程的生成和连接的传
递(connectionhandoff),可能会导致存储在进程缓冲区里的来自TCP连接的数据丢失.
(2).当一个SMTP命令失败后,TCP输入缓冲区会刷新.事实上,SMTP命令经常会
失败,而这些刷新是没有道理的.不管怎样,一些SMTP服务器确实这样做了.
(3).对失败的SMTP命令不合适的处理.举例来说,在最后一个RCPT(假设有不止
一个RCPT命令–译者)命令失效时,尽管其他的RCPT命令成功了,一些SMTP服务
器会拒绝接受接下来的DATA命令.相反,有些服务器即使在所有的RCPT命令都失效
的情况下,仍然会接受DATA命令.虽然,实现了命令流水线的邮件客户端程序可以适
应上述的两种情况,但是究竟这给客户端的实现带来了不必要麻烦.
该备忘录使用了在[RFC-1869]中描述的机制来定义SMTP服务的扩展.使用这种
扩展服务的服务器可以声明自己是否能够处理命令流水线的情况.SMTP客户端可以检
查到这一声明,只有在确保服务器支持使用命令流水线时,才可以使用它.
1.1需求符号
在该文档中,偶然会用到大写的名词.大写的"MUST","MUST
NOT","SHOULD","SHOULDNOT",和"MAY"用来表示在本规范中的非凡需求.在
[RFC-1123]中有专门对这些名词,例如"MUST","SHOULD"和"MAY"含义的介绍.而那些
名词"MUSTNOT"和"SHOULDNOT"是对上述名字的逻辑扩展.
2命令流水线扩展的基本框架结构
命令流水线采用如下定义:
(1).这种SMTP服务扩展的名称是流水线.
(2).要害字EHLO的值一定是PIPELINING.
(3).使用要害字PIPELININGEHLO时没有参数.
(4).对命令MAILFROM和RCPTTO没有定义额外的参数.

推荐阅读