Apache HTTP Server 版本 2.4
可用语言: en
文件传输协议 (FTP) 是一种经典的标准,用于在 TCP/IP 网络上传输文件和记录。它由 Jon Postel 和 Joyce Reynolds 在 RFC 959 中定义,该文档于 1985 年发布。这意味着 FTP 比通常与 Apache 服务器相关的 HTTP 协议早了半个多世纪。mod_ftp
模块为 Apache 服务器提供了对 FTP 的支持,并包含对原始协议的若干更新。最值得注意的是,mod_ftp
实现了 FTP over Transport Layer Security (TLS),如 RFC 4217 中所述。
在本手册页中,将简要概述 FTP 协议的技术概述,然后讨论 mod_ftp
对 FTP 的实现。
文件传输协议 (FTP) 旨在促进 TCP/IP 网络上主机之间文件的双向传输。与 HTTP 不同,FTP 协议是有状态的:客户端在 FTP 会话期间建立一个控制连接,该会话通常跨越多个数据传输。
FTP 使用单独的 TCP 连接进行数据传输。命令通过控制连接发出并确认,该连接是到知名端口 21 的 TCP 连接。如果用户发出的命令需要比单行响应代码更详细的响应,则会在客户端和服务器之间建立一个数据连接。响应数据(文件内容或目录列表)通过该数据连接发送。
从历史上看,数据连接是从服务器建立到客户端的。客户端将绑定到一个任意端口,然后使用PORT 命令将它的 IP 地址和端口号传输到服务器。然后,服务器建立到客户端主机该端口的数据连接,然后客户端发出数据传输命令。这种方法被称为主动 FTP(因为服务器充当建立数据连接的角色)。不幸的是,主动 FTP 在防火墙和网络地址转换 (NAT) 中效果不佳,因为传入连接通常会被阻止。在 NAT 的情况下,客户端只指示服务器连接到它的内部不可路由 IP 地址。一些防火墙和 NAT 路由器支持 FTP 协议,但这种支持并非普遍存在。在支持 FTP 的情况下,这些设备可以重写 PORT 命令并为 FTP 数据连接建立临时访问规则。
由于这些限制,开发了一种替代方法,其中数据连接的方向被反转。这被称为被动 FTP。在开始数据传输之前,客户端发出PASV 命令。服务器绑定到一个任意端口号,并将它的 IP 地址和该端口号传输回客户端。然后,客户端建立到服务器该地址和端口的数据连接,并发出数据传输命令。被动 FTP 比主动 FTP 更适合防火墙,因为客户端防火墙通常对传出连接比传入连接更宽松。
虽然 FTP 可以支持未经身份验证的会话,但在实践中,所有会话都经过身份验证。通常,FTP 服务器会针对其运行的服务器的用户数据库进行身份验证。为了方便公众下载,FTP 服务器通常支持一个特殊的用户名(按照惯例为“anonymous” 或“ftp”)以提供只读访问权限。用户被要求(但通常不是必需的)在Password
提示符中提供他们的电子邮件地址作为响应。
可用语言: en