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

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

评论

我以为这没话题了。

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

#1 楼

这就是FTP协议在被动模式下工作的方式。这可能不是一个好主意,因为我认为该模型在任何其他协议中都不会再重复一次(对于FTP活动模式更是如此)。 Wikipedia FTP文章提到FTP是按这种方式设计的,因为它最初并不是旨在通过TCP / IP进行操作的。

在数据连接端口上没有协议。服务器所知道的-连接中唯一包含任何信息的就是连接的端口号。
如果每次都连接到相同的端口,则服务器将无法分辨出什么您要连接的文件。端口号充当控制连接上的传输请求和数据连接之间的链接-该端口号包含在对PASV命令的响应中。
如果两个客户端要同时请求传输,当服务器在单个端口上接受连接时,服务器将无法确定要传输的文件。当然,服务器可以使用客户端IP进行决策(实际上,许多FTP服务器确实为了安全起见验证了客户端IP与控制连接上使用的IP匹配)。
不适用于:

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


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

评论


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

– Zephyr
17年8月29日在12:20

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

–马丁·普里克里(Martin Prikryl)
17年8月29日在12:26

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

– Zephyr
17年8月29日在12:27

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

–马丁·普里克里(Martin Prikryl)
17年8月29日在12:28



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

– jjmontes
17年8月29日在18:36



#2 楼

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

不幸的是,FTP很古老。我想,除了端口以外,古老的服务器无法区分多个客户端的数据会话。通常,最好继续使用最新协议,在单个套接字会话中将所有内容整齐地打包。

评论


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

– Zephyr
17年8月29日在11:11

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

– Zac67
17年8月29日在11:12



并不是说古老的服务器有麻烦,而是协议设计者仍在努力寻找最佳方法来完成比原始请求响应更复杂的事情。

–马克
17年8月30日在3:26