1. 文件传输协议基础:FTP与SFTP的本质区别
第一次接触文件传输协议时,我也曾被各种缩写搞晕。简单来说,FTP(File Transfer Protocol)就像是用明信片寄送重要文件,而SFTP(SSH File Transfer Protocol)则是用保险箱运送。两者都能完成文件传输任务,但安全性天差地别。
FTP诞生于1971年,比互联网的普及还早。它使用两个通道:命令通道(端口21)和数据通道(端口20)。想象你在餐厅点餐,服务员记下订单(命令通道)后,厨房通过传菜窗口(数据通道)上菜。这种设计在当时很先进,但存在严重安全隐患——所有信息都是明码传输,包括你的用户名和密码。
SFTP则是SSH协议家族的成员,工作在22端口。它把整个传输过程封装在加密隧道里,就像把文件装进防弹运钞车。我曾在项目中使用SFTP传输财务数据,即使被中间人截获,看到的也只是乱码。这种安全性让SFTP成为医疗、金融等行业的首选。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 协议工作机制详解:从握手到传输
2.1 FTP的两种传输模式
FTP的主动模式(PORT)就像快递员上门取件:客户端告诉服务器"我在1234端口等你"(通过PORT命令),服务器从20端口主动连接客户端。这在家庭网络会遇到问题——路由器防火墙通常阻止外部主动连接。我曾花了三小时排查为什么家里的FTP客户端连不上公司服务器,最后发现是路由器拦截了主动连接。
被动模式(PASV)则像客户自提:服务器开一个随机高端口(比如5001),告诉客户端"来这个地址取文件"。现代网络环境下,被动模式更常用。但要注意服务器防火墙设置,我有次在AWS上配置FTP服务,就因为安全组没放行高端口范围导致传输失败。
2.2 SFTP的SSH封装机制
SFTP的工作方式完全不同。它不需要单独监听端口,而是复用SSH的22端口。当你建立SFTP连接时,实际是先建立SSH会话,然后在加密隧道内进行文件操作。这带来几个优势:
- 单端口管理更简单
- 继承SSH的密钥认证体系
- 支持断点续传等高级功能
在Linux服务器上配置SFTP特别方便,通常只需确保sshd服务运行,然后通过ssh-keygen设置密钥认证。我习惯用以下命令测试连接:
bash复制sftp -i ~/.ssh/id_rsa user@example
