当前位置: 首页 > news >正文

应用层 II(文件传输协议FTP)【★★】

(★★)代表非常重要的知识点,(★)代表重要的知识点。

一、文件传输协议(FTP)

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

在互联网发展的早期阶段,用 FTP 传送文件约占整个互联网的通信量的三分之一,而由电子邮件和域名系统所产生的通信量还小于 FTP 所产生的通信量。只是到了 1995 年,WWW 的通信量才首次超过了 FTP 。

下面将分别介绍基于 TCP 的 FTP 和基于 UDP 的简单文件传送协议 TFTP ,它们都是文件共享协议中的一大类,即复制整个文件,其特点是:若要存取一个文件,就必须先获得一个本地的文件副本。如果要修改文件,只能对文件的副本进行修改,然后再将修改后的文件副本传回到原节点。

【拓展】:
文件共享协议中的另一大类是联机访问(on-line access)。联机访问意味着允许多个程序同时对一个文件进行存取。和数据库系统的不同之处是用户不需要调用一个特殊的客户进程,而是由操作系统提供对远地共享文件进行访问的服务,就如同对本地文件的访问一样。这就使用户可以用远地文件作为输入和输出来运行任何应用程序,而操作系统中的文件系统则提供对共享文件的透明存取。

透明存取的优点是:将原来用于处理本地文件的应用程序用来处理远地文件时,不需要对该应用程序作明显的改动。属于文件共享协议的有网络文件系统 NFS(Network File System)。网络文件系统 NFS 最初是在 UNIX 操作系统环境下实现文件和目录共享的。NFS 可使本地计算机共享远地的资源,就像这些资源在本地一样。需要注意的是 NFS 还没有成为互联网的正式标准。

1. FTP 的工作原理

网络环境中的一项基本应用就是将文件从一台计算机中复制到另一台可能相距很远的计算机中。初看起来,在两台主机之间传送文件是很简单的事情。其实这往往非常困难。原因是众多的计算机厂商研制出的文件系统多达数百种,且差别很大。经常遇到的问题是:

  • 计算机存储数据的格式不同。
  • 文件的目录结构和文件命名的规定不同。
  • 对于相同的文件存取功能,操作系统使用的命令不同。
  • 访问控制方法不同。

文件传送协议 FTP 只提供文件传送的一些基本的服务,它使用 TCP 可靠的运输服务。FTP 的主要功能是减少或消除在不同操作系统下处理文件的不兼容性。即 FTP 提供以下功能:

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

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

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

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

2. 控制连接与数据连接(★)

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

FTP 的工作情况如下图所示,图中的椭圆圈表示在系统中运行的进程。图中的服务器端有两个从属进程:控制进程和数据传送进程,为简单起见,服务器端的主进程没有画上。客户端除了控制进程和数据传送进程外,还有一个用户界面进程。

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

当客户进程向服务器进程发出建立连接请求时,要寻找连接服务器进程的熟知端口 21 ,同时还要告诉服务器进程自己的另一个端口号码,用于建立数据传送连接。接着,服务器进程用自己传送数据的熟知端口 20 与客户进程所提供的端口号建立数据传送连接。由于 FTP 使用了两个不同的端口号,所以数据连接与控制连接不会发生混乱。

使用两个独立的连接的主要好处是:使协议更加简单和更容易实现,同时在传输文件时还可以利用控制连接对文件的传输进行控制。例如,客户发送“请求终止传输”。

在服务器端:控制连接使用 TCP 的 21 号端口,数据连接使用 TCP 的 20 号端口;
而在客户端:控制连接和数据连接的 TCP 端口号都是由客户端系统自动分配的。

1)控制连接

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

2)数据连接

数据连接有两种传输模式:主动模式 PORT 和被动模式 PASV 。

  • I、PORT 模式的工作原理:客户端连接到服务器的 21 端口,登录成功后要读取数据时,客户端随机开放一个端口,并发送命令告知服务器,服务器收到 PORT 命令和端口号后,通过 20 端口和客户端开放的端口连接,发送数据。

  • II、PASV 模式的不同点是:客户端要读取数据时,发送 PASV 命令到服务器,服务器在本地随机开放一个端口,并告知客户端,客户端再连接到服务器开放的端口进行数据传输。

可见,是用 PORT 模式还是 PASV 模式,选择权在客户端。简单概括为:主动模式传送数据是:“服务器”连接到“客户端”的端口;被动模式传送数据是:“客户端”连接到“服务器”的端口。

