FTP模式及端口(数据端口、命令端口)

         FTP是基于TCP的高级文件协议,在传输的过程中,主要分为建立连接和数据传输两部分,响应的涉及到服务器端的命令端口和数据端口。建立连接是采用tcp的三次握手模型,对于ftp服务器来说,采用固定的21命令端口和客户端进行通信,在数据传输过程中,根据FTP传输的时候的服务端数据通信过程中选择不同数据端口,可以将ftp分为主动模式(Port)和被动模式(Pasv),这两种模式,对于客户端来说,端口没有固定性,只是在创建的时候,可以主动指定本地端口,或者是随机端口,而对于服务器来说,差异性在于采用服务器上的固定20端口,还是服务器根据连接即时创建1025以上的数据端口。但是命令传输端口,对于服务器来说,永远都是21端口。

FTP服务端支持两种模式,具体通讯过程中选择哪一种模式,是由客户端选择决定的,接下来阐述两种模式的具体过程以及相关原理。

 1.ftp两种运行模式

     Port模式(主动)

     FTP客户端从任意的非特殊的端口(N > 1023)连入到FTP服务器的命令端口--21端口。然后客户端在N+1(N+1 >= 1024)端口监听,并且通过N+1(N+1 >= 1024)端口发送命令给FTP服务器。服务器会建立从服务器20端口到用户本地指定的端口的数据传输连接。

      主动模式的FTP的 主要问题实际上落在客户端。FTP 的客户端并不会主动连接到服务器的数据端口,而是是告诉服务器它正在监听哪个端口,然后服务器发起连接到客户端上指定的端口。但是,这样的连接有时候会被客户端的防火墙阻止

具体原理

FTP模式及端口(数据端口、命令端口)_第1张图片

下面是主动模式的 FTP 具体实例:

      在主动模式的 FTP 中,客户端从一个随机的非系统端口(N > 1023)连接到 FTP 服务器的命令端口端口 21。然后,客户端开始监听端口 N+1,并将 FTP 命令端口 N+1 告诉 FTP 服务器,“请把数据发送给我的 N+1 端口”。然后,服务器将从本地数据端口 (端口20) 连接回客户端的数据端口,也就是 N+1 端口。

因为服务器防火墙的隔离作用,我们应该确保服务器 FTP 到客户端的一下几个通道的畅通:

FTP 服务器端口 21 (接受全部客户端)

FTP 服务器端口 21 到 > 1023 的端口 ( 服务器响应客户端控制端口 )

FTP 服务器端口 20 到 > 1023 的端口 ( 服务器发起到客户端的数据端口的连接 )

从 > 1023的端口到 FTP 服务器端口 20 ( 客户端发送 ack 到服务器的数据端口 )

用图来表示这些通道:

FTP模式及端口(数据端口、命令端口)_第2张图片

       第 1 步,客户端的命令端口与服务器的命令端口连接并发送命令端口 1027。然后,服务器在第 2 步时将一个 ACK 发送回客户端的命令端口。第 3 步,服务器在其本地数据端口上启动连接,连接到前面指定的客户端的数据端口。最后,客户端返回 ACK,如第 4 步所示。

     Pasv模式(被动)

    Pasv是Passive的缩写,中文成为被动模式,工作原理:FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输,原理如下图:

FTP模式及端口(数据端口、命令端口)_第3张图片

下面是被动模式的 FTP 具体实例:

       在被动模式的 FTP 中,客户端启动到服务器的两个连接,解决了防火墙阻止从服务器到客户端的传入数据端口连接的问题。FTP 连接建立后,客户端在本地打开两个随机的非系统端口 N 和 N + 1(N > 1023)。第一个端口连接服务器上的 21 端口,但是客户端这次将会发出 PASV 命令,也就是不允许服务器连接回其数据端口。这样,服务器随后会打开一个随机的非系统端口 P (P > 1023),并将 P 发送给客户端作为 PASV 命令的响应。然后客户端启动从端口 N+1 到端口 P 的连接来传输数据。

