FTP(File Transfer Protocol,文件传输协议)和SFTP(SSH File Transfer Protocol,SSH文件传输协议)是两种常用的文件传输协议。虽然它们的功能相似,但在安全性、工作原理和使用场景上有很大区别。
FTP是一种传统的文件传输协议,诞生于1971年,是互联网上最古老的协议之一。
FTP 双端口连接模式
sequenceDiagram
participant C as FTP客户端
participant S as FTP服务器
Note over C,S: 控制连接 (端口21)
C->>S: CONNECT 21
S->>C: 220 Ready
C->>S: USER anonymous
S->>C: 331 Guest login ok
C->>S: PASS email@example.com
S->>C: 230 User logged in
Note over C,S: 数据连接 (动态端口)
alt 主动模式 PORT
C->>S: PORT 5000
S->>C: 200 PORT command okay
S->>C: CONNECT 5000
else 被动模式 PASV
C->>S: PASV
S->>C: 227 Entering Passive Mode (192,168,1,100,117,56)
C->>S: CONNECT 192.168.1.100:30000
end
S->>C: 150 Opening data connection
**问题**:客户端有防火墙时,服务器的入站连接可能被阻止
**优点**:适应客户端防火墙,是目前主流模式
SFTP是基于SSH(Secure Shell)的文件传输协议,提供了安全的文件传输功能。
SSH/SFTP 密钥交换流程
sequenceDiagram
participant C as SFTP客户端
participant S as SFTP服务器
C->>S: KEX_INIT (算法列表)
S->>C: KEX_INIT (选定算法)
C->>S: DH_KEX_INIT (client public key)
S->>C: DH_REPLY (server公钥+签名)
Note over C: 验证服务器身份
(known_hosts)
C->>S: NEWKEYS
S->>C: NEWKEYS
Note over C,S: 加密隧道建立
文件传输开始
| 特性 | FTP | SFTP |
| --- | --- | --- |
| **安全性** | 低(明文传输) | 高(加密传输) |
| **默认端口** | 21(控制)+ 数据端口 | 22 |
| **加密方式** | 无(或可选FTPS) | SSH加密 |
| **认证方式** | 用户名/密码 | 密码/公钥/多因素 |
| **防火墙配置** | 复杂(多端口) | 简单(单端口) |
| **传输速度** | 稍快(无加密开销) | 稍慢(加密有开销) |
| **功能** | 文件传输 | 文件传输+远程操作 |
| **兼容性** | 所有系统 | 大多数系统 |
| **推荐使用** | 内网、非敏感数据 | 公网、任何数据 |
FTP / FTPS / SFTP 对比
flowchart LR
subgraph FTP["FTP (明文)"]
F1["端口 21 控制连接"]
F2["明文传输用户名/密码"]
F3["无内置加密"]
end
subgraph FTPS["FTPS (FTP over TLS)"]
FT1["端口 21 + 隐式/显式 TLS"]
FT2["证书加密"]
end
subgraph SFTP["SFTP (SSH File Transfer)"]
S1["端口 22 (SSH 协议)"]
S2["SSH 加密传输"]
S3["无单独证书"]
end
style FTP fill:#e74c3c,color:#fff
style FTPS fill:#f39c12,color:#fff
style SFTP fill:#27ae60,color:#fff
注意不要混淆FTPS和SFTP:
---
**延伸阅读**:
**相关工具**: