在主动模式下,FTP 服务器使用两个端口,21 用于命令信号,20 用于数据。在 FTP 的被动模式下,客户端通过端口 21 连接到服务器后,服务器会为客户端提供一个随机的临时端口,用于数据连接,并开始监听该端口。为什么服务器不为数据连接提供端口 20(主动模式下通常如此)?
PS:我看过为什么 FTP 被动模式需要一个端口范围而不是只需要一个端口?但这并没有回答我的具体问题。
答案1
我不知道 FTP 规范的原始作者为什么会这样决定。但这个决定对当今互联网的工作方式有好处。
如果每次都连接到同一个端口 (20),服务器将无法分辨您连接的是什么文件。端口号充当控制连接上的传输请求和数据连接之间的链接。请注意,数据连接上没有“协议”,客户端可以使用它来告知它请求的内容。端口号是服务器拥有的唯一唯一信息。
如果两个客户端同时请求传输,而服务器在单个端口上接受数据连接,则服务器将无法判断要传输什么文件。当然,服务器可以使用客户端 IP 来做出决定(实际上,出于安全考虑,许多 FTP 服务器都会验证客户端 IP 是否与控制连接上使用的 IP 相匹配)。
但这不适用于:
- 来自同一台机器的多个连接(大多数 FTP 客户端都支持并行传输/队列)。
- 来自同一(公司)网络内的不同机器的连接,因为它们具有相同的外部 IP。
上述两种情况可能都不是 FTP 规范引入端口范围的原因,因为当时(1980 年)还没有企业网络,而且从同一台机器建立多个连接的可能性也不大。另一方面,在那个时候,端口范围可能会大大简化服务器实现。
相关后续问题:为什么端口 20 适用于 FTP 主动模式?
答案2
在主动模式下,FTP
服务器不会将端口 20 分配给客户端。它发起从端口 20 到客户端的连接。大多数现代防火墙都会阻止此传入连接(从客户端的防火墙角度来看)。除此之外,让主动模式发挥作用非常棘手NAT
。被动模式没有所有这些缺点,因为在被动模式下FTP
服务器不会发起任何连接。
答案3
由于没有会议FTP 中的概念是,使用单个端口(比如说 20)会在多个客户端连接时产生歧义,因为服务器无法将客户端与文件匹配。为了克服这一限制,每个传输都有专用端口。换句话说,每个端口都是传输的唯一标识符。