计算机网络学习站

kp-026 · 05-应用层与Web

电子邮件与文件传输协议

核心 约 15 分钟 SMTPPOP3IMAPFTP
我的进度:

注:本文基于模型知识整理,建议结合权威教材与 RFC 原文核对细节。

一句话定义

电子邮件由 SMTP 负责「推」送传递、POP3/IMAP 负责「拉」取阅读,FTP 用控制与数据双通道传输文件——三者都是基于 TCP 的文本命令式经典应用层协议。

为什么重要

邮件至今是互联网最重要的异步通信与身份验证渠道:注册确认、密码找回、账单与告警通知都靠它,配置企业邮箱、排查退信必须理解其三组件架构与端口语义。FTP 的双通道设计以及它在 NAT 后的失效,则是「协议设计与网络环境演进冲突」的经典案例,理解它比记住命令更有价值。

前置知识

建议先读 kp-017《UDP》,掌握传输层端口与无连接/面向连接的区分;SMTP、POP3/IMAP、FTP 全部建立在 TCP 之上,需要理解端口常开与按需建连的差异。理解邮件路由还需要 kp-022《DNS 域名系统》中的 MX 记录。

核心概念

  • 三组件分工:用户代理(UA,user agent,如 Outlook、手机邮件 App,负责写信与读信)、邮件传输代理(MTA,mail transfer agent,服务器间转发信件,如 Postfix、Exchange)、邮件投递代理(MDA,mail delivery agent,把信写入收件人的邮箱存储,常与 MTA 同机部署)。
  • 一封信的完整路径「推-推-拉」:发件人 UA 用 SMTP 把信推给发方 MTA;发方 MTA 用 SMTP 推给收方 MTA(依据收件人域名的 MX 记录定位目标服务器);收件人 UA 用 POP3 或 IMAP 从收方服务器拉取。
  • SMTP:文本命令协议。25 端口用于服务器间中继;587(STARTTLS 显式升级加密)与 465(隐式 TLS)用于用户提交且通常要求认证。SMTP 本体只定义传递,附件与多语言靠 MIME(Multipurpose Internet Mail Extensions)扩展,由 Content-Type 声明正文类型与编码。
  • 取信协议对比:POP3 把信下载到本地,服务器端通常删除或仅简单保留,适合单设备离线读;IMAP 让信与状态(文件夹、已读、标记)都留在服务器端,多端访问始终一致,是今天的主流。
  • FTP 双通道:21 端口的控制连接全程保持,传输文件时另建数据连接。主动模式(PORT)由服务器主动连回客户端指定端口(经典为 20),客户端在 NAT/防火墙后时服务器根本连不进来;被动模式(PASV)改为服务器开放高位端口等客户端来连。

图示

邮件的「推-推-拉」路径与 FTP 双通道模型:

发件人UA --SMTP--> 发方MTA --SMTP(查收件域MX)--> 收方MTA --POP3/IMAP--> 收件人UA
   (推)                (推)                                          (拉)
 [写信/发信]        [中继转发]        [MDA投递入箱/存储]          [收信/读信]

FTP 双通道(控制常开,数据按需):
客户端                                              服务器
  |====== 控制连接 :21(命令/应答,全程保持)==========|
  |<===== 数据连接·主动模式:服务器:20 → 连回客户端 =====|
  |====== 数据连接·被动模式:客户端 → 服务器高位端口 =====>|

原理与机制

SMTP 会话实例(telnet 式文本,可直接复现):

220 mx.example.com ESMTP ready
EHLO client.example.net
250-mx.example.com
250 OK
MAIL FROM:<alice@example.net>
250 OK
RCPT TO:<bob@example.com>
250 OK
DATA
354 go ahead, end with <CRLF>.<CRLF>
Subject: Hi
Bob, meeting at 3pm.
.
250 OK queued as 8F2A1
QUIT
221 Bye

为什么收件这一步不能用 SMTP 反向推:SMTP 是推送协议,且发方无从知道收件人此刻用哪台设备在线;信必须先落到始终在线的收方服务器,再由 UA 在方便时拉取——这正是「推-推-拉」结构的原因,也是收发协议必须分工的原因。

实例分析

排查退信:看 MTA 返回码,5xx(如 550 拒收、地址不存在)是永久失败直接退信,4xx 是暂时失败会按退避间隔重试。如今更多退信源于反垃圾校验——发方域名的 SPF(TXT 记录声明谁有权代发)与 DKIM(对信件做签名)校验失败即被拒收,与 kp-022 的 DNS 记录直接相关。现状一句话:邮件体系至今仍在运转,FTP 则因明文传输与双通道难以穿越防火墙,已被基于 SSH 的 SFTP(单通道、全程加密)与对象存储(HTTP API)取代。

常见误区

  • 「SMTP 也用于收信」:SMTP 只负责发送与服务器间中继,收信靠 POP3/IMAP 拉取。
  • 混用 25 与 587/465:用户客户端提交应走 587/465 并认证;25 面向服务器间中继,不少运营商还封锁入站 25 以防垃圾邮件。
  • 主动与被动方向搞反:主动是服务器连客户端(NAT 后不可行),被动是客户端连服务器高位端口。
  • 把 POP3 与 IMAP 的差异理解为快慢:真正区别是「信与状态存在哪」,单设备离线选 POP3,多端同步选 IMAP。

自测题

  1. 描述一封邮件从发出到读到的完整协议路径。

答案要点: 发件人 UA 经 SMTP 推给发方 MTA;发方 MTA 经 SMTP(按收件域的 MX 记录定位)推给收方 MTA,由 MDA 投递入箱;收件人 UA 经 POP3 或 IMAP 从收方服务器拉取。即「推-推-拉」。

  1. SMTP 基本会话包含哪些命令?

答案要点: EHLO(握手并交换能力)、MAIL FROM(发件人)、RCPT TO(收件人,可多次)、DATA(开始正文,以单独一行「.」结束)、QUIT(结束会话);数字应答码 2xx 成功、4xx 暂时失败、5xx 永久失败。

  1. POP3 与 IMAP 的本质区别是什么?

答案要点: POP3 把信下载到本地,服务器一般不留或简单保留,适合单设备;IMAP 的信与状态(文件夹、已读)都在服务器端,多端访问一致,是当前主流。

  1. FTP 主动模式为什么在 NAT 后不可行,被动模式如何解决?

答案要点: 主动模式要求服务器主动连回客户端的端口,NAT 后的客户端没有公网可达地址,这条连接建不起来;被动模式改为服务器开放高位端口等待客户端主动连接,方向反转后即可穿越 NAT。

  1. FTP 为什么被 SFTP 与对象存储取代?

答案要点: FTP 明文传输账号与数据;双通道需要开放端口段、难以穿透防火墙与 NAT。SFTP 复用 SSH 单通道且全程加密,对象存储提供 HTTP(S) API 与 CDN 集成,工程上更简单安全。

延伸阅读

  • 《TCP/IP 详解 卷1:协议》(Stevens),应用协议相关章节
  • RFC 5321(SMTP)、RFC 3501(IMAP4rev1)、RFC 1939(POP3)、RFC 959(FTP)