注:本文基于模型知识整理,建议结合权威教材与 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。
自测题
- 描述一封邮件从发出到读到的完整协议路径。
答案要点: 发件人 UA 经 SMTP 推给发方 MTA;发方 MTA 经 SMTP(按收件域的 MX 记录定位)推给收方 MTA,由 MDA 投递入箱;收件人 UA 经 POP3 或 IMAP 从收方服务器拉取。即「推-推-拉」。
- SMTP 基本会话包含哪些命令?
答案要点: EHLO(握手并交换能力)、MAIL FROM(发件人)、RCPT TO(收件人,可多次)、DATA(开始正文,以单独一行「.」结束)、QUIT(结束会话);数字应答码 2xx 成功、4xx 暂时失败、5xx 永久失败。
- POP3 与 IMAP 的本质区别是什么?
答案要点: POP3 把信下载到本地,服务器一般不留或简单保留,适合单设备;IMAP 的信与状态(文件夹、已读)都在服务器端,多端访问一致,是当前主流。
- FTP 主动模式为什么在 NAT 后不可行,被动模式如何解决?
答案要点: 主动模式要求服务器主动连回客户端的端口,NAT 后的客户端没有公网可达地址,这条连接建不起来;被动模式改为服务器开放高位端口等待客户端主动连接,方向反转后即可穿越 NAT。
- 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)