注意:如无特别说明可默认为采用主动模式。

因为 FTP 使用了一个分离的控制连接,所以也称 FTP 的控制信息是带外(Out-of-band)传送的。FTP 并非对所有的数据传输都是最佳的,使用 FTP 时,要修改服务器上的文件,就需要先将此文件传送到本地主机,然后将修改后的文件副本传送到原服务器,来回传送耗费很多时间。

例如,计算机 A 上运行的应用程序要在远地计算机 B 的一个很大的文件末尾添加一行信息。若使用 FTP ,则应先将此文件从计算机 B 传送到计算机 A ,添加上这一行信息后,再用 FTP 将此文件传送到计算机 B ,来回传送这样大的文件很花时间。实际上这种传送是不必要的,因为计算机 A 并没有使用该文件的内容。

然而网络文件系统 NFS 则采用另一种思路。NFS 允许应用进程打开一个远地文件,井能在该文件的某一个特定的位置上开始读写数据。这样, NFS 可使用户只复制一个大文件中的一个很小的片段,而不需要复制整个大文件。对于上述例子,计算机 A 中的 NFS 客户软件,把要添加的数据和在文件后面写数据的请求一起发送到远地的计算机 B 中的 NFS 服务器,NFS 服务器更新文件后返回应答信息。在网络上传送的只是少量的修改数据。

3. 简单文件传送协议 TFTP(拓展)

TCP/IP 协议族中还有一个简单文件传送协议 TFTP(Trivial File Transfer Protocol),它是一个很小且易于·实现的文件传送协议。虽然 TFTP 也使用客户服务器方式,但它使用 UDP 数据报,因此 TFTP 需要有自己的差错改正措施。TFTP 只支持文件传输而不支持交互。TFTP 没有一个庞大的命令集,没有列目录的功能,也不能对用户进行身份鉴别。

TFTP 的主要优点有两个。

  • 第一, TFTP 可用于 UDP 环境。例如,当需要将程序或文件同时向许多机器下载时就往往需要使用 TFTP 。

  • 第二, TFTP 代码所占的内存较小。这对较小的计算机或某些特殊用途的设备是很重要的。这些设备不需要硬盘,只需要固化了 TFTP 、UDP 和 IP 的小容量只读存储器即可。当接通电源后,设备执行只读存储器中的代码,在网络上广播一个 TFTP 请求。网络上的 TFTP 服务器就发送响应,其中包括可执行二进制程序。设备收到此文件后将其放入内存,然后开始运行程序。这种方式增加了灵活性,也减少了开销。

TFTP 的主要特点是:

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

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

在一开始工作时。TFTP 客户进程发送一个读请求报文或写请求报文给 TFTP 服务器进程,其熟知端口号码为 69 。TFTP 服务器进程要选择一个新的端口和 TFTP 客户进程进行通信。若文件长度恰好为 512 字节的整数倍,则在文件传送完毕后,还必须在最后发送一个只含首部而无数据的数据报文。若文件长度不是 512 字节的整数倍,则最后传送数据报文中的数据字段一定不满 512 字节,这正好可作为文件结束的标志。

4. 例题

① 文件传输协议(FTP)的一个主要特征是( C )。
A. 允许客户指明文件的类型但不允许指明文件的格式
B. 不允许客户指明文件的类型但允许指明文件的格式
C. 允许客户指明文件的类型与格式
D. 不允许客户指明文件的类型与格式
【FTP 提供交互式访问,允许客户指明文件的类型与格式,并允许文件具有存取权限。】

② 控制信息是带外传送的协议是( C )。
A. HTTP
B. SMTP
C. FTP
D. POP

带外传送是指控制信息与数据信息通过不同的逻辑信道传送。例如,FTP 使用一个单独的控制连接来传输控制信息,而数据连接用于传送文件。
带内传送是指控制信息与数据信息通过同一个逻辑信道传送。例如,HTTP 的请求和响应报文都是在同一个 TCP 连接上进行的。

③ 下列关于 FTP 连接的叙述中,正确的是( C )。
A. 控制连接先于数据连接被建立,并先于数据连接被释放
B. 数据连接先于控制连接被建立,并先于控制连接被释放
C. 控制连接先于数据连接被建立,并晚于数据连接被释放
D. 数据连接先于控制连接被建立,并晚于控制连接被释放

④ FTP 客户发起对 FTP 服务器连接的第一阶段是建立( D )。
A. 传输连接
B. 数据连接
C. 会话连接
D. 控制连接

