应用层——FTP

FTP 概述

文件传送协议 FTP(File Transfer Protocol) 是互联网上使用得最广泛的文件传送协议。

FTP 提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限。

我们必须分清文件传送和文件存取之间的区别,前者是 FTP 提供的,后者是如 NFS(Sun 的网络文件系统)等应用系统提供的。由 FTP 提供的文件传送是将一个完整的文件从一个系统复制到另一个系统中。要使用 FTP,就需要有登录服务器的注册帐号,或者通过允许匿名 FTP 的服务器来使用。

FTP 的基本工作原理

FTP 特点

  • 文件传送协议 FTP 只提供文件传送的一些基本的服务,它使用 TCP 可靠的运输服务。
  • FTP 的主要功能是减少或消除在不同操作系统下处理文件的不兼容性。
  • FTP 使用客户服务器方式。一个 FTP 服务器进程可同时为多个客户进程提供服务。FTP 的服务器进程由两大部分组成:一个主进程,负责接受新的请求;另外有若干个从属进程,负责处理单个请求。

主进程的工作步骤

  1. 打开熟知端口 21,使客户进程能够连接上。
  2. 等待客户进程发出连接请求。
  3. 启动从属进程来处理客户进程发来的请求。从属进程对客户进程的请求处理完毕后即终止,但从属进程在运行期间根据需要还可能创建其他一些子进程。
  4. 回到等待状态,继续接受其他客户进程发来的请求。主进程与从属进程的处理是并发地进行。

两个 TCP 连接

服务器端有两个从属进程:控制进程和数据传送进程。客户端主要有控制进程、数据传送进程和用户界面进程。

FTP 采用两个并行的 TCP 连接(控制连接和数据连接)来传输一个文件。

  1. 控制连接以通常的客户服务器方式建立。服务器以被动方式打开用于 FTP 的端口 21,等待客户的连接。客户则以主动方式打开 TCP 端口 21,来建立连接。控制连接始终等待客户与服务器之间的通信。该连接将命令从客户传给服务器,并传回服务器的应答。
    由于命令通常是由用户键入的,所以 IP 对控制连接的服务类型就是“最大限度地减小迟延”。
  2. 每当一个文件在客户与服务器之间传输时,就创建一个数据连接(其他时间也可以创建)。
    由于该连接用于传输目的,所以 IP 对数据连接的服务特点就是“最大限度提高吞吐量”。

控制连接在整个会话期间一直保持打开,FTP 客户发出的传送请求通过控制连接发送给服务器端的控制进程,但控制连接不用来传送文件。实际用于传输文件的是“数据连接”。服务器端的控制进程在接收到 FTP 客户发送来的文件传输请求后就创建“数据传送进程”和“数据连接”,用来连接客户端和服务器端的数据传送进程。数据传送进程实际完成文件的传送,在传送完毕后关闭“数据传送连接”并结束运行。

两个不同的端口号

当客户进程向服务器进程发出建立连接请求时,要寻找连接服务器进程的熟知端口(21),同时还要告诉服务器进程自己的另一个端口号码,用于建立数据传送连接。

接着,服务器进程用自己传送数据的熟知端口(20)与客户进程所提供的端口号码建立数据传送连接。

由于 FTP 使用了两个不同的端口号,所以数据连接与控制连接不会发生混乱。

使用两个不同端口号的好处:

  • 使协议更加简单和更容易实现。
  • 在传输文件时还可以利用控制连接(例如,客户发送请求终止传输)。

连接管理

数据连接有以下三大用途:

  1. 从客户向服务器发送一个文件。
  2. 从服务器向客户发送一个文件。
  3. 从服务器向客户发送文件或目录列表。

FTP 服务器把文件列表从数据连接上发回,而不是控制连接上的多行应答。这就避免了行的有限性对目录大小的限制,而且更易于客户将目录列表以文件形式保存,而不是把列表显
示在终端上。

