自学教程 从零学编程

FTP 协议

一、FTP 是什么

FTP(File Transfer Protocol,文件传输协议),是一套应用层协议,专门用于在网络上传输文件。
它可以在两台主机之间上传、下载、重命名、删除文件与目录,早期广泛用于网站代码发布、文件共享。

前置:FTP 基于 TCP 协议,是面向连接、可靠传输,默认不加密。

二、FTP 双端口模型(重点)

FTP 最特别的地方:使用两条独立的 TCP 连接

  1. 控制连接(命令通道)
    • 默认端口:21
    • 作用:持续保持连接,传输命令和响应(登录、列出目录、上传/下载指令)
    • 生命周期:从客户端连接服务器开始,直到整个FTP会话结束才断开。
  2. 数据连接(数据通道)
    • 端口:主动模式下服务器用 20;被动模式由服务器随机开放高位端口
    • 作用:只用来传输文件内容、目录列表
    • 生命周期:临时连接,每次文件传输完成,数据连接就关闭。

一句话记忆:21端口发命令,20端口传数据(主动模式)

三、两种工作模式:主动模式 vs 被动模式

1. 主动模式(PORT模式)

  • 客户端先建立到服务器21端口的控制连接;
  • 客户端开放一个本地高位端口,把自己IP+端口通过PORT命令发给服务端;
  • 由服务器主动发起TCP连接,从服务器20端口连到客户端这个端口,建立数据通道。
  • 问题:客户端如果在防火墙/NAT内网,服务器主动连客户端大概率被防火墙拦截。

现在内网环境,主动模式很少用。

2. 被动模式(PASV模式)【最常用】

  • 控制连接依然是客户端连服务器21端口;
  • 客户端发送 PASV 命令;
  • 服务器在本机开放一个随机高位端口,告诉客户端;
  • 由客户端主动发起连接,连接服务器这个随机端口,建立数据通道。
  • 优点:全部连接都是客户端向外发起,更容易穿过防火墙、NAT,现在FTP客户端默认都是被动模式。

四、FTP 常见命令(控制通道交互)

客户端向FTP服务器发送文本命令,服务器返回数字状态码+描述。

命令作用
USER输入用户名
PASS输入密码
LIST列出当前目录下文件
CWD切换目录
PUT上传文件
GET下载文件
DELE删除文件
QUIT退出,关闭控制连接

常见响应码:

  • 200 OK:命令执行成功
  • 220:服务器就绪,欢迎登录
  • 331:用户名正确,需要输入密码
  • 530:登录失败(账号密码错误)

五、FTP 优缺点

✅ 优点

  1. 专门为文件传输设计,支持断点续传(部分客户端支持)、批量文件;
  2. 支持目录操作,权限管理;
  3. 基于TCP,传输可靠,不会丢包。

❌ 缺点

  1. 明文传输:账号、密码、文件内容全部裸奔,很容易被抓包窃取;
  2. 双连接模式,防火墙/NAT配置麻烦;
  3. 现在逐渐被更安全的方案替代。

六、FTPS / SFTP(容易混淆,区分清楚)

很多人把这几个搞混:

  1. FTP:原始FTP,明文,端口21;
  2. FTPS(FTP over SSL/TLS):FTP + SSL加密,依然是FTP协议,加密传输,端口21(也可990);
  3. SFTP(SSH File Transfer Protocol):不是FTP! 是SSH协议自带的文件传输子系统,基于SSH(22端口),加密,运维现在最推荐使用SFTP,替代传统FTP。

重点:SFTP ≠ FTP,底层是SSH,不是FTP协议。

七、简单工作流程示例(被动模式)

  1. 客户端 TCP 连接服务器 21端口,建立控制连接;
  2. 客户端发送 USER、PASS 完成身份认证;
  3. 客户端发送 PASV,服务器返回一个随机端口;
  4. 客户端新建TCP连接,连接服务器该随机端口(数据通道);
  5. 客户端发送 LIST,服务器通过数据通道返回目录列表;
  6. 客户端发送 GET,开始下载文件;文件传输完毕,数据连接关闭;
  7. 可以继续执行其他命令;最后发送 QUIT,关闭控制连接,会话结束。

八、小结

  1. FTP 应用层协议,基于TCP;控制连接21端口,数据连接分主动/被动模式;
  2. 主动模式:服务器主动连客户端;被动模式:客户端主动连服务器(推荐);
  3. FTP明文不安全,新项目优先使用 SFTP;
  4. FTP有两条独立TCP连接:控制连接长期存活,数据连接用完即关。

思考题:为什么FTP要设计两条独立连接,而不是像HTTP只用一条连接传输命令+数据?

标签:

0 条笔记