FTP 采用在主机之间建立两个 TCP 连接的方式来实现数据传输,一个连接用于控制信息的传输(命令和响应),另外一 个连接用于数据传输。

ftp控制连接

FTP连接的建立过程和普通的客户端—服务器的连接建立过程完全相同,包括一下两个步骤

  • 服务器在 TCP 的 21端口 上监听客户端连接请求(即被动打开)
  • 客户端使用一个临时端口连接到服务器的21端口上(即发起主动打开)
  • 随后在整个FTP会话过程中,控制连接一直保持,用于客户端和服务器之间进行命令的请求和应答 。

FTP协议 - 图1

ftp数据连接

ftp数据连接主动模式:

  • 客户端通过在控制连接上发送PROT命令,告诉服务器客户端将在某个临时端口 (510000)上监听服务器的数据连接请求
  • 服务器收到PROT命令后,从20端口发送主动连接到客户端的该临时监听端口,从而建立 数据TCP连接

FTP协议 - 图2

ftp数据连接被动模式:

  • 客户端通过在控制连接上发送PASV命令,请求服务器告诉客户端服务器将在哪个临时 端口(40000)监听客户端的数据连接请求
  • 服务器收到PASV命令后,在该临时端口上进行监听,并将监听的端口(40000)发送给 客户端,客户端从该应答中获得服务器的数据连接监听端口,然后从客户端的一个临时 发起主动连接服务器的该临时监听端口,从而建立数据TCP连接

FTP协议 - 图3

ftp命令

FTP协议 - 图4

FTP协议 - 图5

ftp服务器应答

  1. FTP服务应答状态码首位数字及其含义
  • 1xx命令正确,服务器在接收下一条命令之前将发回另外一条响应信息
  • 2xx命令完全正确,服务器等待接下一条请求命令
  • 3xx命令正确接收,但是服务器需要进一步信息
  • 4xx 命令发生暂时错误,可以随后再次输入同样的命令
  • 5xx命令发生永久性错误,不能再次输入同样的命令
  1. FTP服务应答状态第2位数字及其含义
  • x0x语法相关的命令
  • x1x信息相关的命令
  • x2x连接相关的命令
  • x3x鉴权相关的命令
  • x4x未定义
  • x5x文件系统相关的命令
  1. ftp常见的应答状态码
  • 150 数据连接即将打开
  • 200 命令正确
  • 220 服务器已经准备好
  • 226 关闭数据连接
  • 230 用户登陆成功
  • 250 请求文件操作成功
  • 331 用户名正确,请输入口令
  • 426 连接关闭,放弃传输
  • 500 语法错误,不能识别的命令
  • 501 参数中语法错误
  • 530 用户未登陆
  • 550 请求操作未执行,文件不可用