电子邮件(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】
【用户代理:user agent,邮件服务器:mail server,绿色的是报文队列(message queue),黄色的是用户邮件箱(user mailbox)】
EMail:SMTP[RFC 2821]
- 使用TCP在客户端和服务器之间传送报文,端口号为25
- 直接传输:从发送方服务器到接收方服务器
- 传输的3个阶段
- 握手
- 传输报文
- 关闭
- 命令/响应交互
- 命令:ASCII文本
- 响应:状态码和状态信息
- 报文必须为7位ASCII码【规定了传输的内容必须是ASCII码范围,否则不允许传】
举例:Alice给Bob发送报文
【②④是SMTP协议,⑥是POP3、IMAP、HTTP】
【为什么要放在队列中再发,而不是直接发走?邮件服务器维护的用户数很多,用队列平滑以下进来和出去的速度;邮件不是来了就发,设置成几分钟后攒到一起再发,不让服务器那么劳累,每时每刻都处在一个待命的状态也很耗能】
简单的SMTP交互
SMTP:总结
- SMTP使用持久连接【建立连接之后连接不关的,把邮件发完之后再关。】
- SMTP要求报文(首部和主体)为7位ASCII编码【可打印,打印完之后可以读的】
- SMTP服务器使用CRLF,CRLF决定报文的尾部
与HTTP比较:
-
- HTTP:拉(pull)
- SMTP:推(push)
- 二者都是ASCII形式的命令/响应交互、状态码
- HTTP:每个对象封装在各自的响应报文中
- SMTP:多个对象包含在一个响应报文中【一个邮件可以有多张图片、视频、音频、文字、文档】
邮件报文格式
SMTP:交换Email报文的协议
【头部包含头部的名称和头部的值,最常见的头部名称是To:(给谁),From(谁发的),Subject(标题),CC(抄送,发给你同时抄送给另外一个人,另一个人知道已经发送了。还有一种叫暗抄(暗自抄送),发送给你同时抄送给另一个人,你还不知道,就叫暗自抄送)】
如何传输包含非ASCII文本的报文?
- 现在的电子邮件要求能传输其他语系的文字,甚至非文本信息(如图片、语言等)
- 非ASCII文本形式的数据在发送前须转换成简单ASCII文本
- 非ASCII文本的报文大多具有特殊的数据类型,需要特殊的邮件浏览器(如JPEG图形的解压缩软件)来解读
- 需扩展类型
报文格式:多媒体扩展
- MIME:多媒体邮件扩展(multimedia mail extension),RFC 2045,2056
- 在报文首部用额外的行申明MIME内容类型
base64编码:把若干个不在ASCII码范围内的字节把它转换为更长一点的在ASCII码范围内的字符,这样就可以通过SMTP协议去传输了。到对方之后,用base64转换出来,再用MIME再解释出来这个邮件包括那些东西。
邮件的两阶段交付
- 在具有永久因特网连接的计算机上运行一个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协议来收发邮件】
- POP:邮局访问协议(Post Office Protocol)[RFC 1939]
POP3协议
【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和文件传输只是用一种应用层协议,电子邮件传输和邮件访问两种协议