Loading... # 应用层(三) 参考链接:[【FTP】详解 - peterYong - 博客园 (cnblogs.com)](https://www.cnblogs.com/peterYong/p/8630542.html#_label0_0) ## FTP(File transfer protocol) ### 传输过程 ![请输入图片描述](http://xherlock.top/usr/uploads/2022/03/630943942.png) 可以向远程主机传输文件或传来文件 * 用户首先提供远程主机名字,使本地的FTP客户进程与远程FTP服务器进程建立TCP命令连接(端口:21) * 用户接着提供用户标识和密码,通过TCP连接作为FTP指令传给服务器 * 服务器授权用户控制连接,用户浏览和发送指令到远程文件系统 * 服务器接收到传输指令,打开第二个与客户端的TCP数据连接(端口:20) * 传输完一个文件,服务器就关闭数据连接(非持久性,而控制连接始终保持开启,是持久性);当再需要文件传输就再打开一个传输连接 ![image-20220324095326017.png](http://xherlock.top/usr/uploads/2022/03/3518927890.png) ### **FTP VS HTTP** | | FTP | HTTP | | ---------------------- | ------------------------------------------------------ | ------------------------------------ | | 作为支撑的运输层协议 | TCP | TCP | | 协议类型 | 文件传输协议 | 超文本传输协议 | | 面向对象 | 文件 | 网页 | | 默认端口 | 21、20 | 80 | | 使用连接 | 2个:控制和数据连接 | 1个 | | 持久性 | 控制连接持久<br>数据连接非持久 | 既可持久也可非持久<br>默认持久连接 | | 控制信息 | 带外(out of band)传送 | 带内(in band)传送 | | 状态 | 状态协议(整个会话期间必<br>须持续追踪用户状态信息) | 无状态协议 | ### FTP命令 * USER username * PASS password * LIST 返回当前目录的文件 * RETR filename:取出远程主机的当前目录下的文件(建立data connection) * STOR filename:存储文件到远程主机的当前目录 ### FTP回复 状态码+短语(类似HTTP) * 331 Username OK, password required * 125 data connection already open; transfer starting * 425 Can't open data connection * 452 Error writing file ### 补充 * 在FTP中,文件组织为records、pages或a stream of bytes,它们属于FTP的数据结构 * 在FTP中,有三类transmission modes:stream、block和compressed * In FTP, ASCII, EBCDIC, and image define an attribute called file type ## 因特网中的电子邮件 最早发展的流行应用程序,当今因特网最重要和实用的应用程序之一 电子邮件是一种异步(asychronous)通信媒介,方便时就可以收发邮件,更加快捷便宜分发;现今的电子邮件还包括有许多强大的特性,包括具有附件、超链接、HTML格式文本和图片的报文 **3大主要组成部分** * 用户代理(user agents):相当于邮件阅读器,具有撰写、编辑、阅读、回复、转发、保存邮件报文的功能 * 邮件服务器(mail server):形成了电子邮件系统的核心,邮箱(mailbox)管理和维护发送到的报文,报文队列(message queue)存放要发送的邮件消息 * 简单邮件传输协议(SMTP,Simple Mail Transfer Protocol) 当一个邮件服务器向其他邮件服务器发送邮件,其作为SMTP的客户;当邮件服务器从其他邮件服务器接收邮件时,其作为SMTP的服务器 ### SMTP 使用TCP传输邮件报文,端口为**25**,持久连接,报文必须用7位ASCII码标识 ![image-20220325172856807.png](http://xherlock.top/usr/uploads/2022/03/2349450511.png) #### 传输过程: 握手$\rightarrow$报文传输$\rightarrow$关闭 * A使用邮件代理程序编写邮件,填写接收人B的邮箱地址 * A的用户代理将报文发给它的邮件服务器,报文放在报文队列 * A的SMTP客户端创建到B的邮件服务器的TCP连接 * SMTP握手后发送A的报文 * B的SMTP服务器端接收报文后放在B的邮箱中 * B方便时就可以使用用户代理来阅读邮件 ![image-20220325174935434.png](http://xherlock.top/usr/uploads/2022/03/3800556900.png) SMTP命令:HELO、MAIL FROM、RCPT TO、DATA、CRLF.CRLF、QUIT **实操** telnet连接邮箱端口25 ![image-20220325185053541.png](http://xherlock.top/usr/uploads/2022/03/1719550202.png) 向smtp发送helo指令,返回250 OK ![image-20220325185216331.png](http://xherlock.top/usr/uploads/2022/03/167937512.png) 登录smtp服务器,账号和授权码均需要base64编码 ![image-20220325190857827.png](http://xherlock.top/usr/uploads/2022/03/772081892.png) 写邮件发送和接收方 ![image-20220325200334665.png](http://xherlock.top/usr/uploads/2022/03/1306984720.png) 输入data进入邮件报文撰写,显示header lines的发送方、接收方和主题,接着空一行写邮件内容,写完后换行输入点号结束,发送即可成功 ![image-20220325200326568.png](http://xherlock.top/usr/uploads/2022/03/3887030261.png) ![QQ图片20220325200520.png](http://xherlock.top/usr/uploads/2022/03/116860454.png) 貌似有些字符乱了…… #### 与HTTP的对比 | | SMTP | HTTP | | ------------------ | ------------------------------------------------ | ------------------------------------ | | 功能(传送文件) | 从一个邮件服务器向另一个传送电子邮件报文 | 从Web服务器向Web客户传送对象 | | 拉/推协议 | 推协议:发送邮件服务器把文件推向接收邮件服务器 | 拉协议:从服务器拉取文件 | | 数据格式 | 7-bit ASCII | 无所谓 | | 封装 | 所有报文对象放在一个报文之中 | 把每个对象封装到自己的HTTP响应报文 | | 状态 | 状态协议 | 无状态协议 | | 连接 | 持久连接 | 持久、非持久均可 | #### 邮件报文格式 ![image-20220325181309418.png](http://xherlock.top/usr/uploads/2022/03/4028614012.png) 类似信件格式 **header lines:** * To:(required) * From:(required) * Subject:(optional) **body:** * ASCII * MIME(Multiple Internet Mail Extensions,多用途互联网邮件扩展):通过添加额外的头部行信息实现内容的扩展 eg:MIME-Version、Content-Transfer-Encoding、Content-Type ### 邮件访问协议 邮件由A交给B,B肯定不可能一直开着PC,所以邮件服务器交由ISP进行维护,保持开机。但是用户代理不能使用SMTP得到报文,因为取报文是一个拉操作,而SMTP是一个推协议。因此引入一个特殊的**邮件访问协议**来解决,eg:POP3、IMAP、HTTP #### POP3(Post Office Protocol——Version 3,第三版邮局协议) 端口110,三个阶段:**认证(authorization)——事务处理(transaction)——更新(update)** `认证`:用户代理发送用户名和密码鉴别用户 user 账户 pass 密码 server response:+OK/-ERR `事务处理`:用户代理取回报文(同时可以对报文进行删除标记,取消标记以及获取邮件的统计信息) list:列出报文号和大小 retr 报文号:根据报文号显示报文全部内容 dele 报文号:删除 quit 在这个阶段,用户代理通常被用户配置为“**下载并删除**”或“**下载并保留**” 下载并删除:邮件接收方可能是移动的,客户端变化后无法查看和访问邮件 下载并保留:不同客户端都存储着报文 `更新`:出现在quit命令后,结束POP3会话,邮件服务器删除被标记为删除的报文 POP3会话期间不携带状态信息,属于无状态协议 #### IMAP(Internet Mail Access Protocol,因特网邮件访问协议) POP3无法建立远程文件夹存放报文,因此有了IMAP;IMAP会话期间始终保持状态信息 #### HTTP 基于浏览器的邮件管理,现在qq邮箱等就是这样的 最后修改:2022 年 06 月 13 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 1 如果觉得我的文章对你有用,请随意赞赏