最近准备做一个《FtpCopy系列教程》,主要讲解Ftp协议主动模式和被动模式的区别、以及FTP服务器的安装部署,然后通过几个常用实例演示,详细讲解如何使用FtpCopy进行数据自动备份。

什么是FTP协议?

FTP的中文名称是“文件传输协议”,是File Transfer Protocol三个英文单词的缩写。FTP协议是TCP/IP协议组中的协议之一,其传输效率非常高,在网络上传输大的文件时,经常采用该协议。

一个完整的FTP由FTP服务器FTP客户端组成,客户端可以将服务器上的文件通过FTP协议下载到本地,也可以将本地数据通过FTP协议上传到服务器上。

(1)服务器端需要安装FTP服务软件,常用的有FileZilla Server、IIS、Serv-U、OSSFTP等等。

  • 不同的FTP软件对FTP协议标准支持有所差别,从我的使用经验感觉FileZilla Server是对FTP协议支持最好的软件,它具有以下几个特点:体积小(2M左右)、免费开源、操作简单、功能完善(我们所需要的有功能它基本都支持)。

  • IIS对FTP协议的支持也很不错。

  • Serv-U有几个命令支持不是很好,这个软件也是收费软件,没感觉比FileZilla Server好多少。

  • OSSFTP是阿里云对象存储提供的FTP Server,对FTP标准协议支持就更差了。

(2)FTP客户端软件就比较多了,常用的有FileZilla、FlashFXP、WinSCP、甚至在浏览器和windows资源管理器中输入FTP地址都可以当做FTP客户端来使用。我们的FtpCopy也属于FTP客户端。

FTP协议的两个TCP连接

左侧为客户端,右侧为FTP服务器,无论是上传还是下载,客户端与服务器之间都会建立2个TCP连接会话,绿色是控制连接,红色的是数据连接。其中,控制连接用于传输FTP命令,如:删除文件、重命名文件、下载文件、列取目录、获取文件信息等。真正的数据传输时通过数据连接来完成的。

默认情况下,服务器21端口作为命令端口,20端口为数据端口。但被动模式下就有所差别了。

刚接触FTP的朋友,经常搞不清楚FTP的主动模式和被动模式,造成连接被防火墙拦截,下面我们就详细了解下FTP的这两种模式:

FTP主动模式

首先,来了解下FTP的主动模式,主动模式是FTP的默认模式,也称为PORT模式。

1. 在主动模式下,客户端会开启N和N+1两个端口,N为客户端的命令端口,N+1为客户端的数据端口。

第一步,客户端使用端口N连接FTP服务器的命令端口21,建立控制连接并告诉服务器我这边开启了数据端口N+1。

第二步,在控制连接建立成功后,服务器会使用数据端口20,主动连接客户端的N+1端口以建立数据连接。这就是FTP主动模式的连接过程。

我们可以看到,在这条红色的数据连接建立的过程中,服务器是主动的连接客户端的,所以称这种模式为主动模式。

上面这张图是通过netstat命令查看到的ftp主动模式下TCP的连接信息,首先客户端使用49195端口连接服务器21端口建立控制连接,然后服务器使用20端口连接客户端49197端口建立数据连接

这里需要补充下,客户端的命令端口和数据端口实际中并不是有些文章写道的N和N+1的关系,两个端口比较接近而已。

2. 主动模式有什么利弊呢?

主动模式对FTP服务器的管理有利,因为FTP服务器只需要开启21端口的“准入”和20端口的“准出”即可。

但这种模式对客户端的管理不利,因为FTP服务器20端口连接客户端的数据端口时,有可能被客户端的防火墙拦截掉。

3. 如何解决客户端防火墙拦截“数据连接”的建立呢?

(1)如果防火墙开启了“拦截通知”,在使用FTP软件连接服务器时,防火墙会弹出下面这个提醒,只需要点击“允许访问”就可以建立连接了。

(2)如果防火墙没有开启“拦截通知”,则需要我们的应用程序添加到防火墙的“允许的程序”列表中。如图所示,允许FlashFXP.exe和WinSCP以主动模式连接FTP服务器。

FTP被动模式

上面所讲的是FTP主动模式,简单的理解就是服务器的数据端口20主动连接客户端的数据端口,来建立数据连接,用来传输数据,这个数据连接的建立有可能被客户端防火墙拦截掉。为了解决这个问题就衍生出另外一种连接模式---被动模式。被动模式也称为passive模式。

1. 被动模式是如何运作的呢?来看下这张图

第一步,客户端的命令端口N主动连接服务器命令端口21,并发送PASV命令,告诉服务器用“被动模式”,控制连接建立成功后,服务器开启一个数据端口P,通过PORT命令将P端口告诉客户端。

第二步,客户端的数据端口N+1去连接服务器的数据端口P,建立数据连接

