电子邮件(EMail)

  • 应用层传输对象:邮件
  • 网络应用架构:客户-服务器架构
  • 要求网络服务:TCP服务
  • 应用层协议:
  • 邮件传输协议:SMTP(端口号25)
  • 邮件访问协议:POP3(端口号),IMAP(端口号),HTTP(端口号80,可以上载、下载文件)
  • SMTP、POP、IMAP采用命令/响应交互

3个主要组成部分:

  • 用户代理
  • 邮件服务器
  • 简单邮件传输协议:SMTP

用户代理:

  • 又名“邮件阅读器”
  • 撰写,编辑和阅读邮件
  • 如Outlook、Foxmail【这些软件就是这个应用的代理】
  • 输出和输入邮件保存在服务器上

【web应用的用户代理,web浏览器;FTP应用的应用代理,FTP的客户端软件】

【用户通过软件和服务器打交道,而不是直接和服务器打交道】

邮件服务器:【守候在25号端口的邮件服务器】

  • 邮箱中管理和维护发送给用户的邮件
  • 输出报文队列保持发送邮件报文
  • 邮件服务器之间的SMTP协议:发送Email报文
  • 客户:发送方邮件服务器
  • 服务器:接收端邮件服务器
  • 报文传输代理MTA:运行在服务器后台的系统守护进程,负责在邮件服务器之间传输邮件,及将收到的邮件放入用户信箱

【用户代理发给邮件服务器,邮件服务器放到队列里,队列把邮件打走,打到相应的邮件服务器,邮件服务器收下来放到相应的邮箱当中】

【目标用户收邮件的时候再运行用户代理,从相应的邮件服务器他自己的邮箱当中,把别人发给他的邮件拉过来,拉的协议包括三种,POP3、IMAP、HTTP】

【用户代理发邮件给邮件服务器是SMTP协议,邮件服务器发给目标邮件服务器是SMTP协议,最后一跳是拉的(邮件存取协议),是POP3、IMAP、HTTP】

email网络层次结构 email的网络协议_邮件服务器

【用户代理:user agent,邮件服务器:mail server,绿色的是报文队列(message queue),黄色的是用户邮件箱(user mailbox)】

EMail:SMTP[RFC 2821]

  • 使用TCP在客户端和服务器之间传送报文,端口号为25
  • 直接传输:从发送方服务器到接收方服务器
  • 传输的3个阶段
  • 握手
  • 传输报文
  • 关闭
  • 命令/响应交互
  • 命令:ASCII文本
  • 响应:状态码和状态信息
  • 报文必须为7位ASCII码【规定了传输的内容必须是ASCII码范围,否则不允许传】

举例:Alice给Bob发送报文

email网络层次结构 email的网络协议_邮件服务器_02

【②④是SMTP协议,⑥是POP3、IMAP、HTTP】

【为什么要放在队列中再发,而不是直接发走?邮件服务器维护的用户数很多,用队列平滑以下进来和出去的速度;邮件不是来了就发,设置成几分钟后攒到一起再发,不让服务器那么劳累,每时每刻都处在一个待命的状态也很耗能】

简单的SMTP交互

email网络层次结构 email的网络协议_email网络层次结构_03

email网络层次结构 email的网络协议_邮件服务器_04

email网络层次结构 email的网络协议_邮件服务器_05

SMTP:总结

  • SMTP使用持久连接【建立连接之后连接不关的,把邮件发完之后再关。】
  • SMTP要求报文(首部和主体)为7位ASCII编码【可打印,打印完之后可以读的】
  • SMTP服务器使用CRLF,CRLF决定报文的尾部

        与HTTP比较:

  • HTTP:拉(pull)
  • SMTP:推(push)
  • 二者都是ASCII形式的命令/响应交互、状态码
  • HTTP:每个对象封装在各自的响应报文中
  • SMTP:多个对象包含在一个响应报文中【一个邮件可以有多张图片、视频、音频、文字、文档】

邮件报文格式

SMTP:交换Email报文的协议

email网络层次结构 email的网络协议_HTTP_06

【头部包含头部的名称和头部的值,最常见的头部名称是To:(给谁),From(谁发的),Subject(标题),CC(抄送,发给你同时抄送给另外一个人,另一个人知道已经发送了。还有一种叫暗抄(暗自抄送),发送给你同时抄送给另一个人,你还不知道,就叫暗自抄送)】

