• 网络协议-应用层协议-文件传输协议


    FTP 的英文全称是 File Transfer Protocol,意为文件传输协议,也就是在两个相连的计算机(通常是本地主机与服务器)之间进行文件传输的协议

    FTP 底层原理

    FTP 使用两个 TCP 连接实现文件传输:一个 TCP 连接用于控制,另一个 TCP 连接用于数据传输。

    控制主要包含用户登录和验证、发送文件的名称、发送方式设置等。利用这个连接,可以通过 ASCII 码字符串发送请求和接收应答。但在这个连接上无法发送数据,只能通过另一个专门的 TCP 连接实现数据传输。

    FTP 控制用的连接使用的是 21 号端口,该端口进行文件 GET(RETR)、PUT(STOR)、以及文件预览(LIST)等操作时,每次都会建立一个用于数据传输的 TCP 连接。数据传输完毕后,传输数据的这个连接被断开,然后在控制用的连接上继续进行命令或应答的处理。

    控制用的连接,在用户要求断开之前会一直保持连接状态,不过,绝大多数 FTP 服务器都会对长时间没有任何新命令输入的用户的连接强制断开。

    数据传输用的连接通常使用端口 20,不过可以用 PORT 命令修改为其它值。

    FTP 文件传输

    以上就是 FTP 的大致原理,我们要使用 FTP 传输文件,需要准备好客户端和服务端守护进程,客户端一般就是支持 FTP 文件传输的软件,比如 FileZilla,而服务端守护进程就是 vsftpd,可以参考这篇教程进行安装配置。

    服务器端守护进程启动以后,就会监听 21 号端口等待连接,然后我们可以通过前面介绍的 TELNET 在命令行测试连接到远程 FTP 服务器:

    ~ telnet 114.215.241.29 21   # 远程主机IP和端口号
    Trying 114.215.241.29...
    Connected to 114.215.241.29.
    Escape character is '^]'.
    220 (vsFTPd 3.0.2)
    USER ftpuser   # 通过 USER 指令设置 FTP 用户名
    331 Please specify the password.
    PASS ********  # 通过 PASS 指令设置 FTP 用户密码
    230 Login successful.   # 返回 230 表示认证成功
    

    然后,我们可以通过 FTP 支持的命令在 TELNET 客户端中进行文件传输操作。常见的 FTP 命令如下:


    下面是常见的 FTP 服务器返回响应状态码:



    当然,用命令行操作不够直观,也不太方面,我们通常还是使用 FTP 客户端软件进行操作,以 FileZilla 为例,连接远程 FTP 服务器成功后,页面显示如下:

    其中左侧区域是本地计算机的目录信息,右侧区域是服务器端默认的 FTP 用户家目录,现在服务器对应目录还没有任何文件,可以将本地主机文件上传过去,之后也可以从服务器下载文件到本地:

    其实底层调用的也就是前面列出的 FTP 远程操作命令。

    FTP 在传输过程中不会对信息进行加密,都是明文传输,因而有被窃听和侵入的风险,由此衍生出了安全的文件传输协议 SFTP(SSH File Transfer Protocol),它会使用 SSH 协议进行身份验证并建立安全连接,所以推荐在日常使用时优先考虑 SFTP,上面介绍的服务端 vsftpd 和客户端 FileZilla 都支持 SFTP,感兴趣的同学可以自行研究下实现,这里就不深入展开了。

  • 相关阅读:
    shell之ping减少时间间隔&ping的次数&用IP1去ping IP2的技巧
    kali界面乱码解决方案记录
    win10子系统kali-linux安装图形化界面总结
    树莓派4 64bit 编译安装QT5.13.2 和 Redis Desktop Manager 2020.1-dev
    树莓派4 (8GB) RaspiOS 64 bit 入手配置流程 2020-06-10
    阿里巴巴Java开发手册(泰山版)个人阅读精简
    Java 8 新API Steam 流 学习笔记
    IDEA中maven项目部署到云服务器上(简易)
    收藏模块的设计
    js常用代码片段(更新中)
  • 原文地址:https://www.cnblogs.com/stringarray/p/12968478.html
Copyright © 2020-2023  润新知