FTP
-
FTP 服务器与客户端建立的连接包括 “控制连接” (控制连接也叫带歪连接 out of bound)和 “数据连接”;控制连接负责传输指令,数据连接用来收发数据。 -
数据连接是服务器主动向客户端发起的连接 : 客户端率先向服务器请求 “控制连接”,连接成功之后如果要从服务器下载文件,那么服务器将主动与客户端建立 “数据连接” 然后将数据发送给客户端 -
FTP 的连接也是依靠 TCP 协议 -
在控制连接上,客户端可以向服务器发出一系列的指令
- list 文件列表
- 进入某些目录
- download 某些文件
- upload 某些文件
-
FTP 是有状态协议(HTTP 是无状态协议):因此 FTP 需要在服务器上维护客户的状态(当前连接的是谁,处在什么目录),而且每次用户建立连接的时候都需要提供身份认证。
FTP 的命令 & 响应
EMail(邮件传输协议)
组成部分
- 用户代理:用于收发邮件的客户端软件(outlook, gmail)等
- 邮件服务器
- 简单邮件传输协议 SMTP
- 拉取协议:
用户代理
- 通过代理软件来访问电子邮件应用;例如 Web 应用的用户代理是 web 浏览器,FTP 应用的用户代理是 FTP 客户端软件。因为客户不能直接与应用层的数据打交道,因此其实是我们通过一个客户端软件来完成与数据的交互,所以这些客户端软件是我们的用户代理
邮件服务器
- 客户端:发送方的邮件服务器
- 服务器:接收端的邮件服务器
- 每次用户想发送邮件的时候,通过用户代理将邮件发送到己方邮件服务器的队列中;然后依次发送到目标邮件服务器。
- 邮件服务器接收到来自其他邮件服务器的邮件时,将接收到的邮件分发到对应的用户的邮箱当中(依然在服务器上),然后用户通过用户代理(使用 POP3, IMAP, HTTP 等拉取协议呈现到用户的客户端(本地))
示例
- 假设你使用 google 的邮箱服务器,然后你想对一个使用 outlook 邮箱的学生 B 发一封邮件 e。
- 首先 e 在你的本地电脑的 gmail 应用上(代理)写好后,点击发送,这时候 e 会被放入 google 邮箱服务器的队列中,当攒齐了一定数量的邮件,会统一发送出去
- e 到达了对应的 outlook 邮箱服务器,outlook 根据客户的不同分发到各个用户的邮箱当中(在服务器上)
- B 在本地的邮箱客户端(用户代理)上对邮件的内容进行拉取(POP3, IMAP, HTTP协议等),并且查看
- 这个过程中,邮件服务器之间的通信协议是 SMTP(简单邮件传输协议);而在用户代理将邮件拉取下来呈现给用户的时候使用的是 拉取协议
SMTP 协议
SMTP 总结 & 与 HTTP 的对比
- 持久连接,google 和 outlook 服务器之间很多不同的用户进行邮件通信,因此服务器连接是持久的,这个不同于 HTTP 的短连接
- SMTP 要求报文(首部和主体)都是 7 位 ASCII 码的编码范围(古老的标准,现在都已经更新了,这种版本没办法发中文)
- SMTP 是将报文推出去,而 HTTP 是将内容拉取回来
- HTTP 的每个对象被封装在各自的响应报文中;而 SMTP 的多个对象包含在一个响应的报文中(一个邮件可以包含三张图片,一段录音…等等内容)
报文格式
报文格式的多媒体扩展
- 如果发送的内容是中文,那么无法用 ascii 码表示,这个时候需要进行编码来扩展这些操作;例如 base64 编码:将几个不在 ascii 码范围内的内容编码成长一点的,在 ascii 范围之内的内容(通过映射完成);对方接收到内容之后只要同样使用 base64 进行解码就可以得到同样的内容了
POP3 协议
- pop3 在会话中 是无状态的协议;它只维护不同用户的登录状态(你是谁,你应该匹配哪个邮箱),但是不在邮箱中维护状态(无论你在哪里用哪台 pc 登录的邮箱,在邮箱中的操作是不记录状态的,下次在别的地方登录之后还是初始的界面,不会按照上次的断点进行浏览)。
用户确认阶段
事务处理阶段
list
- 展示报文号列表:上图中可以表示邮箱中有两个邮件,第一个邮件 498 字节,第二号邮件 912 字节
retr
- 将对应编号的邮件拉到本地客户端,例如 retr 1 就是将 1 号邮件拉到本地提供给用户
dele
- 客户端向邮件服务器发出的命令,例如上面我们再客户端 retr 1 之后,将邮箱中的 1 号邮件删除
- 这种 retr + dele 的方式叫做:下载并删除模式
- 也可以自己设置,不进行 dele 操作,保留邮箱中的邮件
quit
POP3 V.S. IMAP
- IMAP 允许将每个报文与一个文件夹联系起来
- 允许用户用目录来组织报文
- 允许用户读取报文组件
- IMAP 在会话过程中保留用户状态:
- 目录名,报文 ID 与目录之间的映射(远程管理文件夹)
|