如何传输包含非ASCII文本的报文?

  • 现在的电子邮件要求能传输其他语系的文字,甚至非文本信息(如图片、语言等)
  • 非ASCII文本形式的数据在发送前须转换成简单ASCII文本
  • 非ASCII文本的报文大多具有特殊的数据类型,需要特殊的邮件浏览器(如JPEG图形的解压缩软件)来解读
  • 需扩展类型

报文格式:多媒体扩展

  • MIME:多媒体邮件扩展(multimedia mail extension),RFC 2045,2056
  • 在报文首部用额外的行申明MIME内容类型

email网络层次结构 email的网络协议_邮件服务器_07

email网络层次结构 email的网络协议_服务器_08

base64编码:把若干个不在ASCII码范围内的字节把它转换为更长一点的在ASCII码范围内的字符,这样就可以通过SMTP协议去传输了。到对方之后,用base64转换出来,再用MIME再解释出来这个邮件包括那些东西。

email网络层次结构 email的网络协议_email网络层次结构_09

email网络层次结构 email的网络协议_服务器_10

邮件的两阶段交付

email网络层次结构 email的网络协议_邮件服务器_11

  • 在具有永久因特网连接的计算机上运行一个SMTP服务器,位用户分配一个永久信箱
  • 第一阶段:邮件被投递到收信人的永久信箱
  • 第二阶段:用户从永久信箱中获取邮件
  • 带永久信箱的计算机必须运行两个服务器程序:
  • SMTP服务器:接收用户邮件,放入用户信箱
  • 邮件访问服务器:允许用户从邮箱中提取邮件

邮件访问协议

  • SMTP:传送到接收方的邮件服务器
  • 邮件访问协议:从服务器访问邮件
  • POP:邮局访问协议(Post Office Protocol)[RFC 1939]
  • 用户身份确认(代理 ↔️ 服务器)并下载【POP3仅仅能看到收件箱发件箱】
  • IMAP:Internet邮件访问协议(Internet Mail Access Protocol)[RFC 1730]
  • 更多特性(更复杂)【允许Bob在远程的邮箱中创建目录,把邮件从一个目录搬到另一个目录,所以他提供远程目录维护】
  • 在服务器上处理存储的报文
  • HTTP:Hotmail,Yahoo Mail等
  • 方便【不仅仅用于web访问,还能用于文件的上下载,文件,另外还能利用HTTP协议来收发邮件】

POP3协议

email网络层次结构 email的网络协议_HTTP_12

【POP3全部的用户名和密码都是明文的,后来是打了一个个补丁才把安全性提高。收发邮件可以跑在TCP之上,也可以跑在SSL之上,应用层提供的是明文,传输层做了些加密认证方面的措施,所以能够增加他的安全性措施】

【下载并删除:邮箱不会炸满。下载并保留:邮件还在邮箱当中,用其他终端运行用户代理,还能看到邮件】

  • 上一个例子使用“下载并删除模式”
  • 如果改变客户机,Bob不能阅读邮件
  • “下载并保留”:不同客户机上为报文的拷贝
  • POP3在会话中是无状态的【因为POP3不允许客户端在服务器那边建目录】

本地管理文件夹

IMAP

  • IMAP服务器将每个报文与一个文件夹联系起来
  • 允许用户在远程用目录来组织报文
  • 允许用户读取报文组件
  • IMAP在会话过程中保留用户状态(有状态的):
  • 目录名、报文ID与目录名之间映射

远程管理文件夹

基于web的邮件访问:HTTP

  • 用户代理为普通浏览器:
  • 发送邮件:浏览器使用HTTP协议将邮件发送到邮件服务器
  • 获取邮件:浏览器使用HTTP协议从信箱取邮件
  • 传输邮件:邮件服务器之间仍使用SMTP协议传输报文
  • 和IMAP一样,用户可以在远程服务器上用文件夹来组织他们的邮件

理解HTTP、FTP、SMTP设计上的不同

  • HTTP、FTP、SMTP均是在TCP连接上传输文件,但是在设计上有一些不同
  • 使用持久连接或非持久连接:
  • HTTP可在一条TCP连接上传输多个对象,SMTP可以传输多个邮件,FTP只传输一个文件
  • 文件传输结束的标记:
  • HTTP使用长度指示报文结束,FTP使用关闭连接表示文件结束,SMTP使用“.”表示报文结束
  • 文件中的内容要求:
  • SMTP要求邮件只包含简答ASCII文本,FTP和HTTP无此要求(为此,SMTP在传输其他类型内容是需要特殊处理)
  • HTTP采用报文交互,SMTP和FTP采用命令
  • Web和文件传输只是用一种应用层协议,电子邮件传输和邮件访问两种协议