在被动模式中,要保持一下通道的畅通:

FTP服务器的 21 端口(接受所有客户端)

FTP服务器的 21端口到 > 1023 的远程端口 ( 服务器响应客户端控制端口 )

FTP服务器 > 1023 的端口(接受所有客户端发起的连接到服务器指定的随机端口)

FTP服务器 > 1023 的端口到 > 1023 的远程端口(服务器发送 ack 和数据到客户端数据端口)

被动模式用图表示:

 FTP模式及端口(数据端口、命令端口)_第4张图片FTP模式及端口(数据端口、命令端口)_第5张图片

       第 1 步,客户端在命令端口上与服务器连接,并发出 PASV 命令。然后,服务器在第 2 步时使用端口 2024 进行响应,告诉客户端它正在监听的数据连接端口。第 3 步,客户端启动从其数据端口到指定服务器数据端口的数据连接。最后,服务器在第 4 步将 ACK 发送回客户端的数据端口。

      被动模式的FTP的需要在服务端进行开放端口区段设置,用来开放给客户端进行连接,如果被动模式下,出现客户端可以访问ftp服务端文件的列表,但是无法进行下载等进一步操操作,出现这种问题的原因,是服务端的文件无法被读取或者是无法通过网络端口进行传输。可以按照以下步骤进行排查:

1)检查服务端端对文件的权限设置是否完全,登录用户是否存在下载权限;

2)如果登录用户存在下载权限,那么需要进一步检查服务器端的数据传输接口是否开放,如果有防火墙的话,是否配置了防火墙的出站入站端口规则;

3)如果仍然存在问题,检查被动模式下的ftp服务器的数据端口设置是否进行指定,默认是1025-6000,指定的端口区段是否已经配置了防火墙的出站规则;

 

2.两种模式的比较

     从上面的运行原来看到,主动模式和被动模式的不同简单概述为: 主动模式传送数据时是“服务器”连接到“客户端”的端口;被动模式传送数据是“客户端”连接到“服务器”的端口。

    主动模式需要客户端必须开放端口给服务器,很多客户端都是在防火墙内,开放端口给FTP服务器访问比较困难。

    被动模式只需要服务器端开放端口给客户端连接就行了。

3.不同工作模式的网络设置

    我在实际项目中碰到的问题是,FTP的客户端和服务器分别在不同网络,两个网络之间有至少4层的防火墙,服务器端只开放了21端口, 客户端机器没开放任何端口。FTP客户端连接采用的被动模式,结果客户端能登录成功,但是无法LIST列表和读取数据。很明显,是因为服务器端没开放被动模式下的随机端口导致。

    由于被动模式下,服务器端开放的端口随机,但是防火墙要不能全部开放,解决的方案是,在ftp服务器配置被动模式下开放随机端口在 50000-60000之间(范围在ftp服务器软件设置,可以设置任意1024上的端口段),然后在防火墙设置规则,开放服务器端50000-60000之间的端口端。

    主动模式下,客户端的FTP软件设置主动模式开放的端口段,在客户端的防火墙开放对应的端口段。

 

    4.常见的ftp客户端设置被动模式

(1)IE:工具 -> Internet选项 -> 高级 -> “使用被动FTP”(需要IE6.0以上才支持)。
(2)CuteFTP:Edit -> Setting -> Connection -> Firewall -> “PASV Mode” 或File -> Site Manager,在左边选中站点 -> Edit -> “Use PASV mode” 。
(3)FlashGet:工具 -> 选项 -> 代理服务器 -> 直接连接 -> 编辑 -> “PASV模式”。
(4)FlashFXP:选项 -> 参数选择 -> 代理/防火墙/标识 -> “使用被动模式” 或 站点管理 -> 对应站点 -> 选项 -> “使用被动模式”或快速连接 -> 切换 -> “使用被动模式”。

你可能感兴趣的:(网络通信,ftp,信息传输,bug)