FTP:为什么要使用PASV响应的IP?

FTP:为什么要使用PASV响应的IP?,ftp,protocols,ipv4,Ftp,Protocols,Ipv4,当发送FTP命令“PASV”时,FTP服务器会响应可以建立数据连接的主机和端口的信息 如果涉及NAT,则此主机信息可能有问题。一些客户端通过比较建议的数据连接主机的IP与控制连接的IP来解决此问题:如果在PASV之后建议的IP是本地IP,而控制连接未使用本地IP,则在使用主机连接的IP时,仅使用PASV响应提供的端口 例如,请参见Apache Commons实现: 我现在的问题是:为什么要使用PASV答案的主机?为什么不总是只使用PASV应答的端口,而使用控制连接的主机?据我所知,IPv6就是这

当发送FTP命令“PASV”时,FTP服务器会响应可以建立数据连接的主机和端口的信息

如果涉及NAT,则此主机信息可能有问题。一些客户端通过比较建议的数据连接主机的IP与控制连接的IP来解决此问题:如果在PASV之后建议的IP是本地IP,而控制连接未使用本地IP,则在使用主机连接的IP时,仅使用PASV响应提供的端口

例如,请参见Apache Commons实现:


我现在的问题是:为什么要使用PASV答案的主机?为什么不总是只使用PASV应答的端口,而使用控制连接的主机?据我所知,IPv6就是这样做的,但我从未见过IPv4。为什么?

在设计FTP时,有足够的IP地址,NAT不是一件需要考虑的事情。但是FTP被设计为支持客户端在两个不同系统之间发起传输的用例——有关详细信息,请参见或阅读中的图2。对于这个用例,端口或PASV命令中的IP地址必须不同于(单个)服务器resp。客户端IP

据我所知,IPv6就是这样做的,但我从未见过IPv4


您可能指的是EPRT和EPSV命令,它们只接受一个端口号,没有IP地址。虽然由于原始端口和PASV命令不支持IPv4而引入了这些命令,但这些命令可用于IPv6和IPv4,并且一些客户端也将这些命令用于IPv4,从而避免了端口/PASV中IP地址错误的问题。

您正在处理一个绝对古老的协议,没有人应该继续使用它。FTP发明时,世界看起来有点不同,但十多年来它都不相关了。谢谢!我阅读了FXP链接,但即使在这里,PASV也返回与要求提供它的控制连接相同的IP。PASV就像要求服务器提供一个连接——然后该服务器将始终使用自己的IP(如果遵循标准)。端口就像告诉服务器一个连接——客户端实际上可以使用前面的PASV命令提供的连接到另一台服务器,而不是提供这样的连接。不过,我还是不明白为什么我——从客户机的角度来看——不应该在PASV之后忽略答案的IP部分。@Pat:PASV和端口的建模方式相同,也就是说,客户端可能会指示服务器连接到另一个系统,然后使用端口的客户端和服务器可能会指示客户端使用PASV连接到另一个系统。然而,对于几乎所有的实际用途,IP地址今天都可以被忽略。这仍然不意味着它将在那时起作用,因为NAT不仅会改变IP,还会改变端口(尽管可能性较小)。奇怪的是,当将EPSV与IPv6一起使用时,这种行为是完全不同的。在那里,客户端在EPSV响应中不使用主机。所以这个“功能”可能已经不再被真正使用了。问题是“几乎所有的实际用途”是什么意思。我将把这个答案标记为正确的,但老实说,我仍然在考虑在PASV响应中忽略主机信息。再次感谢@帕特:“……问题是“几乎所有实际用途”是什么意思——FXP功能通常不使用。但考虑到FTP是多么古老和广泛,我很确定,在某个地方有一些几乎被遗忘但仍然是关键的系统依赖它。EPRT/EPSV的好处在于,您可以确定,没有人在IPv6中使用这种FXP功能,因为这是不可能的。