⑤ 当一台计算机从 FTP 服务器下载文件时,在该 FTP 服务器上对数据进行封装的 5 个转换步骤是( B )。
A. 比特,数据帧,数据报,数据段,数据
B. 数据,数据段,数据报,数据帧,比特
C. 数据报,数据段,数据,比特,数据帧
D. 数据段,数据报,数据帧,比特,数据
【FTP 服务器的数据要经过应用层、传输层、网络层、数据链路层及物理层。因此,对应的封装是数据、数据段、数据报、数据帧,最后是比特。】

⑥ 匿名 FTP 访问通常使用( C )作为用户名。
A. guest
B. E-mail 地址
C. anonymous
D. 主机 id

针对文件传输 FTP ,系统管理员建立了一个特殊的用户 ID ,名为 anonymous ,即匿名用户。Intemet 上的任何人在任何地方都可以使用该用户 ID ,只是在要求提供用户 ID 时必须输入 anonymous ,该用户 ID 的密码可以是任何字符串。

⑦ FTP 支持两种方式的传输:ASCII 方式和 Binary(二进制)方式。通常文本文件的传输采用()方式,而图像、声音等非文本文件采用()方式传输。A
A. ASCIl , Binary
B. Binary , ASCII
C. ASCII , ASCII
D. Binary , Binary
【FTP 支持 ASCII 和 Binary 两种方式的传输,通常非加密文本文件采用 ASCII 方式传输,而图像、声音等非文本文件采用 Binary 方式传输。了解即可。】

⑧ 【2009 统考真题】FTP 客户和服务器间传递 FTP 命令时,使用的连接是( A )。
A. 建立在 TCP 之上的控制连接
B. 建立在 TCP 之上的数据连接
C. 建立在 UDP 之上的控制连接
D. 建立在 UDP 之上的数据连接

⑨ 【2017统考真题】下列关于 FTP 的叙述中,错误的是( C )。
A. 数据连接在每次数据传输完毕后就关闭
B. 控制连接在整个会话期间保持打开状态
C. 服务器与客户端的 TCP 20 端口建立数据连接
D. 客户端与服务器的 TCP 21 端口建立控制连接

【问题1】:文件传输协议的主要工作过程是怎样的?主进程和从属进程各起什么作用?
【答】:FTP 的主要工作过程如下:在进行文件传输时,FTP 客户所发出的传送请求通过控制连接发送给服务器端的控制进程,并在整个会话期间一直保持打开,但控制连接不用来传送文件。服务器端的控制进程在接收到 FTP 客户发送来的文件传输请求后,就创建数据传送进程和数据连接,数据连接用来连接客户端和服务器端的数据传输进程,数据传送进程实际完成对文件的传送,在传送完毕后关闭“数据传送连接”,并结束运行。FTP 的服务器进程由两大部分组成:一个主进程,负责接收新的请求;若干从属进程,负责处理单个请求。

【问题2】:为什么 FT P要使用两个独立的连接,即控制连接和数据连接?
【答】:在 FTP 的实现中,客户与服务器之间采用了两条传输连接,其中控制连接用于传输各种 FTP 命令,而数据连接用于文件的传送。之所以这样设计,是因为使用两条独立的连接可使 FTP 变得更加简单、更容易实现、更有效率。同时在文件传输过程中,还可以利用控制连接控制传输过程,如客户可以请求终止、暂停传输等。

【问题3】:主机 A 想下载文件 fp:/fp.abc.edu.cn/fle ,大致描述下载过程中主机和服务器的交互过程。
【答】:大致过程为:

  • 建立一个 TCP 连接到服务器 fp.abc.edu.cn 的 21 号端口,然后发送登录账号和密码。
  • 服务器返回登录成功信息后,主机 A 打开一个随机端口,并将该端口号发送给服务器。
  • 主机 A 发送读取文件命令,内容为 get fle ,服务器使用 20 号端口建立一个 TCP 连接到主机 A 的随机打开的端口。
  • 服务器把文件内容通过第二个连接发送给主机 A ,传输完毕后连接关闭。

二、远程终端协议 TELNET(拓展)

TELNET 是一个简单的远程终端协议,它也是互联网的正式标准。用户用 TELNET 就可在其所在地通过 TCP 连接注册(即登录)到远地的另一台主机上(使用主机名或 IP 地址)。TELNET 能将用户的击键传到远地主机,同时也能将远地主机的输出通过 TCP 连接返回到用户屏幕。这种服务是透明的,因为用户感觉到好像键盘和显示器是直接连在远地主机上。因此, TELNET 又称为终端仿真协议。

