正如标题所述,我目前有一个可通过 FTP 或 FTPS(显式)访问的 FTP 服务器,该服务器在路由器后面运行 NAT。该服务器运行的是 Windows Server 2012 R2 和 IIS 8.0(我相信这是 2012r2 附带的版本)。
该服务器仅供少数人使用,不到 10 人。
服务器目前运行正常,端口 21 和 30850-30859(数据通道)从路由器转发。我的问题是,FTPS 需要多少个数据通道端口?每个同时传输的文件需要一个端口吗?还是同时传输的用户需要一个端口?还是……?
答案1
您需要足够的数据端口,以便客户端IP - 客户端随机端口 - 服务器数据端口组合唯一地标识任何 FTP 会话(传输)。
端口号充当控制连接上的传输请求和数据连接之间的纽带。请注意,数据连接上没有可供客户端用来告知其请求内容的“协议”。端口号是服务器拥有的唯一唯一信息。
唯一性有多强可能取决于服务器实现。我相信大多数服务器只要求端口在客户端请求传输后和连接到数据端口之前的那一小段时间内是唯一的。因此,如果您有 10 个端口,而 11 个客户端同时请求传输,则第 11 个端口可能会被拒绝。
如果两个客户端同时请求传输,并且服务器对两个客户端使用相同的端口号(没有其他备用端口号),则服务器将无法判断要传输哪个文件。当然,服务器可以使用客户端 IP 来做出决定(实际上,出于安全考虑,许多 FTP 服务器都会验证客户端 IP 是否与控制连接上使用的 IP 相匹配)。
但实际实现中,当客户端请求传输时,会打开一个唯一的监听套接字。因此,当没有可用的端口号时,服务器无法开始监听,拒绝传输,因此甚至不会出现上述问题。
另一方面,Bitvise“SSH”服务器内置的 FTP 服务器实际上支持仅单个数据端口。服务器需要 TLS 加密和会话恢复。它使用 TLS 会话来链接控制和数据连接。