为什么端口20不用于FTP被动模式下的数据通道?

在主动模式下,FTP服务器使用两个端口,命令信号为21,数据为20。 在FTP的被动模式下,当客户端连接到端口21的服务器之后,服务器给客户端一个随机的临时端口来连接数据连接,并开始监听。 为什么服务器没有为数据连接提供端口20(如通常的主动模式)?

PS:我已经看了为什么FTP被动模式需要一个端口范围而不是只有一个端口? 但是这并没有解决我的具体问题。

在主动模式下, FTP服务器不会“给”端口20给客户端。 它启动从端口20到客户端的连接。 这个传入(从客户端的防火墙angular度来看)连接将被大多数现代防火墙阻止。 除此之外,通过NAT使主动模式工作是相当棘手的。 被动模式被剥夺了所有这些缺点,因为在被动模式下FTP服务器不会启动任何连接。

我不知道为什么原创的FTP规范的作者是这样决定的。 但是,这个决定与现在互联网如何运作的方式有很大的关系。

如果您每次连接到同一个端口(20),服务器将无法知道您连接了哪个文件。 端口号用作控制连接上的传输请求和数据连接之间的链接。 请注意,数据连接上没有“协议”,客户端可以使用它来说明所要求的内容。 端口号是服务器唯一的唯一信息。

如果两个客户端同时请求传输,当服务器在单个端口上接受一个连接时,服务器将不能分辨出要传输什么文件。 当然,服务器可以使用客户端IP来做出决定(实际上许多FTP服务器都会validation客户端IP是否与控制连接上使用的IP相匹配以保证安全)。

但是这不适用于:

  • 来自同一台机器的多个连接(大多数FTP客户端支持并行传输/队列)。
  • 具有相同(企业)networking的不同机器的连接,因为具有相同的外部IP。

上述两者都不可能是FTP规范在当时(1980)公司networking不存在的情况下引入端口范围的原因,并且来自同一台机器的多个连接也可能不太可能。 另一方面,在那个时候,端口范围可能会显着简化服务器的实现。