hc6538 发表于 2017-1-9 07:54:26

被动模式下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]
查看完整版本: 被动模式下apache的ftpserver缺陷及改进