• FTP协议及数据包浅析


    第27章FTP:文件传送协议
    27.1   引言
    FTP是另一个常见的应用程序。它是用于文件传输的I n t e r n e t标准。我们必须分清文件传
    送(file transfer)和文件存取(file access)之间的区别,前者是F T P提供的,后者是如N F S
    (S u n的网络文件系统,第2 9章)等应用系统提供的。由F T P提供的文件传送是将一个完整的
    文件从一个系统复制到另一个系统中。要使用F T P,就需要有登录服务器的注册帐号,或者通
    过允许匿名F T P的服务器来使用(本章我们将给出这样的一个例子)。
    与Te l n e t类似,F T P最早的设计是用于两台不同的主机,这两个主机可能运行在不同的操作系
    统下、使用不同的文件结构、并可能使用不同字符集。但不同的是,Te l n e t获得异构性是强制两端
    都采用同一个标准:使用7比特A S C I I码的N V T。而F T P是采用另一种方法来处理不同系统间的差
    异。F T P支持有限数量的文件类型(A S C I I,二进制,等等)和文件结构(面向字节流或记录)。
    参考文献959 [Postel 和Reynolds 1985] 是F T P的正式规范。该文献叙述了近年来文件传输
    的历史演变。
    27.2   FTP协议
    F T P与我们已描述的另一种应用不同,它采用两个T C P连接来传输一个文件。
    1) 控制连接以通常的客户服务器方式建立。服务器以被动方式打开众所周知的用于
    F T P的端口(2 1),等待客户的连接。客户则以主动方式打开T C P端口2 1,来建立连
    接。控制连接始终等待客户与服务器之间的通信。该连接将命令从客户传给服务器,
    并传回服务器的应答。
    由于命令通常是由用户键入的,所以I P对控制连接的服务类型就是“最大限度地减小迟延”。
    2) 每当一个文件在客户与服务器之间传输时,就创建一个数据连接。(其他时间也可以创
    建,后面我们将说到)。
    由于该连接用于传输目的,所以I P对数据连接的服务特点就是“最大限度提高吞吐量”。
    图2 7 - 1描述了客户与服务器以及它们之间的连接情况
    从图中可以看出,交互式用户通常不处理在控制连接中转换的命令和应答。这些细节均
    由两个协议解释器来完成。标有“用户接口”的方框功能是按用户所需提供各种交互界面
    (全屏幕菜单选择,逐行输入命令,等等),并把它们转换成在控制连接上发送的F T P命令。
    类似地,从控制连接上传回的服务器应答也被转换成用户所需的交互格式。
    从图中还可以看出,正是这两个协议解释器根据需要激活文件传送功能。
    27.2.1   数据表示
    FTP协议规范提供了控制文件传送与存储的多种选择。在以下四个方面中每一个方面都必
    须作出一个选择。

    1. 文件类型
    (a) ASCII码文件类型(默认选择)文本文件以NVT ASCII码形式在数据连接中传输。这要求
    发方将本地文本文件转换成NVT ASCII码形式,而收方则将NVT ASCII码再还原成本地文本文件。
    其中,用NVT ASCII码传输的每行都带有一个回车,而后是一个换行。这意味着收方必须扫描每
    个字节,查找C R、L F对(我们在第1 5 . 2节见过的关于T F I P的A S C I I码文件传输情况与此相同)。
    (b) EBCDIC文件类型该文本文件传输方式要求两端都是E B C D I C系统。
    (c) 图像文件类型(也称为二进制文件类型) 数据发送呈现为一个连续的比特流。通常
    用于传输二进制文件。
    (d) 本地文件类型 该方式在具有不同字节大小的主机间传输二进制文件。每一字节的比特
    数由发方规定。对使用8 bit字节的系统来说,本地文件以8 bit字节传输就等同于图像文件传输。
    2. 格式控制
    该选项只对A S C I I和E B C D I C文件类型有效。
    (a) 非打印(默认选择)文件中不含有垂直格式信息。
    (b) 远程登录格式控制文件含有向打印机解释的远程登录垂直格式控制。
    (c) Fortran 回车控制每行首字符是F o r t r a n格式控制符。
    3. 结构
    (a)文件结构(默认选择)文件被认为是一个连续的字节流。不存在内部的文件结构。
    (b)记录结构该结构只用于文本文件(A S C I I或E B C D I C)。
    (c)页结构 每页都带有页号发送,以便收方能随机地存储各页。该结构由TO P S - 2 0操
    作系统提供(主机需求R F C不提倡采用该结构)。
    4. 传输方式
    它规定文件在数据连接中如何传输。
    (a)流方式 (默认选择)文件以字节流的形式传输。对于文件结构,发方在文件尾提
    示关闭数据连接。对于记录结构,有专用的两字节序列码标志记录结束和文件结束。
    (b)块方式文件以一系列块来传输,每块前面都带有一个或多个首部字节。
    (c)压缩方式 一个简单的全长编码压缩方法,压缩连续出现的相同字节。在文本文件
    客户
    用户接口
    用户协议
    解释器
    用户数据传
    输功能
    文件系统
    数据连接
    控制连接
    服务器
    服务器协
    议接口
    服务器数据传
    输功能
    文件系统
    ( F T P命令)
    ( F T P应答)
    在终端上
    的用户
    下载
    318使用TCP/IP详解,卷1:协议
    中常用来压缩空白串,在二进制文件中常用来压缩0字节(这种方式很少使用,也不受支持。
    现在有一些更好的文件压缩方法来支持F T P)。
    如果算一下所有这些选择的排列组合数,那么对传输和存储一个文件来说就有7 2种不同
    的方式。幸运的是,其中很多选择不是废弃了,就是不为多数实现环境所支持,所以我们可
    以忽略掉它们。
    通常由U n i x实现的FTP 客户和服务器把我们的选择限制如下:
    • 类型:A S C I I或图像。
    • 格式控制:只允许非打印。
    • 结构:只允许文件结构。
    • 传输方式:只允许流方式。
    这就限制我们只能取一、两种方式:A S C I I或图像(二进制)。
    该实现满足主机需求R F C的最小需求(该R F C也要求能支持记录结构,但只有操作系统
    支持它才行,而U n i x不行)。
    很多非U n i x的实现提供了处理它们自己文件格式的F T P功能。主机需求R F C指出“F T P协
    议有很多特征,虽然其中一些通常不实现,但对F T P中的每一个特征来说,都存在着至少一种
    实现”。

    27.2.4   连接管理
    数据连接有以下三大用途:
    1) 从客户向服务器发送一个文件。
    2) 从服务器向客户发送一个文件。
    3) 从服务器向客户发送文件或目录列表。
    F T P服务器把文件列表从数据连接上发回,而不是控制连接上的多行应答。这就避免了行
    的有限性对目录大小的限制,而且更易于客户将目录列表以文件形式保存,而不是把列表显
    示在终端上。
    我们已说过,控制连接一直保持到客户-服务器连接的全过程,但数据连接可以根据需要
    随时来,随时走。那么需要怎样为数据连接选端口号,以及谁来负责主动打开和被动打开?
    首先,我们前面说过通用传输方式(U n i x环境下唯一的传输方式)是流方式,并且文件
    结尾是以关闭数据连接为标志。这意味着对每一个文件传输或目录列表来说都要建立一个全
    新的数据连接。其一般过程如下:
    1) 正由于是客户发出命令要求建立数据连接,所以数据连接是在客户的控制下建立的。
    2) 客户通常在客户端主机上为所在数据连接端选择一个临时端口号。客户从该端口发布
    一个被动的打开。
    3) 客户使用P O RT命令从控制连接上把端口号发向服务器。
    4) 服务器在控制连接上接收端口号,并向客户端主机上的端口发布一个主动的打开。服
    务器的数据连接端一直使用端口2 0。
    图2 7 - 4给出了第3步执行时的连接状态。假设客户用于控制连接的临时端口是11 7 3,客户
    用于数据连接的临时端口是11 7 4。客户发出的命令是P O RT命令,其参数是6个A S C I I中的十进
    制数字,它们之间由逗点隔开。前面4个数字指明客户上的I P地址,服务器将向它发出主动打
    开(本例中是1 4 0 . 2 5 2 . 1 3 . 3 4),而后两位指明16 bit端口地址。由于16 bit端口地址是从这两个
    数字中得来,所以其值在本例中就是4×256+150 = 11 7 4。
    图2 7 - 5给出了服务器向客户所在数据连接端发布主动打开时的连接状态。服务器的端点
    是端口2 0。

    服务器总是执行数据连接的主动打开。通常服务器也执行数据连接的主动关闭,除非当
    客户向服务器发送流形式的文件时,需要客户来关闭连接(它给服务器一个文件结束的通
    知)。
    客户也有可能不发出P O RT命令,而由服务器向正被客户使用的同一个端口号发出主动打
    开,来结束控制连接。这是可行的,因为服务器面向这两个连接的端口号是不同的:一个是
    2 0,另一个是2 1。不过,下节我们将看到为什么现有实现通常不这样做。

  • 相关阅读:
    Windows Phone 31 日谈——第18日:WebBrowser控件
    Windows Phone 31 日谈——第19日:推送通知
    使用bat文件启动服务
    绝代反向指标——丘吉尔 炒股第二天就崩盘
    插入数据库返回自增长序号
    大并发服务器开发
    在这个不相信爱情的时代里,巴菲特的故事似乎让我又相信爱情了
    mysql操作语句
    马云三历高考才进大学 第一次高考数学考1分
    俞敏洪的屌丝逆袭 大学考了三次进北大
  • 原文地址:https://www.cnblogs.com/wangj08/p/3106501.html
Copyright © 2020-2023  润新知