计算机网络--文件传送协议
上节是域名系统 DNS
这节是文件传送协议
一、FTP 概述
文件传送协议 FTP (File Transfer Protocol) 是互联网上使用得最广泛的文件传送协议。 FTP 提供交互式的访问,允许客户指明文件的类型与格式(如指明是否使用 ASCII码),并允许文件具有存取权限(如访问文件的用户必须经过授权,并输入有效的口令)。FTP 屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件。
在互联网发展的早期阶段,用 FTP 传送文件约占整个互联网的通信量的三分之一,而由电子邮件和域名系统所产生的通信量还小于 FTP 所产生的通信量。只是到了 1995 年,WWW 的通信量才首次超过了 FTP。
文件共享协议中的另一大类是联机访问(on-line access)。联机访问意味着允许多个程序同时对一个文件进行存取。和数据库系统的不同之处是用户不需要调用一个特殊的客户进程, 而是由操作系统提供对远地共享文件进行访问的服务,就如同对本地文件的访问一样。这就使用户可以用远地文件作为输入和输出来运行任何应用程序,而操作系统中的文件系统则提供对共享文件的透明存取。透明存取的优点是:将原来用于处理本地文件的应用程序用来处理远地文件时,不需要对该应用程序作明显的改动。属于文件共享协议的有网络文件系统 NFS (Network File System)。网络文件系统 NFS 最初是在 UNIX 操作系统环境下实现文件和目录共享的。 NFS 可使本地计算机共享远地的资源,就像这些资源在本地一样。由于 NFS 原先是美国 SUN 公司在 TCP/IP 网络上创建的,因此目前 NFS 主要应用在TCP/IP 网络上。然而现在 NFS 也可在 OS/2, MS-Windows, NetWare 等操作系统上运行。NFS 还没有成为互联网的正式标准。经过几次修订更新,现在的最新版本( NFSv4)于2015 年 3 月发布,目前还只是建议标准。限于篇幅,本书不讨论 NFS 的详细工作过程。
二、FTP 的基本工作原理
网络环境中的一项基本应用就是将文件从一台计算机中复制到另一台可能相距很远的计算机中。初看起来, 在两台主机之间传送文件是很简单的事情。其实这往往非常困难。原因是众多的计算机厂商研制出的文件系统多达数百种,且差别很大。经常遇到的问题是:
(1)计算机存储数据的格式不同。
(2)文件的目录结构和文件命名的规定不同。
(3)对于相同的文件存取功能,操作系统使用的命令不同。
(4)访问控制方法不同。
文件传送协议 FTP 只提供文件传送的一些基本的服务,它使用 TCP 可靠的运输服务。FTP 的主要功能是减少或消除在不同操作系统下处理文件的不兼容性。
FTP 使用客户服务器方式。一个 FTP 服务器进程可同时为多个客户进程提供服务。 FTP的服务器进程由两大部分组成:一个主进程,负责接受新的请求;另外有若干个从属进程,负责处理单个请求。
主进程的工作步骤如下:
(1)打开熟知端口(端口号为 21),使客户进程能够连接上。
(2)等待客户进程发出连接请求。
(3)启动从属进程处理客户进程发来的请求。从属进程对客户进程的请求处理完毕后即终止,但从属进程在运行期间根据需要还可能创建其他一些子进程。
(4)回到等待状态,继续接受其他客户进程发来的请求。主进程与从属进程的处理是并发进行的。
FTP 的工作情况如下图所示。图中的椭圆圈表示在系统中运行的进程。图中的服务器端有两个从属进程: 控制进程和数据传送进程。为简单起见,服务器端的主进程没有画上。客户端除了控制进程和数据传送进程外,还有一个用户界面进程用来和用户接口。
在进行文件传输时, FTP 的客户和服务器之间要建立两个并行的 TCP 连接:“控制连接”和“数据连接”。控制连接在整个会话期间一直保持打开, FTP 客户所发出的传送请求,通过控制连接发送给服务器端的控制进程,但控制连接并不用来传送文件。 实际用于传输文件的是“数据连接”。服务器端的控制进程在接收到 FTP 客户发送来的文件传输请求后就创建“数据传送进程”和“数据连接”,用来连接客户端和服务器端的数据传送进程。数据传送进程实际完成文件的传送,在传送完毕后关闭“数据传送连接”并结束运行。由于FTP 使用了一个分离的控制连接,因此 FTP 的控制信息是带外(out of band)传送的。
当客户进程向服务器进程发出建立连接请求时,要寻找连接服务器进程的熟知端口 21,同时还要告诉服务器进程自己的另一个端口号码,用于建立数据传送连接。接着, 服务器进程用自己传送数据的熟知端口 20 与客户进程所提供的端口号建立数据传送连接。由于FTP 使用了两个不同的端口号,所以数据连接与控制连接不会发生混乱。
使用两个独立的连接的主要好处是使协议更加简单和更容易实现,同时在传输文件时还可以利用控制连接对文件的传输进行控制。 例如,客户发送“请求终止传输”。
FTP 并非对所有的数据传输都是最佳的。例如,计算机 A 上运行的应用程序要在远地计算机 B 的一个很大的文件末尾添加一行信息。若使用 FTP,则应先将此文件从计算机 B传送到计算机 A,添加上这一行信息后,再用 FTP 将此文件传送到计算机 B,来回传送这样大的文件很花时间。实际上这种传送是不必要的,因为计算机 A 并没有使用该文件的内容。
然而网络文件系统 NFS 则采用另一种思路。 NFS 允许应用进程打开一个远地文件,并能在该文件的某一个特定的位置上开始读写数据。这样, NFS 可使用户只复制一个大文件中的一个很小的片段,而不需要复制整个大文件。对于上述例子,计算机 A 中的 NFS 客户软件,把要添加的数据和在文件后面写数据的请求一起发送到远地的计算机 B 中的 NFS 服务器, NFS 服务器更新文件后返回应答信息。 在网络上传送的只是少量的修改数据。
三、简单文件传送协议 TFTP
TCP/IP 协议族中还有一个简单文件传送协议 TFTP (Trivial File Transfer Protocol),它是一个很小且易于实现的文件传送协议。 TFTP 的版本 2 是互联网的正式标准。虽然 TFTP 也使用客户服务器方式,但它使用 UDP 数据报,因此 TFTP 需要有自己的差错改正措施。 TFTP 只支持文件传输而不支持交互。 TFTP 没有一个庞大的命令集,没有列目录的功能,也不能对用户进行身份鉴别。
TFTP 的主要优点有两个。第一, TFTP 可用于 UDP 环境。例如,当需要将程序或文件同时向许多机器下载时就往往需要使用 TFTP。第二, TFTP 代码所占的内存较小。这对较小的计算机或某些特殊用途的设备是很重要的。这些设备不需要硬盘,只需要固化了TFTP、 UDP 和 IP 的小容量只读存储器即可。当接通电源后,设备执行只读存储器中的代码,在网络上广播一个 TFTP 请求。网络上的 TFTP 服务器就发送响应,其中包括可执行二进制程序。设备收到此文件后将其放入内存,然后开始运行程序。这种方式增加了灵活性,也减少了开销。
TFTP 的主要特点是:
(1)每次传送的数据报文中有 512 字节的数据,但最后一次可不足 512 字节。
(2)数据报文按序编号,从 1 开始。
(3)支持 ASCII 码或二进制传送。
(4)可对文件进行读或写。
(5)使用很简单的首部。
发送完一个文件块后就等待对方的确认,确认时应指明所确认的块编号。发完数据后在规定时间内收不到确认就要重发数据PDU。发送确认 PDU 的一方若在规定时间内收不到下一个文件块,也要重发确认 PDU。这样就可保证文件的传送不致因某一个数据报的丢失而告失败。
在一开始工作时。 TFTP 客户进程发送一个读请求报文或写请求报文给 TFTP 服务器进程,其熟知端口号码为 69。 TFTP 服务器进程要选择一个新的端口和 TFTP 客户进程进行通信。若文件长度恰好为 512 字节的整数倍,则在文件传送完毕后,还必须在最后发送一个只含首部而无数据的数据报文。若文件长度不是 512 字节的整数倍,则最后传送数据报文中的数据字段一定不满 512 字节,这正好可作为文件结束的标志。
来自:《计算机网络》--谢希仁