TELNET 并不复杂,以前应用得很多。现在由于计算机的功能越来越强,用户已较少使用 TELNET 了。

TELNET 也使用客户 - 服务器方式。在本地系统运行 TELNET 客户进程,而在远地主机则运行 TELNET 服务器进程。和 FTP 的情况相似,服务器中的主进程等待新的请求,并产生从属进程来处理每一个连接。

TELNET 能够适应许多计算机和操作系统的差异。例如,对于文本中一行的结束,有的系统使用 ASCII 码的回车(CR),有的系统使用换行(LF),还有的系统使用两个字符,回车-换行(CR-LF)。又如,在中断一个程序时,许多系统使用 Control-C(AC),但也有系统使用 ESC 按键。为了适应这种差异, TELNET 定义了数据和命令应怎样通过互联网。这些定义就是所谓的网络虚拟终端 NVT(Network Virtual Terminal)。下图说明了 NVT 的意义。客户软件把用户的击键和命令转换成 NVT 格式,并送交服务器。服务器软件把收到的数据和命令从 NVT 格式转换成远地系统所需的格式。向用户返回数据时,服务器把远地系统的格式转换为 NVT 格式,本地客户再从 NVT 格式转换到本地系统所需的格式。

NVT 的格式定义很简单。所有的通信都使用 8 位一个字节。在运转时, NVT 使用 7 位 ASCII 码传送数据,而当高位置 1 时用作控制命令。ASCII 码共有 95 个可打印字符(如字母、数字、标点符号)和 33 个控制字符。所有可打印字符在 NVT 中的意义和在 ASCII 码中一样。但 NVT 只使用了 ASCII 码的控制字符中的几个。此外, NVT 还定义了两字符的 CR-LF 为标准的行结束控制符。当用户键入回车按键时, TELNET 的客户就把它转换为 CR-LF 再进行传输,而 TELNET 服务器要把 CR-LF 转换为远地机器的行结束字符。

TELNET 的选项协商(Option Negotiation)使 TELNET 客户和 TELNET 服务器可商定使用更多的终端功能,协商的双方是平等的。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 16.3 k8s容器cpu内存告警指标与资源request和limit
  • 江科大51单片机
  • 整合SpringSecurity框架经典报错
  • docker容器安装nginx
  • 【数据可视化】Arcgis api4.x 热力图、时间动态热力图、timeSlider时间滑块控件应用 (超详细、附免费教学数据、收藏!)
  • 码点和码元的区别--Unicode标准的【码点】和【码元】
  • 第十一章 【后端】商品分类管理微服务(11.4)——spring-boot-devtools
  • 详细分析uni-app中的页面路由基本知识(附Demo)
  • LeetCode 面试经典150题 67.二进制求和
  • keil的debug功能
  • shell脚本定时任务通知到钉钉
  • 学习threejs,绘制二维线
  • vue2项目实现国际化(若依框架示例)
  • Java 全栈开发中的最佳实践:从前端到后端的完整流程
  • Swing模拟银行柜台系统
  • 【css3】浏览器内核及其兼容性
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • Elasticsearch 参考指南(升级前重新索引)
  • ES6--对象的扩展
  • Golang-长连接-状态推送
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • rc-form之最单纯情况
  • TCP拥塞控制
  • Webpack 4 学习01(基础配置)
  • 初识MongoDB分片
  • 服务器从安装到部署全过程(二)
  • 解析带emoji和链接的聊天系统消息
  • 微信小程序:实现悬浮返回和分享按钮
  • 用Visual Studio开发以太坊智能合约
  • 与 ConTeXt MkIV 官方文档的接驳
  • python最赚钱的4个方向,你最心动的是哪个?
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #laravel 通过手动安装依赖PHPExcel#
  • #微信小程序:微信小程序常见的配置传值
  • ${ }的特别功能
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (4)STL算法之比较
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (区间dp) (经典例题) 石子合并
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .gitignore文件—git忽略文件
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .net core使用ef 6
  • .NET 使用 XPath 来读写 XML 文件
  • .NET命名规范和开发约定
  • .NET学习教程二——.net基础定义+VS常用设置
  • .NET周刊【7月第4期 2024-07-28】
  • /bin/rm: 参数列表过长"的解决办法
  • [ linux ] linux 命令英文全称及解释
  • []常用AT命令解释()
  • [2010-8-30]