-
FTP协议
FTP协议
- FTP文件传输协议: 网络共享文件的传输协议, 提高文件共享性和可靠高效地传输数据
- 工作流程
- 传输文件时, FTP客户端程序先与服务器建立连接, 向服务器发送命令
- 服务器收到命令后给予响应(判断命令是否成功执行), 执行命令
- 与操作系统无关, 任何操作系统的程序只需符合FTP协议, 可相互传输数据
- 比HTTP协议复杂: 一般C/S应用通常只建立一个Socket连接, 同时处理服务端与客户端连接命令与数据传输; FTP将命令与数据分开传送
- 双端口: 数据端口20, 命令端口(控制端口)21
- 数据Socket传送数据, 控制Socket传送命令
命令端口
- 客户端有一个Socket连接FTP服务器相关端口, 负责FTP命令的发送和接收返回的响应信息
数据端口
主动模式PORT
- 客户端发送端口号给服务器端, 在此端口监听; 服务器连接到客户端开启的数据端口传输数据
- 过程
- 客户端随机打开一个大于1024的端口向服务器命令端口P(21端口)发起连接, 开放N+1端口监听, 向服务器发出portN+1命令, 由服务器从自己的数据端口(20)主动连接到客户端指定数据端口(N+1)
- FTP客户端仅告知服务器自己的端口号, 让服务器连接客户端指定端口; 对客户端防火墙, 此从外部到内部连接, 可能被阻塞

被动模式PASV
- 服务器端返回一个端口号, 客户端另开一个Socket连此端口, 根据操作发送命令; 数据新开端口传输
- 命令连接与数据连接由客户端发起, 解决了从服务器到客户端的数据端口连接被防火墙过滤问题
- 过程
- 开启一个FTP连接时, 客户端打开两个任意本地端口(N>1024, N+1)
- 第一个端口连接服务器21端口, 提交PASV命令,
- 服务器开启一个任意端口(P>1024), 返回"227 entering passive mode(h1,h2,h3,h4,p1,p2)"
- h1,h2,h3,h4: 服务器地址
- p1,p2: p1<<8+p2端口号
- 客户端收到命令取得端口号, 通过N+1号端口连接服务器端口P

- 每个命令有3~4字母组成, 与参数空格隔开, "\r\n"结束
- 下载/上传文件, 先登入FTP服务器, 发送命令, 退出
- USER: 用户名, 控制连接后第一个发出的命令,
USER ZCZC\r\n - PASS: 用户密码, 跟在USER命令后,
PASS ZCZC\r\n - SIZE: 服务器上返回指定文件(若存在)大小,
SIZE file.txt\r\n - CWD: 改变工作目录,
CWD dir\r\n - PASV: 服务器在数据端口监听, 进入被动模式,
PASV\r\n - PORT: 告诉FTP服务器客户端监听的端口号, 让FTP服务器主动模式连接客户端,
PORT h1,h2,h3,h4,p1,p2 - RETR: 下载文件,
RETR file.txt\r\n - STOR: 上传文件,
STOR file.txt\r\n - REST: 略过指定点后的数据, 其后跟其他要求文件传输的FTP命令,
REST 100\r\n, 重新指定传送偏移量100字节 - QUIT: 关闭与服务器连接,
QUIT\r\n
FTP响应码
客户端发送FTP命令后, 服务器返回响应码
- 数字1: 命令状态
-
- 服务器正确接收信息, 未处理
-
- 服务器正确处理信息
-
- 服务器正确接收信息, 正在处理
-
- 信息暂时错误
-
- 信息永久错误
- 数字2: 相应类型分类
-
- 语法
-
- 系统状态与信息
-
- 连接状态
-
- 与用户认证相关信息
-
- 未定义
-
- 文件系统相关信息
- 数字3: 更详细信息
ref
-
相关阅读:
【servelt原理_6_servlet核心接口和类】
在 Excel 中使用 Python 自动填充公式
Unity3D学习笔记9——加载纹理
倍福TwinCAT3 Ads相关错误详细列表
json、pikcle序列化模块
npm发布自己的插件包
低代码助力中小企业数字化
Java中的数组注意点
[补题记录] Atcoder Beginner Contest 308(C~E)
第三方包移交maven管理方法
-
原文地址:https://blog.csdn.net/weixin_46143152/article/details/127625645