为什么FTP被动模式使用一系列临时端口而不是单个知名端口?[关闭]


9

在FTP被动模式下,我读到服务器将随机端口号发送到客户端,客户端可以在其中建立数据通道。
然后,客户端从其随机端口号到服务器发送的该端口号建立一个数据通道。

我的问题是服务器为什么要向客户端发送随机端口号?客户端为什么不能直接在服务器端建立到端口20的数据通道?


2
我以为这不是主题。

不幸的是,这里没有关于OSI 4层以上协议的问题。
罗恩·莫平

Answers:


13

这就是FTP协议在被动模式下工作的方式。这可能不是一个好主意,因为我认为该模型在任何其他协议中都不会再重复一次(对于FTP活动模式更是如此)。


在数据连接端口上,没有协议。服务器所知道的-在该连接中唯一包含任何信息的-是连接到的端口号。

如果您每次都连接到同一端口,则服务器将无法确定您要连接的文件。端口号用作控制连接上的传输请求和数据连接之间的链接-端口号包含在对PASV命令的响应中。

如果两个客户端同时请求传输,则服务器在单个端口上接受连接时,服务器将无法告知要传输的文件。当然,服务器可以使用客户端IP进行决策(出于安全性考虑,实际上许多FTP服务器确实会验证客户端IP与控制连接上使用的IP匹配)。

但这不适用于:

  • 同一台计算机上的多个连接(大多数FTP客户端确实支持并行传输/队列,您实际上可以在一台计算机上运行多个不同的FTP客户端);
  • 来自相同(公司)网络中不同机器的连接,因为它们具有相同的外部IP。

部分摘自我的回答:为什么FTP被动模式需要一个端口范围而不是一个端口?服务器故障。


服务器端使用的端口号也可以是20,对吗?在每个答案中,服务器端的端口号都不是20
Zephyr

我的答案解释了为什么每个连接/传输的端口号必须唯一。因此,它不能被固定为20
马丁Prikryl

是的,它不能固定,但是其中之一可以是20个吗?
Zephyr

1
是的,但是所有其他端口都必须高于1024。从实际的角度来看,连续的端口范围更好。大多数防火墙/ NAT支持基于范围的规则。您不想为隔离的端口20添加特殊规则-大多数FTP服务器也仅支持连续范围的端口。
马丁·普里克里

1
@ Zac67否,客户端将打开一个新的连接(除控制连接外)以被动方式检索文件,因此服务器无法使用源(客户端)端口号来区分客户端连接。此外,NAT通常会破坏客户端源端口(和/或IP地址),从而使该方法在实践中不可用。
jjmontes

4

通常,服务器不会发送随机端口,而是发送已定义的范围(通过安装)/池中的空闲端口-对于客户端,这看起来是随机的。该端口需要在需要定义范围的防火墙处转发。

不幸的是,FTP是古老的。我想,古老的服务器只能通过端口来区分多个客户端的数据会话。通常,最好继续使用最新的协议,在这些协议中,所有内容都在单个套接字会话中被整齐地打包。


这样也可以是20吗?在每个网站中,用于数据的服务器端口号都不是
20。– Zephyr

20是服务器上用于活动FTP传出端口(不再使用了)。
Zac67

并不是说古老的服务器遇到了麻烦,而是协议设计者仍在努力寻找最佳方法来做比原始请求响应更复杂的事情。
标记
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.