根据 FTP 协议(rfc 959),当 ftp 客户端连接到 ftp 服务器时,应该在 ftp 客户端和 ftp 服务器之间建立控制连接。而当ftp客户端发送{LIST, RETR, STOR, etc}的请求时,首先要建立客户端和服务器之间的数据连接,在数据连接中传输ftp数据。
所以,我的问题是:为什么我们需要第二个连接——数据连接?为什么不是所有的请求、响应和 ftp 数据都在控制连接中传输?
根据 FTP 协议(rfc 959),当 ftp 客户端连接到 ftp 服务器时,应该在 ftp 客户端和 ftp 服务器之间建立控制连接。而当ftp客户端发送{LIST, RETR, STOR, etc}的请求时,首先要建立客户端和服务器之间的数据连接,在数据连接中传输ftp数据。
所以,我的问题是:为什么我们需要第二个连接——数据连接?为什么不是所有的请求、响应和 ftp 数据都在控制连接中传输?
1972 年 4 月 14 日至 15 日,在 MIT 的数据和文件传输研讨会上决定在 FTP 中使用单独的控制和数据连接。
RFC310“另一个看数据和文件传输协议”于 4 月 3 日发布,为研讨会做准备。该 RFC 中的一些相关信息:
RFC327:“数据和文件传输研讨会笔记”,于 4 月 27 日发布,简要总结了研讨会中的讨论和做出的决定。文件传输的速度和效率被认为很重要,字节大小和数据格式转换被认为是影响速度和效率的一些最重要的因素。最后,决定使用单独的控制和数据连接。做出了其他决定:控制连接将是 TELNET 连接,控制连接将使用 ASCII 人类可读的命令和响应,并且 DTP(数据传输协议)将不再作为单独的实体存在,并成为在FTP的数据连接。
最后,1972 年 7 月 8 日发布的 RFC354:“文件传输协议”成为 FTP RFC 的第一个化身,具有单独的控制和数据连接。它使用了一个SOCK
命令,而不是我们熟悉的PORT
和PASV
命令。
附录
1973 年 8 月 12 日发布的 RFC542“ARPA 网络的文件传输协议”中出现了服务器间文件传输(AKA FTP 反弹/FXP),并引入了该PASV
命令。
最后,1980 年 6 月发布的 RFC765“文件传输协议”被修改为使用 TCP 而不是 NCP,将SOCK
命令更改为PORT
命令。
例如,当您有单独的数据连接时,您可以直接在两个 FTP 服务器之间传输文件,而不是通过您的客户端计算机。人们今天不使用此功能,但在过去数据传输非常缓慢时,它可能很有用。
因为这不是 FTP 的工作方式。
此外,这种安排还有一些好处,包括:
控制连接上不需要复杂的框架。
处理特殊情况(例如取消数据连接)更简单。
您可以一次运行多个传输,而无需建立多个控制连接。
它启用了一种称为 FXP 的技巧,可以让您使两个 FTP 服务器直接在彼此之间交换数据。