• 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

  • 相关阅读:
    【分布式】分布式系统、Redis中间件 、Cache穿透、击穿、雪崩
    回归预测 | Matlab实现GWO-ESN基于灰狼算法优化回声状态网络的多输入单输出回归预测
    Java-基于SSM+JSP的二手手机回收管理系统
    vscode c/c++ 检测到 #include 错误。请更新 includePath。
    LLM Tech Map 大模型技术图谱
    Java 随笔 代理模式 2-JDK
    MMDetection3D库中的一些模块介绍
    知识图谱实战应用27-基于多模态数据的洪涝灾害知识图谱构建与实际应用
    2023NOIP A层联测17-爆炸
    docker 常用指令(启动,关闭,查看运行状态)
  • 原文地址:https://blog.csdn.net/weixin_46143152/article/details/127625645