使用被动模式时,如果我们将 pasv_max_port 设置为 10100,将 pasv_min_port 设置为 10090。是否意味着 VSFTP 服务器只能同时为 10 个客户端提供服务?
我们可以为 pasv_max_port 和 pasv_min_port 设置相同的端口号吗?如果可能,VSFTP 服务器可以同时处理多少个客户端?只有一个?
为简化起见,我会说是的,这就是您应该考虑的方式(在我看来)。
限制端口范围将根据您在 min 和 max 之间拥有的端口数限制并发客户端连接。这样你就可以避免奇怪的行为。
但是,事实上这是不正确的,必须进行审核:-)
更深入更精确:限制端口会影响数据通道的并发使用。
请注意,新的连接请求需要一个可用的数据通道。
我不知道所有使用数据通道的 FTP 命令,但基本上上传(STOR)、下载(RETR)、列表(LIST)命令需要数据通道。
为了说明这一点,我刚刚使用我的 vsftpd 服务器和这些设置在实验室(您可以复制)中进行了测试:
pasv_max_port=10100
pasv_min_port=10100
Run Code Online (Sandbox Code Playgroud)
1.第一次测试:
- 我与 Client1 连接:好的
- 当 Client1 仍然连接时,我与 Client2 连接:好的
- 我与 Client3 连接,而 Client1 和 Client2 仍然连接:好的
为什么 ?
- Client2 能够连接,因为 Client1 什么都不做(空闲)并且没有使用数据通道,因此服务器已将端口分配给 Client2。
- Client3 能够连接是因为 Client1 和 Client2 空闲并且没有使用数据通道,因此服务器已将端口分配给 Client3。
2. 第二次测试:
- 我与 Client1 连接并开始上传文件:文件上传正在进行中
- 我在 Client1 上传仍在运行时与 Client2 连接:错误无法连接
- 我等待 Client1 上传完成
- 一旦 Client1 上传完成,我就可以与 Client2 连接。
为什么 ?
- 由于 Client1 正在使用数据通道进行上传,Client2 无法连接,因为服务器端没有更多可用端口为其提供服务。
- Client1 上传完成后,服务器释放数据通道端口,Client2 可以使用它进行连接。
3. 第三次测试:
- 我与 Client1 连接:好的
- 当 Client1 仍然连接时,我与 Client2 连接:好的
- 我开始从 Client1 上传到 ftp 服务器:好的上传正在进行中
- 我开始从 Client2 上传到 ftp 服务器,而 Client1 上传仍在运行:服务器关闭错误连接。转移失败。
为什么 ?
测试 1 和测试 2 的混合:
- Client2 能够连接,因为 Client1 什么都不做(空闲)并且没有使用数据通道,因此服务器已将端口分配给 Client2。
- 客户端 1 能够上传文件,因为客户端 2 处于空闲状态,因此服务器已将端口分配给客户端 1 以进行上传。
- 客户端 2 无法上传文件,因为客户端 1 已在使用数据传输端口进行上传
现在你可以理解为什么我在开始时谈论“奇怪”的行为了。
希望它会有所帮助!