问题:两个邮件服务器之间的基本SMTP消息传输需要多少次RTT?
假设一条消息从用户A发送到用户B。从每个用户代理到其邮件服务器的传输时间被假定为可忽略,唯一可测量的延迟是两个邮件服务器之间的RTT(20毫秒)。一旦A的邮件服务器收到消息,它会立即启动与B的邮件服务器的SMTP会话。
在计算延迟时,我们是否应该将每个SMTP命令-回复对(HELO、MAIL FROM、RCPT TO、DATA、消息正文终止符)视为一个独立的RTT,从而总共需要大约6个RTT?还是应该在连接建立后将SMTP事务视为单个RTT,从而总共需要2个RTT? 哪种解释正确地反映了预期的抽象概念?
我的猜测答案
从查看SMTP对话来看,每个命令-回复对都是顺序进行的。在TCP连接建立(1个RTT)之后,SMTP会经历以下步骤:
- HELO → 250
- MAIL FROM → 250
- RCPT TO → 250
- DATA → 354
- 消息正文 + “.” → 250
这些交换中的每一次都需要花费一个RTT,而TCP建立本身也需要一个RTT。这总共需要6个RTT。如果RTT = 20毫秒,则延迟为: 6 × 20 ms = 120 ms = 0.12 s
第二种解释是,如果在HELO之前单独计算服务器问候语(220),则需要6.5个RTT。这将产生: 6.5 × 20 ms = 130 ms = 0.13 s
然而,我怀疑我应该使用一种模型,在该模型中,连接建立后的SMTP命令被分组到单个“SMTP事务”RTT中。在该抽象概念下,延迟为: 2 × 20 ms = 40 ms = 0.04 s