• 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
    • 在这里插入图片描述

    主要FTP命令

    • 每个命令有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: 命令状态
        1. 服务器正确接收信息, 未处理
        1. 服务器正确处理信息
        1. 服务器正确接收信息, 正在处理
        1. 信息暂时错误
        1. 信息永久错误
    • 数字2: 相应类型分类
        1. 语法
        1. 系统状态与信息
        1. 连接状态
        1. 与用户认证相关信息
        1. 未定义
        1. 文件系统相关信息
    • 数字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