我们可以看到,在这条红色的数据连接建立的过程中,服务器是被动的等待客户端来连接的,所以称这种模式为被动模式。

上面这张图是通过netstat命令查看到的“被动模式”下的TCP连接情况,首先客户端49222端口去连接服务器的21端口,建立控制连接。然后客户端的49224端口连接服务器的6008端口去建立数据连接

这里有两点需要补充

  • 第一,客户端的命令端口和数据端口实际中并不是有些文章写道的N和N+1的关系,两个端口比较接近而已;
  • 第二,服务器的数据端口P是随机的,这个客户端连接过来用的是6008端口,另外一个连接过来可能用的就是7009,不过P端口的范围是可以设置的。

2. 被动模式有什么利弊呢?

被动模式对FTP客户端的管理有利,因为客户端的命令端口和数据端口都是“准出”,windows防火墙对于“准出”一般是不拦截的,所以客户端不需要任何多余的配置就可以连接FTP服务器了。

但对服务器端的管理不利。因为客户端数据端口连到FTP服务器的数据端口P时,很有可能被服务器端的防火墙阻塞掉。

4. 如何解决服务器端防火墙拦截“数据连接”的建立呢?

为了解决P端口的“准入”不被服务器防火墙拦截,需要在服务器端设定P端口的范围,并在防火墙中开启这个范围端口的“准入”。这张图是在FileZilla Server中指定被动模式的数据端口范围为6000-7000,然后在windows防火墙中配置6000-700端口允许“准入”。

  

FTP服务器安全性设置

一般我们使用FTP主要用于备份下载服务器上的数据,有时也需要将本地的数据上传至服务器上备份。如果服务器在外网之中,服务器的每个端口的开放都需要严格控制,如何安全的设置我们的FTP服务器呢,我个人有以下几个使用经验:

1. 合理的设置FTP账号和权限

为每个账号设置密码和权限,比如说:如果只是下载数据,只要给FTP账号分配文件的read权限和目录的List列取目录权限即可。

2. 服务器21端口添加21端口限定

无论是主动模式还是被动模式,第一步都是客户端连接服务器的21端口建立控制连接。因此我们可以在防火墙的21端口上设置IP限定,仅允许我们的备份电脑的IP或IP段连接服务器21端口,这样其他人就无法使用FTP暴力破解FTP账号和密码了。

3. 禁止FTP服务器管理控制台的远程管理功能

FTP服务器管理控制台:主要用于设置FTP账号、FTP目录、FTP的命令端口和数据端口、下载速度和上传速度等等。

FTP管理控制台并不是所有FTP软件都支持远程访问的,比如IIS中设置FTP需要在IIS中设置,它的控制台就是IIS,只有登录服务器系统才可以设置IIS。

默认情况下FileZilla Server的控制台是只允许本机登录的,我们不需要做任何设置,保持默认配置即可。

这里我们还是有必要了解下如何开启FileZilla Server控制台的远程访问:

(1)防火墙打开14147端口的“准入”,14147端口为FileZilla Server控制台端口;

(2)配置FTP服务器的IP地址;

(3)配置允许访问FileZilla Server控制台的终端。

这样我们配置的192.168.25.1就可以远程连接192.168.25.133服务器上的控制台,进行账号和权限设置等。

防火墙设置总结

1. FTP主动模式下防火墙设置

(1)服务器没有“物理防火墙”的情况下,只需要在服务器操作系统中开启21端口的准入,20端口的准出默认是允许的(Windows系统防火墙默认是不拦截“准出”的)。

(2)服务器有“物理防火墙”的情况下,需要在“物理防火墙”中开启21端口的准入,20端口的准出。

(3)客户端需要设置“允许应用程序通过防火墙”(WinSCP.exe、FlashFXP等)

2. FTP主动模式下防火墙设置

(1)服务器需要开启21端口准入,并设置被动模式数据端口范围P,并在防火墙中开启P的准入。

(2)客户端一般不需要设置任何防火墙,因为N和N+1一般是可以出去的。

