任何人都可以简单地解释被动模式FTP(PASV)和扩展被动模式FTP(EPSV)之间的区别吗?
任何人都可以简单地解释被动模式FTP(PASV)和扩展被动模式FTP(EPSV)之间的区别吗?
Answers:
唯一的区别是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,状态防火墙也经常监视控制命令,以便在没有手动规则的情况下自动允许数据连接。
这基本上意味着只需向许多人发送更多数字PORT
或PASV
保证中断。也许有些防火墙会悄悄地将一些地址字节误解为端口,然后悄悄丢弃其余部分; 其他人可能会放弃连接,或者只是崩溃。
为了避免上述各种问题,必须引入新的命令以支持FTP中的多协议。
1993年,RFC 1639(最初是RFC 1545)引入了“长地址” LPRT
和LPSV
命令,它们类似于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
但是,这仍然没有解决一些问题,例如要求服务器使用与控制连接不同的协议。RFC也很快变得过时了; 当IPv6在一年之后问世时,它不能与LPRT一起使用,因为没有为其分配LPRT协议标识符(仅适用于各种早期提议)。
为了解决这个问题,RFC 2428,1998年加入EPRT
和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|
总之,IPv6支持是唯一的区别。
EPSV
响应不包括IP地址(PASV
响应的作用)。这是为了避免位于NAT后面的FTP服务器不知道它的外部IP地址时的常见问题,并通过向其发送内部地址来混淆FTP客户端。
主动和被动之间的差异已经得到解决。扩展被动(EPSV)在IPv4和IPv6中只是被动的,因为对PASV的响应语法特定于IPv4,因此IPv6需要新的命令。与活动模式下的EPTR与PORT相同。EPRT和EPSV的行为略有不同,因为它们只能包含端口,而不是像PORT和PASV那样的IP和端口。因此,数据传输只能在具有控制连接的系统之间进行。使用PORT和PASV,可以在其他系统之间创建数据连接(尽管今天这被认为是糟糕的设计和安全风险)。