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

CGC*_*ell 17 ftp

谁能简单解释一下被动模式 FTP (PASV) 和扩展被动模式 FTP (EPSV) 之间的区别?

use*_*686 21

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

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

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

PORT 132,235,1,2,24,131
Run Code Online (Sandbox Code Playgroud)

但随后其他协议开始出现。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命令,类似于PORT&PASV但具有可变地址长度;它们还包括协议类型标识符。(虽然它没有改变语法——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
Run Code Online (Sandbox Code Playgroud)

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

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

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

EPRT |1|132.235.1.2|6275|

EPRT |2|1080::8:800:200C:417A|5282|
Run Code Online (Sandbox Code Playgroud)

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

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