apache FtpService 报错421

421错误原因:

同时连接该ftp的人数过多,一般ftp网站都有同时登陆人数的上限,超过该上限就会出现421错误。

分析:

  1. 连接超时或者数据传输超时
  2. 主动被动模式选择不符合网络环境
  3. FtpService服务器的线程数量配置

基础知识:

FTP只通过TCP连接,没有用于FTP的UDP组件.FTP不同于其他服务的是它使用了两个端口, 一个数据端口和一个命令端口(或称为控制端口)。通常21端口是命令端口,20端口是数据端口。当混入主动/被动模式的概念时,数据端口就有可能不是20了。

解决方案:

1. 连接超时或者数据传输超时

ftpClient.setDataTimeout(60000);       //设置传输超时时间为60秒 
ftpClient.setConnectTimeout(60000);       //连接超时为60秒

2. 主动被动模式选择不符合网络环境

主动模式
命令连接:客户端 >1023端口 -> 服务器 21端口
数据连接:客户端 >1023端口 <- 服务器 20端口
主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。

被动模式:
命令连接:客户端 >1023端口 -> 服务器 21端口
数据连接:客户端 >1023端口 -> 服务器 >1023端口
被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。

折中方式
既然FTP服务器的管理员需要他们的服务器有最多的客户连接,那么必须得支持被动FTP。我们可以通过为FTP服务器指定一个有限的端口范围来减小服务器高位端口的暴露。这样,不在这个范围的任何端口会被服务器的防火墙阻塞。虽然这没有消除所有针对服务器的危险,但它大大减少了危险。

服务端是两种模式的,使用哪种模式取决于客户端,同时关键点在于网络环境适合用哪种模式,比如客户端在防火墙内,则最好选择被动模式
ftpClient.enterLocalActiveMode()便是配置成主动模式
ftpClient.enterLocalPassiveMode()则配置成被动模式。

FTP主动模式和被动模式的区别参考:https://www.cnblogs.com/ajianbeyourself/p/7655464.html

3. FtpService服务器的线程数量配置

在res\conf目录中找到ftpd-typical.xml文件,添加最大登录数等配置

<server xmlns="http://mina.apache.org/ftpserver/spring/v1"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
       http://mina.apache.org/ftpserver/spring/v1 
       http://mina.apache.org/ftpserver/ftpserver-1.0.xsd"
       id="myServer"        /*设置server的标志符,必须*/
       max-logins="5"       /*设置同时登陆的最大人数*/
       anon-enabled="false" /*设置匿名登陆为不允许*/
       max-anon-logins="0"  /*设置匿名登陆用户为0个*/
       max-login-failures="3"  /*设置3次失败登陆后,关闭此链接*/
       /*设置失败登陆后下一次登陆所需的时间间隔,防止暴力破解,单位是微秒*/
       login-failure-delay="30000">
    <listeners>
        
        <nio-listener name="default" port="2121">
            <ssl>
                
                <keystore file="./res/ftpserver.jks" password="password" />
            ssl>
                
                <data-connection idle-timeout="60">
                    
                    <active local-port="1886"/>
                    
                     <passive ports="1886" address="0.0.0.0" external-address="137.222.18.114"/>
                 data-connection>
        nio-listener>
    listeners>
    
    <file-user-manager file="./res/conf/users.properties" encrypt-passwords="clear"/>
server>

Server元素详解

apache FtpService 报错421_第1张图片

最大线程数max-threads这个提高了应该提高处理客户端连接的速度。
ftpd-typical.xml配置可参考官网:http://mina.apache.org/ftpserver-project/configuration_listeners.html
或者中文文档https://wenku.baidu.com/view/5f0ab75f312b3169a451a4d8.html

你可能感兴趣的:(ftp)