我正在努力理解为什么所有 FTP 服务器都需要对被动模式数据通道使用一个端口范围,而不是只对所有传入数据通道连接使用一个数据端口。
FTP 服务器在端口 21 上处理许多同时连接的客户端。Web 服务器在端口 80 上处理许多同时连接的客户端。等等。
那么为什么 FTP 服务器不能只使用一个数据通道端口来处理所有传入的被动数据连接(并且仍然能够在该端口上处理许多同时连接的客户端,比如端口 1024)?
或者可以吗?
我很想知道为什么这是不可能或不推荐的技术细节。
Kar*_*zak 23
关于将数据端口锁定到仅一个端口时的多个并发 FTP 会话问题的清晰和技术性解释是我最有兴趣深入了解的。什么时候能用,什么时候不能用,为什么不推荐,等等。
这将是一个疯狂的猜测,因为我还没有测试过,你应该自己尝试一下,看看是否还有其他一些我可能遗漏的问题。
我想您可以将被动端口范围限制为一个端口。事实上,您可以在这个问题中看到,在实践中使用了小端口范围。理论上,要支持多个并发连接,您只需要 4 个值:本地 IP、本地端口、远程 IP、远程端口是唯一的。这就是您区分不同连接的方式。
如果您将服务器上的端口锁定为一个值,那么剩下的唯一变量就是客户端使用的端口。这不是问题,只要客户端有足够大的空闲临时端口池可供选择。除非它在做一些繁重的 NAT,否则你不必担心这个。现在,请注意这将是纯粹的理论内容:如果您在服务器上使用多个端口,则可以通过启用来增加假设的并发连接数number of ports in range
每个端口客户端的连接数。但这在实践中不会发生,因为我怀疑是否有任何支持这一点的 FTP 客户端实现(因为它没有多大意义)。另外,如果客户端必须以这种方式共享他的临时端口并且不能只打开一个新端口,那么他有更严重的问题需要处理。因此,从这个角度来看,使用单个端口应该是完全安全的。
让我们想想为什么单个端口可能不够用。
首先,我可以想出一种情况,其中一个真正有问题的 FTP 服务器实现仅使用本地端口号作为识别客户端数据传输的方式。再一次,我认为任何体面的 FTPd 都不会这样做。
真正的问题(是的,您可以将以上所有内容视为一个主要的题外话;-))是被动端口范围在非特权范围内。
这意味着您选择的端口号 本身并未保留,实际上任何用户进程(不需要root权限)都可以在您的 FTP 服务器之前获取它。如果您有大量端口可供选择,您只需随机获取一个免费端口即可。如果您必须使用唯一的一个并且它已经被使用,您将无法正确处理传输。
对不起,如果答案似乎有点过于投机。老实说,我很努力地想找到一个你不应该使用单个端口的原因,除了最后一点,我想不出任何反对它的确凿证据。尽管如此,你提出了一个有趣且具有挑战性的问题。
归档时间: |
|
查看次数: |
72118 次 |
最近记录: |