文件传输协议 FTP

文件传输协议(File Transfer Protocol,FTP)是因特网上使用得最广泛的文件传输协议。FTP 提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限。它屏蔽了各计算机系统的细节,因而适合于在异构网络中的任意计算机之间传送文件。

FTP 最鲜明的特征是两条并行的 TCP 连接:控制连接(21 号端口)在整个会话期间一直开着但不传文件,数据连接(20 号端口)每传一个文件建一次。真题考过 FTP 在传输层使用的协议(2009、2018)、控制连接的作用(2009)以及两条连接的特点(2017、2023)。

本页 2 道错题:数据在服务器上自上而下封装的 5 个名字,以及两种传输方式各用在什么文件上。

机制

6.3.1 FTP 的工作原理

FTP 提供以下功能:

  1. 提供不同种类主机系统(硬、软件体系等都可以不同)之间的文件传输能力。
  2. 以用户权限管理的方式提供用户对远程 FTP 服务器上的文件管理能力。
  3. 以匿名 FTP 的方式提供公用文件共享的能力。

FTP 采用客户/服务器的工作方式,使用 TCP 可靠的传输服务。一个 FTP 服务器进程可同时为多个客户进程提供服务。FTP 的服务器进程由两大部分组成:一个主进程,负责接收新的请求;另外有若干从属进程,负责处理单个请求。其工作步骤如下:

  1. 打开熟知端口 21(控制端口),使客户进程能够连接上。
  2. 等待客户进程发连接请求。
  3. 启动从属进程处理客户进程发来的请求。从属进程对客户进程的请求处理完毕后即终止。
  4. 回到等待状态,继续接收其他客户进程的请求。主进程与从属进程是并发执行的。

FTP 服务器必须在整个会话期间保留用户的状态信息。 特别是服务器必须把指定的用户账户与控制连接联系起来,服务器必须追踪用户在远程目录树上的当前位置。

6.3.2 控制连接与数据连接

FTP 在工作时使用两个并行的 TCP 连接:一个是控制连接(服务器端口号 21),一个是数据连接(服务器端口号 20)。使用两个不同的端口号可以使协议更容易实现。

flowchart LR
  subgraph C["客户端"]
    UI["用户界面"] --> CP["控制进程"]
    DP["数据传送进程"]
  end
  subgraph S["服务器端"]
    CP2["控制进程"]
    DP2["数据传送进程"]
  end
  CP -- "TCP 控制连接(21):整个会话期间保持" --> CP2
  DP -- "TCP 数据连接(20):每次传文件建立,传完关闭" --> DP2

控制连接:服务器监听 21 号端口,等待客户连接,建立在这个端口上的连接称为控制连接,用来传输控制信息(如连接请求、传送请求等)。FTP 客户发出的传送请求,通过控制连接发送给服务器端的控制进程,但控制连接并不用来传送文件。在传输文件时还可以使用控制连接(如客户在传输中途发一个中止传输的命令),因此控制连接在整个会话期间一直保持打开状态(控制连接的作用 2009 年考过)。

数据连接:服务器端的控制进程在接收到 FTP 客户发送来的文件传输请求后,就创建”数据传送进程”和”数据连接”。数据连接用来连接客户端和服务器端的数据传送进程,数据传送进程实际完成文件的传送,在传送完毕后关闭”数据传送连接”并结束运行。

数据连接有两种传输模式:

模式工作原理一句话
主动模式 PORT客户端连接到服务器的 21 端口,登录成功后要读取数据时,客户端随机开放一个端口,并发送命令告知服务器;服务器收到 PORT 命令和端口号后,通过 20 端口和客户端开放的端口连接,发送数据服务器连接到客户端的端口
被动模式 PASV客户端要读取数据时,发送 PASV 命令到服务器,服务器在本地随机开放一个端口并告知客户端,客户端再连接到服务器开放的端口进行数据传输客户端连接到服务器的端口

用 PORT 模式还是 PASV 模式,选择权在客户端。王道的注意框指出:很多教材并未介绍这两种模式,若无特别说明,则可默认为采用主动模式。

因为 FTP 使用了一个分离的控制连接,所以也称 FTP 的控制信息是带外(Out-of-band)传送的。作为对比,HTTP 的请求和响应报文都在同一个 TCP 连接上传送,属于带内传送(6.5.2)。

使用 FTP 时,要修改服务器上的文件,就需要先将此文件传送到本地主机,然后将修改后的文件副本传送到原服务器,来回传送耗费很多时间。**网络文件系统(NFS)**采用另一种思路,它允许进程打开一个远程文件,并能在该文件的某个特定位置开始读写数据,因此 NFS 可使用户只复制一个大文件中的一个很小的片段,而不需要复制整个大文件。

计算模板

与 TCP 序号结合的综合题

