知识库

记录点点滴滴

FTP 20 秒后无活动,连接超时 读取目录失败

问题重述:

状态:正在连接 XXX.XX.XX.XX:21…
状态:连接建立,等待欢迎消息…
状态:不安全的服务器,不支持 FTP over TLS。
状态:服务器不支持非 ASCII 字符。
状态:已登录
状态:读取目录列表…
命令:PWD
响应:257 “/home/xukeqin” is the current directory
命令:TYPE I
响应:200 Switching to Binary mode.
命令:PASV
响应:227 Entering Passive Mode (XX.XX.XX.XX.XX.XX).
命令:LIST
错误:20 秒后无活动,连接超时
错误:读取目录列表失败
状态:已从服务器断开

FTP经常出现连接超时,偶尔可以连接成功(大概8次中有一次可以成功)
连接成功,点击文件夹也会无响应
前天还好好的,昨天突然出现这个情况
我用其他服务器去连这个FTP也是这样,连接超时
查看log,也没有错误提示

 

出错原因:

FTP是仅基于TCP的服务,不支持UDP。与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口)。通常来说这两个端口是21(命令端口)和20(数据端口)。但FTP工作方式的不同,数据端口并不总是20。这就是主动与被动FTP的最大不同之处。

(一)主动FTP
主动方式的FTP是这样的:客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口,也就是21端口。然后客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。
    针对FTP服务器前面的防火墙来说,必须允许以下通讯才能支持主动方式FTP:
    1. 任何大于1024的端口到FTP服务器的21端口。(客户端初始化的连接)
2. FTP服务器的21端口到大于1024的端口。 (服务器响应客户端的控制端口)
3. FTP服务器的20端口到大于1024的端口。(服务器端初始化数据连接到客户端的数据端口)
    4. 大于1024端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口)
    (二)被动FTP
为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。
   在被动方式FTP中,命令连接和数据连接都由客户端发起,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。
   当开启一个 FTP连接时,客户端打开两个任意的非特权本地端口(N > 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交 PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。
对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:
    1. 从任何大于1024的端口到服务器的21端口(客户端初始化的连接)
2. 服务器的21端口到任何大于1024的端口(服务器响应到客户端的控制端口的连接)
3. 从任何大于1024端口到服务器的大于1024端口(客户端初始化数据连接到服务器指定的任意端口)
    4. 服务器的大于1024端口到远程的大于1024的端口(服务器发送ACK响应和数据到客户端的数据端口)
     以上关于主动和被动FTP的

解决办法:

1.换成sftp,据说不用考虑端口的原因

2.在配置云服务器的安全组的时候,开放所有的端口

 

引用资料:

http://blog.51cto.com/jackiechen/193883

点赞

发表评论

邮箱地址不会被公开。 必填项已用*标注