在FTP中,被动和扩展被动模式之间有什么区别?


16

任何人都可以简单地解释被动模式FTP(PASV)和扩展被动模式FTP(EPSV)之间的区别吗?


2
@DavidPostill对不起,我真的只对PASV和EPSV感兴趣。
CGCampbell 2014年

Answers:


19

唯一的区别是PORT/PASV仅限于IPv4,同时EPRT/EPSV适用于任何网络协议(尽管在实践中仅使用IPv6)。

FTP控制协议中的标准PORT(活动)和PASV(被动)命令将地址和端口信息交换为六个1字节小数,另一端必须重建一个四字节IP地址和两字节TCP端口号。

PORT <address[4]>,<port[2]>

PORT 132,235,1,2,24,131

但随后其他协议开始出现。IPv4即将被替换为“IPng”,它有相当多的竞争替代提议(OSI CLNP,TUBA,SIP,SIPP,CATNIP - 历史上的不同时期),有些具有更短,更长,甚至可变的主机地址大小,直到最终定义了具有16字节地址的IPv6。

只发送更多字节是行不通的 - 不能指望服务器和客户端完全基于地址长度知道正确的协议。(例如,如果你有一个16字节地址+ 4字节端口的协议,另一个12字节地址+ 12字节端口怎么办?)

除此之外 - 尽管这在20年前还不那么重要 - 现在互联网上有数百万台NAT设备,它们会检查和破坏FTP控制连接,这样“外部”主机只会看到全局IPv4地址,即使“内部”也是如此主机发送了一个RFC1918本地的。即使没有NAT,状态防火墙也经常监视控制命令,以便在没有手动规则的情况下自动允许数据连接。

这基本上意味着只需向许多人发送更多数字PORTPASV保证中断。也许有些防火墙会悄悄地将一些地址字节误解为端口,然后悄悄丢弃其余部分; 其他人可能会放弃连接,或者只是崩溃。

为了避免上述各种问题,必须引入新的命令以支持FTP中的多协议。

1993年,RFC 1639(最初是RFC 1545)引入了“长地址” LPRTLPSV命令,它们类似于PORTPASV但具有可变的地址长度 ; 它们还包括协议类型标识符。(虽然它没有改变语法 - IPv6地址:端口只会被发送为21个数字而不是6个。)

LPRT <protocol>,<addr-length>,<address...>,<port-length>,<port...>

LPRT 4,4,132,235,1,2,2,24,131

LPRT 6,16,16,128,0,0,0,0,0,0,0,8,8,0,32,12,65,122,2,20,162

但是,这仍然没有解决一些问题,例如要求服务器使用与控制连接不同的协议。RFC也很快变得过时了; 当IPv6在一年之后问世时,它不能与LPRT一起使用,因为没有为其分配LPRT协议标识符(仅适用于各种早期提议)。

为了解决这个问题,RFC 2428,1998年加入EPRTEPSV,又名“扩展端口”和“扩展被动”,这也有用于协商协议,两端支持的方法。“扩展”命令还以人类可读的形式发送地址 - 对于IPv6,这意味着使用十六进制和冒号表示法,而不是一系列单独的十进制数字。

EPRT x<protocol>x<address>x<port>x

EPRT |1|132.235.1.2|6275|

EPRT |2|1080::8:800:200C:417A|5282|

总之,IPv6支持是唯一的区别。


哇,我读过的所有网站都没有点击,直到这一个。谢谢你。我会在一两个小时内接受它(可能),想看看是否有其他人做的不同。此外,我之所以要求Active也是因为标签与谷歌一起运作良好,这个问题/答案将在搜索中找到。如果没有人添加答案(使谷歌答案更完整)我将编辑我的原始问题和正文以反映你的答案的内容,基本上我的问题适合你的答案。
CGCampbell 2014年

3
另一个区别是EPSV响应不包括IP地址(PASV响应的作用)。这是为了避免位于NAT后面的FTP服务器不知道它的外部IP地址时的常见问题,并通过向其发送内部地址来混淆FTP客户端。
Martin Prikryl

要添加@MartinPrikryl所说的,另一个原因是当使用FTP-over-TLS时,防火墙/ NAT无法拦截PASV命令中的IP地址来重写它(至少在没有MITMing控制连接的情况下)。 Unix世界人通常使用SFTP而不是FTP-over-TLS,FTP-over-TLS通常与IBM大型机一起使用,因为FTP支持面向记录的文件(STRU R,MODE B),而SFTP仅支持面向流的文件
Simon Kissane

1

主动和被动之间的差异已经得到解决。扩展被动(EPSV)在IPv4和IPv6中只是被动的,因为对PASV的响应语法特定于IPv4,因此IPv6需要新的命令。与活动模式下的EPTR与PORT相同。EPRT和EPSV的行为略有不同,因为它们只能包含端口,而不是像PORT和PASV那样的IP和端口。因此,数据传输只能在具有控制连接的系统之间进行。使用PORT和PASV,可以在其他系统之间创建数据连接(尽管今天这被认为是糟糕的设计和安全风险)。


2
这是我不想要的那种答案。它告诉我与其他地方一样多,这就是EPSV是为IPv6创建的,但没有解释原因。(即我不接受你的理由作为一个足够好的解释)我告诉你这个,希望你可能会让你的答案更好。
CGCampbell 2014年

编辑响应清楚地表明,需要对PASV命令的响应不支持IPv6,因此需要新的命令。
Steffen Ullrich
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.