FTP 教程

🌙
手机阅读
本文目录结构

FTP

文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层, 使用 TCP 传输而不是 UDP, 客户在和服务器建立连接前要经过一个“三次握手”的过程, 保证客户与服务器之间的连接是可靠的, 而且是面向连接, 为数据传输提供可靠保证。

FTP 允许用户以文件操作的方式(如文件的增、删、改、查、传送等)与另一主机相互通信。然而, 用户并不真正登录到自己想要存取的计算机上面而成为完全用户, 可用 FTP 程序访问远程资源, 实现用户往返传输文件、目录管理以及访问电子邮件等等, 即使双方计算机可能配有不同的操作系统和文件存储方式。

原理

FTP 采用 Internet 标准文件传输协议 FTP 的用户界面, 向用户提供了一组用来管理计算机之间文件传输的应用程序。

FTP 是基于客户———服务器(C/S)模型而设计的,在客户端与 FTP 服务器之间建立两个连接。

开发任何基于 FTP 的客户端软件都必须遵循 FTP 的工作原理,FTP 的独特的优势同时也是与其它客户服务器程序最大的不同点就在于它在两台通信的主机之间使用了两条 TCP 连接,一条是数据连接,用于数据传送;

另一条是控制连接,用于传送控制信息(命令和响应),这种将命令和数据分开传送的思想大大提高了 FTP 的效率,而其它客户服务器应用程序一般只有一条 TCP 连接。图 1 给出了 FTP 的基本模型。客户有三个构件:用户接口、客户控制进程和客户数据传送进程。

服务器有两个构件:服务器控制进程和服务器数据传送进程。在整个交互的 FTP 会话中,控制连接始终是处于连接状态的,数据连接则在每一次文件传送时先打开后关闭。

FTP 实现的目标

  • 促进文件的共享(计算机程序或数据)Gnome-fs-ftp.png
  • 鼓励间接或者隐式的使用远程计算机
  • 向用户屏蔽不同主机中各种文件存储系统(File system)的细节
  • 可靠和高效的传输数据

支持模式

FTP 客户端发起 FTP 会话,与 FTP 服务器建立相应的连接。FTP 会话期间要建立控制信息进程与数据进程两个连接。控制连接不能完成传输数据的任务,只能用来传送 FTP 执行的内部命令以及命令的响应等控制信息;数据连接是服务器与客户端之间传输文件的连接,是全双工的,允许同时进行双向数据传输。当数据传输完成后,数据连接会撤消,再回到 FTP 会话状态,直到控制连接被撤消,并退出会话为止。

FTP 支持两种模式:Standard (PORT 方式,主动方式),Passive (PASV,被动方式)。

Port 模式

FTP 客户端首先和服务器的 TCP 21 端口建立连接,用来发送命令,客户端需要接收数据的时候在这个通道上发送 PORT 命令。PORT 命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的 TCP 20 端口连接至客户端的指定端口发送数据。FTP server 必须和客户端建立一个新的连接用来传送数据。

Passive 模式

建立控制通道和 Standard 模式类似,但建立连接后发送 Pasv 命令。服务器收到 Pasv 命令后,打开一个临时端口(端口号大于 1023 小于 65535)并且通知客户端在这个端口上传送数据的请求,客户端连接 FTP 服务器此端口,然后 FTP 服务器将通过这个端口传送数据。

很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的 FTP 服务器不支持 PASV 模式,因为客户端无法穿过防火墙打开 FTP 服务器的高端端口;而许多内网的客户端不能用 PORT 模式登陆 FTP 服务器,因为从服务器的 TCP 20 无法和内部网络的客户端建立一个新的连接,造成无法工作。

安全性

FTP 不是一项安全的协议,并且具有许多安全漏洞。1999 年 5 月发布的 RFC 2577 中列出了以下几个主要的漏洞:

  • 蛮力攻击
  • FTP 反弹攻击
  • 数据包捕获
  • 端口窃取(猜测下一个开放端口并篡夺合法连接)
  • 欺骗攻击
  • 用户名枚举

通过 FTP 传输的流量不会被加密,所有传输通过明文进行的。任何能够在网络上执行数据包捕获( 嗅探 )的人都可以读取用户名、密码、命令内容和数据。此问题在加密机制(如 TLS 或 SSL)产生之前的许多 Internet 协议规范(如 SMTP 、Telnet 、POP 和 IMAP)中较为普遍。

此问题的常见解决方案包括:

  • 使用协议的安全版本,例如 FTPS 而不是 FTP,TelnetS 而不是 Telnet。
  • 使用可以处理作业的不同的,更安全的协议,例如 SSH 文件传输协议或安全复制协议 。
  • 使用安全隧道(如 Secure Shell 或虚拟专用网 )。

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了