在Linux中,FTP(File Transfer Protocol,文件传输协议)协议支持两种工作模式:主动模式(Active Mode)和被动模式(Passive Mode)。这两种模式在数据传输的发起和连接建立的方式上存在显著差异。以下分别详细说明这两种模式的工作流程:
一、主动模式(Active Mode)
- 建立控制连接:
- 客户端首先通过TCP协议连接到FTP服务器的21端口,建立起控制连接。这个连接用于传输控制信息,如登录认证、命令和响应等。
- 认证:
- 客户端向服务器发送用户名和密码进行身份验证。只有认证成功后,客户端才能进行后续的文件操作。
- 请求数据连接:
- 当客户端需要下载或上传文件时,它会向服务器发送一个PORT命令。PORT命令中包含了客户端为即将接收数据而打开的端口号信息(通常是一个大于1023的随机端口号N)。此外,客户端通常会在N+1端口上进行监听,等待来自服务器的连接。
- 服务器建立数据连接:
- FTP服务器收到PORT命令后,使用其固定的20号端口主动发起一个TCP连接到客户端指定的端口N。这个连接就是用于数据传输的数据连接。
- 数据传输:
- 一旦数据连接建立,服务器就可以开始通过这个连接向客户端发送文件数据(下载)或从客户端接收文件数据(上传)。
- 数据连接关闭:
- 数据传输完成后,数据连接会被关闭,但控制连接仍然保持,以便客户端可以继续发送其他命令,如请求更多文件传输或其他FTP操作。
二、被动模式(Passive Mode)
- 建立控制连接:
- 与主动模式相同,客户端首先通过TCP连接到FTP服务器的21端口,建立起控制连接。
- 认证:
- 客户端向服务器发送用户名和密码进行身份验证。
- 请求被动连接:
- 当客户端准备进行文件传输时,它会发送一个PASV命令给服务器,请求进入被动模式。
- 服务器开放端口并通知客户端:
- 服务器收到PASV命令后,会在本地打开一个临时的、未使用的端口(通常大于1024的端口Y),并通过控制连接告知客户端这个端口号以及服务器的IP地址。
- 客户端建立数据连接:
- 客户端收到服务器的响应后,通过控制连接之外的另一个TCP连接(如使用随机端口X+1)主动发起一个连接到服务器指定的端口Y。这个连接就是用于数据传输的数据连接。
- 数据传输:
- 数据连接建立后,服务器开始通过这个连接向客户端发送文件数据(下载)或从客户端接收文件数据(上传)。
- 数据连接关闭:
- 数据传输完成后,数据连接会被关闭,控制连接继续保持,以便客户端可以继续发送其他FTP命令。
三、总结
- 主动模式下,服务器主动发起数据连接到客户端的指定端口,这可能导致在客户端位于防火墙或NAT后面时连接失败。
- 被动模式下,所有连接都是由客户端发起的,因此更适合穿越防火墙和NAT的场景,是现代网络环境中更常用的模式。
综上所述,以上信息基于FTP协议的工作原理和广泛使用的实践,确保了准确性和可靠性。