FTP 综合题常和第 5 章的序号计算合在一起(王道 6.3.3 综合题 4):

  1. 登录 FTP 服务器时建立的 TCP 连接是控制连接;文件传输时才另建数据连接。
  2. 建立连接时第一次握手的 SYN 段消耗一个序号:初始序号为 100,则第一个数据字节的序号为 101。
  3. 文件 共 18000 字节,占用序号 101~18100。
  4. 释放连接时第一次挥手的 FIN 段也消耗一个序号,其序号为 18101,因此对方第二次挥手 ACK 段的确认号为 18102(5.3.3)。

边界

错题复盘:自上而下封装的五个名字是数据、数据段、数据报、数据帧、比特

王道 6.3.3 第 10 题:当一台计算机从 FTP 服务器下载文件时,在该 FTP 服务器上对数据进行封装的 5 个转换步骤是(A. 比特,数据帧,数据报,数据段,数据 B. 数据,数据段,数据报,数据帧,比特 C. 数据报,数据段,数据,比特,数据帧 D. 数据段,数据报,数据帧,比特,数据)。答案 B。

FTP 服务器的数据要经过应用层、传输层、网络层、数据链路层及物理层。因此,对应的封装是数据(应用层报文)、数据段(TCP 报文段)、数据报(IP 数据报)、数据帧(MAC 帧),最后是比特。

选 A 是把方向弄反了:发送方自上而下封装,接收方自下而上解封装。题干说的是”在服务器上对数据进行封装”,服务器是发送方(分层、协议、PDU 对照表)。

错题复盘:文本文件用 ASCII 方式,图像声音用 Binary 方式

王道 6.3.3 第 11 题:FTP 支持两种方式的传输:ASCII 方式和 Binary(二进制)方式。通常文本文件的传输采用( )方式,而图像、声音等非文本文件采用( )方式传输(A. ASCII,Binary B. Binary,ASCII C. ASCII,ASCII D. Binary,Binary)。答案 A。

FTP 支持 ASCII 和 Binary 两种方式的传输,通常非加密文本文件采用 ASCII 方式传输,而图像、声音等非文本文件采用 Binary 方式传输。王道注明:本题可能有所超纲,了解即可。

两种方式的差别在于换行符:ASCII 方式会按目标系统的约定转换换行(Windows 的 CRLF 与 UNIX 的 LF),这对纯文本是好事,对二进制文件则会破坏内容——所以图像、声音必须用 Binary。

控制连接先建立、最后释放;数据连接后建立、先释放。 FTP 客户首先连接服务器的 21 号端口建立控制连接,然后建立数据连接,数据传送完毕后数据连接最先释放,控制连接最后释放(王道 6.3.3 第 4 题)。

20、21 指的是服务器端的端口号。 客户端的控制连接和数据连接的端口号都由客户端系统自动分配(第 2 题)。

文件列表也通过数据连接传输。 数据连接不只传文件内容(第 8 题)。

FTP 没有”传输连接”和”会话连接”的说法。 只有控制连接和数据连接(第 5 题)。

FTP 使用 TCP,DNS 使用 UDP。 FTP 要保证可靠性(第 12、13 题,2018)。

口径差异:今天的 FTP 数据连接与安全

教材口径:默认采用主动模式(PORT),服务器用 20 号端口主动连接客户端。

工程口径:客户端多在 NAT 或防火墙之后,外部无法主动连入,因此实际使用中被动模式(PASV)才是默认,服务器随机开一个高端口等客户端来连——这时服务器端就不再使用 20 号端口。另外 FTP 的账号密码是明文传输的,现在多改用 FTPS(FTP over TLS)或 SFTP(SSH 文件传输子系统,与 FTP 无关的另一套协议)。

考试按教材口径:无特别说明按主动模式,数据连接用服务器的 20 号端口。

对照速查

说法对错
FTP 使用 TCP 提供可靠传输✅(2018)
FTP 控制连接用 21 号端口,数据连接用 20 号端口✅(指服务器端)
控制连接也用来传送文件❌
控制连接在整个会话期间保持打开✅(2009)
数据连接在每次文件传输完毕后关闭✅
数据连接最后释放,控制连接先释放❌(反了)
FTP 的控制信息是带外传送的✅
HTTP 的控制信息也是带外传送的❌(带内)
PASV 模式下服务器仍用 20 号端口❌(服务器随机开端口)
选择 PORT 还是 PASV 由服务器决定❌(客户端)
FTP 服务器需要保存会话期间的用户状态✅

考点

  • FTP:C/S + TCP;主进程 + 从属进程;熟知端口 21(2009、2018)
  • 控制连接(21,全程保持,不传文件)与数据连接(20,传完即关)(2017、2023)
  • PORT(服务器连客户端)与 PASV(客户端连服务器),选择权在客户端
  • 带外传送;与 HTTP 的带内传送对比
  • 封装顺序:数据 → 数据段 → 数据报 → 数据帧 → 比特

链接