FTP协议的主动模式和被动模式的区别的更多相关文章

  1. [转] FTP主动模式和被动模式的区别

    转自原文FTP主动模式和被动模式的区别 基础知识: FTP只通过TCP连接,没有用于FTP的UDP组件.FTP不同于其他服务的是它使用了两个端口, 一个数据端口和一个命令端口(或称为控制端口).通常2 ...

  2. vsftpd主动模式和被动模式的区别

    何为主动模式,何为被动模式 1.ftp采用两个端口控制: 20端口用于数据传输. 21端口用于控制,或指建立TCP连接. 2.主动方式连接过程: [注意]:C表示客户端 S表示服务器端 S端要开启20 ...

  3. Zabbix主动模式与被动模式的区别——最简单的解释

    一直搞不清楚Zabbix的主动模式和被动模式的差别,网上看到别人博客里的解释都是云里雾里的,完全搞不清.知道偶然看到了以下这个解释.就基本上明白了. Zabbix的主动模式和被动模式都是相对agent ...

  4. FTP主动模式和被动模式的区别

    基础知识: FTP只通过TCP连接,没有用于FTP的UDP组件.FTP不同于其他服务的是它使用了两个端口, 一个数据端口和一个命令端口(或称为控制端口).通常21端口是命令端口,20端口是数据端口.当 ...

  5. FTP主动模式和被动模式的区别(转)

    dd by zhj: 一般使用被动模式,在命令行下,被动模式的格式是:ftp -p (yinservice_env) ajian@ubuntu-desk:~$ ftp -pftp> 之前在用命令 ...

  6. FTP主动模式和被动模式的区别【转】

    转自:http://www.cnblogs.com/xiaohh/p/4789813.html 基础知识: FTP只通过TCP连接,没有用于FTP的UDP组件.FTP不同于其他服务的是它使用了两个端口 ...

  7. FTP服务器访问主动模式、被动模式

    在公司里面,经常需要访问外网FTP取资料等情况.但是有时用windows界面访问经常遇到各种问题. 下面介绍两种客户端是如何访问ftp服务器. 首先我们需要说明:防火墙,是阻拦外界与内部的通讯的一道关 ...

  8. FTP 主动模式 与被动模式

    今天在被电信运营商给的没有内网ip被nat后的内网ip访问我的ftp服务器时出现了,连接被关闭的错误,经过多番查询发现问题原因是因为NAT内网ip没有被有效地转换为外网ip,也即是说NAT对ftp协议 ...

  9. FTP的主动模式与被动模式

    FTP服务器使用20和21两个网络端口与FTP客户端进行通信. FTP服务器的21端口用于传输FTP的控制命令,20端口用于传输文件数据. FTP主动模式: FTP客户端向服务器的FTP控制端口(默认 ...

随机推荐

  1. HDU-3478Catch二分图的否命题

    HDU-3478Catch 题意:考虑Thief能否: 由于我推着推着就想到必须要三点可以互通,和二分图的结论正好相反,所以就试了一发, 真没想到thief的初始位置是不用考虑的. 下面是ac代码: ...

  2. 原来JS是这样的 - 对象属性

    引子 在上一篇(原来JS是这样的 (2))刚发布的时候就阅读了那篇文章的人可能会注意到那篇曾用过"JavaScript 中万物皆对象"的说法,而在随后我发现错误后立即更新改掉了这个 ...

  3. 使用Kubectl部署应用

    目录 使用Kubectl部署应用  Kubectl部署流程  部署一个简单的Demo网站  一旦运行了Kubernetes集群,就可以在其上部署容器化应用程序.因此在开始之前,我们需要先确保集群已经准 ...

  4. 【4】Logistic回归

    前言 logistic回归的主要思想:根据现有数据对分类边界建立回归公式,以此进行分类 所谓logistic,无非就是True or False两种判断,表明了这其实是一个二分类问题 我们又知道回归就 ...

  5. 更换SVN项目资源库目录出现的问题

    今天在做SVN资源库管理时出现了如下问题: 因为当时把资源库地址写错了,所以想换个资源库,所以先断开资源库 然后我重新导入新的资源库位置: 于是就出现了这种问题: 其实这个问题困扰我好久了之前一直放过 ...

  6. MySQL二进制日志分析-概述篇

    MySQL从3.23版本开始引入了二进制日志,用于的数据复制, 二进制日志根据MySQL的版本不同,目前有4个版本: https://dev.mysql.com/doc/internals/en/bi ...

  7. 小程序 请求Promise简单封装

    最近做小程序在调用后台接口的时候感觉总写很长一串,很冗杂.非常想念vue中promise封装的写法,于是自己初步封装了一下. 1.url 接口地址 2.headers请求头 3. params 请求参 ...

  8. CCPC桂林

    在得知我们队伍前往桂林参加CPPC区域赛后,我是非常激动的,因为我们网络赛并没有得到名额,如果不是新都赠予我们名额,我们都没有出去打比赛的机会,同时,我们也不想浪费这个名额,我们也想打出成绩来,于是我 ...

  9. 是时候让大家看看你用django写出来的博客了(内含部署教程视频)

    作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 博客的基础功能已经开发的差不多了,虽然还有很多地方可以完善,但我们还是希望早点把博客部 ...

  10. [原创] Matlab 指派问题模型代码

    指派问题的基本内容 一般来说指派问题解决的是如何将任务分配到人,使得任务完成的效益最大化(成本型效益则求最小值,利润型效益则求最大值).上述问题一个 0 - 1 整数规划问题. 问题围绕着任务和人展开 ...