计算机网络基础小记 07 - 应用层 - Email 应用

Email 应用的构成

Email应用的构成组件:

  1. 邮件客户端(user agent)

    读、写 Email 消息

    与服务器交互,收、发 Email 消息

    Outlook,Foxmail,Thunderbird,Web 客户端……

  2. 邮件服务器(Mail Server)

    邮箱:存储发给该用户的 Email

    消息队列(message queue):存储等待发送的 Email

  3. SMTP 协议(Simple Mail Transfer Protocol)

    邮件服务器之间传递消息所使用的协议

    客户端:发送消息的服务器

    服务器:接收消息的服务器

SMTP 协议

SMTP 协议:[RFC 2821]

  • 使用 TCP 进行 Email 消息的可靠传输

  • 端口 25

  • 传输过程的三个阶段

    握手、消息传输、关闭

命令/响应交互模式

  • 命令(command):ASCII 文本
  • 响应(response):状态代码和语句

Email 消息只能包含 ASCII 7 位码,共 $2^7=128$ 种不同编码

20211125_05

SMTP 交互过程

# 登录服务器
S: 220 hamburger.edu

# 交互

# HELO 指定邮箱名
C: HELO crepes.fr 
S: 250 Hello crepes.fr, pleased to meet you

# MAIL FROM 指定发件邮箱地址
C: MAIL FROM: <alice@crepes.fr> 
S: 250 alice@crepes.fr... Sender ok 

# RCPT TO 指定收件邮箱地址
C: RCPT TO: <bob@hamburger.edu> 
S: 250 bob@hamburger.edu ... Recipient ok 

# DATA 发送数据
C: DATA 
S: 354 Enter mail, end with "." on a line by itself 
C: Do you like ketchup? 
C: How about pickles? 
C: . 
S: 250 Message accepted for delivery 

# 登出服务器
C: QUIT 
S: 221 hamburger.edu closing connection
  • 使用持久性连接
  • SMTP 服务器利用 “CRLF.CRLF”(换行.换行)确定消息的结束

与 HTTP 对比:

  1. HTTP:拉式(pull),SMTP:推式(push)

  2. 都使用命令/响应交互模式,命令和状态代码都是 ASCII 码

  3. HTTP:每个对象封装在独立的响应消息中

    SMTP:多个对象在由多个部分构成的消息中发送

Email 消息格式

SMTP 是 Email 消息的传输/交换协议,采用的文本消息格式定义在 [RFC 822]

20211125_06

头部行(header):

  1. To
  2. From
  3. Subject

消息体(body):

  1. 消息本身(只能是 7 位的 ASCII 字符)

因为只能传送 ASCII 字符,之后引入了 [RFC 2045][RFC 2056] 来提供 MIME 多媒体邮件扩展

  • 在邮件头部增加额外的行声明 MIME 的内容类型

20211125_07

邮件访问协议

邮件访问协议:从服务器获取邮件

  • POP:Post Office Protocol [RFC 1939]

    认证/授权(客户端 - 服务器)和下载

  • IMAP:Internet Mail Access Protocol [RFC 1730]

    更多功能、更加复杂、能够操纵服务器上存储的消息

  • HTTP:163、QQ Mail……

POP 协议

认证过程:

  • 客户端命令:User:声明用户名;Pass:声明密码
  • 服务器响应:+OK;-ERR

事务阶段:

  • List:列出消息数量
  • Retr:用编号获取消息
  • Dele:删除消息
  • Quit

20211125_08

POP 有两种模式:

  • “下载并删除” 模式:用户如果换了客户端软件,无法重读该邮件
  • “下载并保持” 模式:不同客户端都可以保留消息的拷贝

POP3 是无状态的

IMAP 协议

IMAP 协议的所有消息统一保存在服务器,允许用户利用文件夹组织消息

IMAP支持跨会话(Session)的用户状态:

  • 文件夹的名字
  • 文件夹与消息 ID 之间的映射等