被动模式下apache的ftpserver缺陷及改进

最近学习了apache的开源FTPServer 1.0.2版本,个人认为在被动模式下工作时,设计的不够好,原因如下:

因为FTP协议的信令端口和数据端口是互相分离的,当在被动模式下客户端上传或下载数据时,该数据端口由FTP服务器提供,而apache的ftpserver在实现时,使用的是一个session占用一个数据端口(具体源代码请看IODataConnectionFactory中的initPassiveDataConnection方法),这样如果5个用户同时想上传或下载时,如果FTP数据服务端口只允许开一个,必然导致其他4个用户处于等待,最后超时导致本次数据交互失败。apache的这种实现直接导致server端承受的并发数与server端允许开放的数据端口数息息相关,而端口是非常宝贵的资源,所以我觉得apache的这种实现应该改为一个数据端口可以同时被多个ftp客户端使用,在ftpserver启动时,同时启动信令端口和数据端口监听,同时由于FTP协议本身的限制,我认为应该增加两个命令字,分别为CUSTOMPASV(类似PASV,但服务端在响应时,返回sessionid),增加CUSTOMRETR(类似RETR,下载文件命令),CUSTOMRETR在打开数据通道时,应先向数据通道发送一个字符串"SID:sessionid",其中sessionid的值为CUSTOMPASV返回的sessionid值,这样就很容易做到一个数据端口监听多个用户。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值