无论是网盘还是云存储,上传都是一项很简单的操作。那些便捷好用的上传整理工具所用的 FTP 协议到底是什么意义,繁杂的模式又有何区别?

二狗子最近搭建了一个图片分享网站,每天都有好多人在他的网站上传许多照片,这些照片还会通过内部的逻辑同步到又拍云存储中,非常方便。

但不久后问题就来了,由于刚开始的用户照片管理规划没有做好,随着用户上传的图片越来越多,云存储的内容也越来越混乱,二狗子看着也非常难受。这不,趁着今天休息,二狗子决定好好的调整一番。

二狗子打开又拍云控制台,上上下下找了一番没有找到将对应文件移动到对应目录中的功能。向又拍云客服寻求帮助后,客服薇薇告诉他,可以通过 FTP 工具来管理云存储的文件,同时还提供了一篇详尽的帮助文档给二狗子 ——FTP 工具连接又拍云存储文档[https://help.upyun.com/knowledge-base/developer_tools/] 。

二狗子终于通过 FTP 工具连接上了云存储,一顿操作之后,二狗子成功把照片整理的整整齐齐。看着这个让强迫症患者满意舒适的存储界面,又看了看能够打造这个效果的 FTP 工具,二狗子满意的点了点头,决定一不做二不休彻彻底底的了解一下 FTP ,也看看 FTP 还有没有其他的好用功能了。

FTP、FTPS 与 SFTP 简介

FTP

在看相关功能之前,二狗子发现客户端有三种不同的协议,分别是 FTP、FTPS 与 SFTP,为了弄清楚这是什么,二狗子打开了万能的百科。

首先来了解一下什么是 FTP,维基百科说:FTP文件传输协议(英语:File Transfer Protocol 的缩写)是一个用于计算机网络上在客户端和服务器之间进行文件传输的应用层协议。完整的 FTP 是由 FTP 服务器 和 FTP 客户端组成的,客户端可以将本地的文件通过 FTP 协议上传到服务器,也可以将服务器的文件下载到本地。它是当今使用的最古老的文件传输协议之一,是一种非常便捷的移动文件的方式。

FTP 的工作原理

FTP 连接需要 FTP 服务器和客户端两方在网络上建立通信。建立 FTP 连接时会有两个不同的通信通道。一个被称为命令通道,它的作用是发出和响应指令。另一个为数据通道,用于客户端和服务器端进行数据交互。

使用 FTP 传输文件时,用户需要通过向 FTP 服务器提供凭据来获得文件传输许可。当然某些公共 FTP 服务器可能不需要凭据即可访问其文件,但是无法保证数据传输的安全性,任何未加密公共网络上的数据发送都是非常危险的,所以为了保护传输数据的安全,由 FTP 衍生而出的就是下面的两种协议:FTPS 与 SFTP。

FTPS

接下来二狗子查询了一下,发现 FPTS 有 FTPS 隐式 SSL 和 FTPS 显示 SSL 两种模式,两者都是用 SSL 加密。那么两者有什么区别呢?

  • FTPS 隐式 SSL:该模式通常在端口 990 上运行。在这个模式下全部数据的交换都需要在客户端和服务器之间建立 SSL 会话,并且服务器会拒绝任何不使用 SSL 进行的连接尝试。

  • FTPS 显式 SSL:显示 SSL 下服务器可以同时支持 FTP 和 FTPS 会话。开始会话前客户端需要先建立与 FTP 服务器的未加密连接,并在发送用户凭证前先发送 AUTH TLS 或 AUTH SSL 命令来请求服务器将命令通道切换到 SSL 加密通道,成功建立通道后再将用户凭证发送到 FTP 服务器,从而保证在会话期间的任何命令都可以通过 SSL 通道自动加密。

二狗子来给大家简单快速的总结一下。当启用隐式模式时,FTP 的默认端口就被改为 TCP/990,服务器自动建立安全连接,并且要求客户端也必须支持安全连接模式也就是使用 SSL 进行连接。当启用显式模式时,与 FTP 连接方式和默认端口一样,但是需要以命令 AUTH SSL/TLS 类型的命令进行激活安全连接后才能正常传输数据。

SFTP

最后大家来一起看看 SFTP,SFTP 是 Secure File Transfer Protocol 的缩写,也叫作安全文件传送协议。

如果说 FTPS 是在 FTP 协议上增加了一层 SSL ,那么 SFTP 就是是基于网络协议SSH(安全外壳)的协议与前面所说的 FTP 完全不同。SFTP 不使用单独的命令通道和数据通道,而是数据和命令都会通过单个连接以特殊格式的数据包进行传输。

SFTP 提供了两种验证连接的方法。

  • 与 FTP 一样,连接时只需要验证用户 ID 和密码就可以了。但是,与FTP不同的是,这些凭据是加密的,这是 SFTP 最主要的安全优势。

  • 除密码外,还可以通过 SSH 密钥来验证并通过 SFTP 协议连接。

了解了这几个协议之后,二狗子使用 FTP 客户端工具就更加顺手了,他可以根据自己的需求更改协议以及加密方式,而不用为不懂某个设置而烦恼。

但是,新的疑问又出现了,二狗子看到这里的传输设置中的传输模式,有主动和被动之分,这又是什么意思呢。不懂就问的他又打开了 Google...

FTP 软件的主动模式和被动模式的区别

主动模式

一般 FTP 的默认模式就是主动模式,也称为 port 模式。

它是通过两个步骤来进行工作的:

  • 首先客户端上的随机端口与服务器上的 FTP 端口 21 建立命令通道,客户端发送 PORT 命令,指定服务器与客户端其中一个端口连接,并建立数据通道。

  • 然后服务器从端口 20 连接到为数据通道指定的客户端端口。建立连接后,即可通过这些客户端和服务器端口进行文件传输。

被动模式

在传输方式栏,你还可以手动调整为被动传输模式,在该模式下用户端进行文件传输时,会先通过随机端口 A 连接到服务器上的端口 21,并发出 PASV 命令建立命令通道,告诉服务端这次是被动模式连接。之后服务器会打开一个随机端口用于数据传输,而客户端通过与发出命令的端口不同的随机端口 B 建立数据通道,从而进行文件传输。

被动模式与主动模式不同的地方就是客户端启动数据连接。在主动模式下,客户端在命令通道上建立连接后,服务器将启动与客户端的数据连接。而在被动模式下,建立命令通道后,由客户端启动与服务器的数据连接。

因为这个区别,可以得出两者的优势和缺陷。比如主动模式有利于管理 FTP 服务端,因为只需要打开 21 端口的“准入”、20 端口的“准出” 即可,但是由于服务器连接到客户端的端口随机,所以客户端有可能会触发防火墙,甚至直接被防火墙拦截掉。反之被动模式则有利于管理客户端。

没想到一个看似简单的存储工具居然还有着这么多的分类和区别,不同的模式不同的方式都可以对应不同的需求,看来以后在使用工具的时候还是可以多少了解一点相关知识,能让工具用起来更顺手更舒心~

推荐阅读

HTTP/3 来了,你了解它么?

TCP 和 UDP,哪个更胜一筹

浅谈 FTP、FTPS 与 SFTP的更多相关文章

  1. 浅谈FTP 与 LFTP 的 nlist 和 mget 功能

    最近因为业务需要,与第三方数据厂商做数据对接,接口方式协定为 FTP传输 ,说说我过程中的dan teng 经历. 开始准备用 lftp mirror 的方式镜像的方式同步数据,由于对方提供的日志文件 ...

  2. FTP、FTPS和SFTP

    FTP 一.两种传输方式 ASCII传输方式 假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那 ...

  3. Ftp、Ftps与Sftp之间的区别

    Ftp FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”.用于Internet上的控制文件的双向传输.同时,它也是一个应用程序(Applica ...

  4. FTP、FTPS、SFTP概览

    1. 基本概念 FTP:File Transfer Protocol FTPS:FTP over SSL.构建在SSL/TLS(Secure Socket Layer/Transport Layer ...

  5. 站长管理服务器必读:Ftp、Ftps与Sftp三兄弟的不同与区别以及部署全指引

    文章标题: 站长管理服务器必读:Ftp.Ftps与Sftp三兄弟的不同与区别以及部署全指引 关键字 : ftp,sftp,freesshd,ftps 文章分类: 教程 创建时间: 2020年3月23日 ...

  6. 一文详解 FTP、FTPS 与 SFTP 的原理

    开源Linux 长按二维码加关注~ 上一篇:2020年MySQL数据库面试题总结 无论是网盘还是云存储,上传都是一项很简单的操作.那些便捷好用的上传整理工具所用的 FTP 协议到底是什么意义,繁杂的模 ...

  7. 浅谈 URI 及其转义

    URI URI,全称是 Uniform Resource Identifiers,即统一资源标识符,用于在互联网上标识一个资源,比如 https://www.upyun.com/products/cd ...

  8. 【WebApi系列】浅谈HTTP

    [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi如何传递参数 [04]详解WebApi测试和PostMan [05]浅谈WebApi Core ...

  9. Linux的文本处理工具浅谈-awk sed grep

    Linux的文本处理工具浅谈 awk   老大 [功能说明] 用于文本处理的语言(取行,过滤),支持正则 NR代表行数,$n取某一列,$NF最后一列 NR==20,NR==30 从20行到30行 FS ...

随机推荐

  1. 卷积神经网络 part1

    [任务一]视频学习心得及问题总结 根据下面三个视频的学习内容,写一个总结,最后列出没有学明白的问题. [任务二]代码练习 在谷歌 Colab 上完成代码练习,关键步骤截图,并附一些自己的想法和解读. ...

  2. Spring Cloud Data Flow初体验,以Local模式运行

    1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Spring Cloud Data Flow是什么,虽然已经出现一段时间了,但想必很多人不知道,因为在项目中很少有人用.不仅 ...

  3. 新鲜整理的Java学习大礼包!!锵锵锵锵~

    第一部分:Java视频资源! 前端 HTML5新元素之Canvas详解 https://www.bilibili.com/video/BV1TE41177TE HTML5之WebStorage详解 h ...

  4. nginx多个server的配置,同一端口

    nginx多个server的配置,同一端口 #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/e ...

  5. 一道 3 行代码的 Python面试题,我懵逼了一天

    有意思的题目 题目:写出下面程序运行结果 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的 ...

  6. SpringBoot常用配置,引入外部配置文件信息,热加载

    SpringBoot的配置文件格式 yml规范 SpringBoot的配置文件支持properties和yml,甚至还支持json. 更推荐使用yml文件格式: yml文件,会根据换行和缩进帮助咱们管 ...

  7. 9个常用ES6特性归纳(一般用这些就够了)

    ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了.它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应 ...

  8. menset与fill

    menset函数一般只对int型数组进行0.-1的赋值.原因:menset对数组是按字节赋值,对每个字节的赋值是相同的,故int的4个字节全部被赋相同的值,而0正好二进制编码全为0,-1的二进制编码全 ...

  9. Java学习之反射篇

    Java学习之反射篇 0x00 前言 今天简单来记录一下,反射与注解的一些东西,反射这个机制对于后面的java反序列化漏洞研究和代码审计也是比较重要. 0x01 反射机制概述 Java反射是Java非 ...

  10. SSH 端口转发 - 你不让我看,我也能看

    在之前 GRE 的文章中,我们知道隧道技术可以解决异种网络的通信问题.在今天这篇文章中,将认识隧道技术的另一应用 - SSH 端口转发. 首先我们对 SSH 并不陌生,是应该非常普遍的加密协议,用于在 ...