通用传输方式(Unix环境下唯一的传输方式)是流方式,并且文件结尾是以关闭数据连接为标志。这意味着对每一个文件传输或目录列表来说都要建立一个全新的数据连接。其一般过程如下:

  1. 正由于是客户发出命令要求建立数据连接,所以数据连接是在客户的控制下建立的。
  2. 客户通常在客户端主机上为所在数据连接端选择一个临时端口号。客户从该端口发布一个被动的打开。
  3. 客户使用PORT命令从控制连接上把端口号发向服务器。
  4. 服务器在控制连接上接收端口号,并向客户端主机上的端口发布一个主动的打开。服务器的数据连接端一直使用端口 20。

第3步执行时的连接状态。

假设客户用于控制连接的临时端口是 1173,客户用于数据连接的临时端口是 1174。客户发出的命令是PORT命令,其参数是 6 个 ASCII 中的十进制数字,它们之间由逗点隔开。前面 4 个数字指明客户上的 IP 地址,服务器将向它发出主动打开(140.252.13.34),而后两位指明16bit端口地址。由于16bit端口地址是从这两个数字中得来,所以其值就是4×256+150 = 1174

服务器向客户所在数据连接端发布主动打开时的连接状态。服务器的端点是端口 20。

服务器总是执行数据连接的主动打开。通常服务器也执行数据连接的主动关闭,除非当客户向服务器发送流形式的文件时,需要客户来关闭连接(它给服务器一个文件结束的通知)。

客户也有可能不发出PORT命令,而由服务器向正被客户使用的同一个端口号发出主动打开,来结束控制连接。这是可行的,因为服务器面向这两个连接的端口号是不同的:一个是 20,另一个是 21。不过,现有实现通常不这样做。

NFS 采用另一种思路

网络文件系统 NFS 允许应用进程打开一个远地文件,并能在该文件的某一个特定的位置上开始读写数据。

NFS 可使用户只复制一个大文件中的一个很小的片段,而不需要复制整个大文件。

例如,计算机 A 的 NFS 客户软件,把要添加的数据和在文件后面写数据的请求一起发送到远地的计算机 B 的 NFS 服务器。NFS 服务器更新文件后返回应答信息。

NFS 在网络上传送的只是少量的修改数据。

简单文件传送协议 TFTP

TFTP(Trivial File Transfer Protocol) 是一个很小且易于实现的文件传送协议。

TFTP 使用客户服务器方式和使用 UDP 数据报,因此 TFTP 需要有自己的差错改正措施。

TFTP 只支持文件传输而不支持交互。

TFTP 没有一个庞大的命令集,没有列目录的功能,也不能对用户进行身份鉴别。

TFTP 的主要特点

  • 每次传送的数据 PDU 中有 512 字节的数据,但最后一次可不足 512 字节。
  • 数据 PDU 也称为文件块,每个块按序编号,从 1 开始。
  • 支持 ASCII 码或二进制传送。
  • 可对文件进行读或写。
  • 使用很简单的首部。

TFTP 的工作很像停止等待协议:

  • 发送完一个文件块后就等待对方的确认,确认时应指明所确认的块编号。
  • 发完数据后在规定时间内收不到确认就要重发数据 PDU。
  • 发送确认 PDU 的一方若在规定时间内收不到下一个文件块,也要重发确认 PDU。这样就可保证文件的传送不致因某一个数据报的丢失而告失败。

开始工作时,TFTP 客户进程发送一个读请求 PDU 或写请求 PDU 给 TFTP 服务器进程,其熟知端口号码为 69。

TFTP 服务器进程要选择一个新的端口和 TFTP 客户进程进行通信。

若文件长度恰好为 512 字节的整数倍,则在文件传送完毕后,还必须在最后发送一个只含首部而无数据的数据 PDU。

若文件长度不是 512 字节的整数倍,则最后传送数据 PDU 的数据字段一定不满 512 字节,这正好可作为文件结束的标志。

打赏
  • Copyrights © 2017-2023 WSQ
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信