深入理解FTP协议

  文件传输协议FTP(File Transfer Protocol)是因特网中使用最广泛的文件传输协议。FTP使用交互式的访问,允许客户指定文件的类型和格式(如指明是否使用ASCII码),并允许文件具有存取权限(如访问文件的用户必须经过授权,并输入有效的口令)。

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

1 FTP基本工作原理

  FTP屏蔽了各计算机系统的细节,因而适合在异构网络中任意计算机之间传送文件。FTP只提供文件传送的一些基本服务,它使用TCP可靠地运输服务,FTP主要功能是减小或消除在不同系统下处理文件的不兼容性。

  FTP使用客户端-服务器模型,一个FTP服务器进程可以为多个客户进程提供服务。FTP服务器有两大部分组成:一个主进程,负责接受新的请求;还有若干从属进程,负责处理单个请求。主进程工作步骤

  • 打开熟知端口(21),使客户进程能够连接上
  • 等待客户进程发送连接请求
  • 启动从属进程处理客户进程发送的连接请求,从属进程处理完请求后结束,从属进程在运行期间可能根据需要可创建其他一些子进程
  • 回到等待状态,继续接受其他客户进程发起的请求,主进程与从属进程的处理是并发进行的

FTP工作时情况

 

  FTP控制连接在整个会话期间都保持打开,只用来发送连接/传送请求客户进程向服务器发送(21连接请求)连接请求时, 寻找连接服务器进程的熟知端口21,同时还要告诉服务器进程自己的另一个端口号码(20数据传送),用于建立数据传送连接。

(好好理解这里!!重点!!!)

接着,服务器进程用自己传送数据的熟知端口20客户进程所提供的端口号码建立数据传送连接,FTP使用了2个不同的端口号,所以数据连接和控制连接不会混乱。

1.1 FTP数据表示

  FTP协议规定了控制协议传送与存储的多种选择,在以下4个方面必须做出一个选择。

  • 文件类型:ASCII码文件(默认的)/ 图像文件类型(二进制的)/ 本地文件类型(用于在具有不同字节大小主机间传送二进制数据)
  • 格式控制:该选项针对ASCII类型文件适用,非打印(默认选择,文件中不包含垂直格式信息)/ 远程登录格式控制
  • 结构:文件结构(默认选择,文件被认为是一个连续的字节流,不存在内部的文件结构)/ 记录结构(用于文本文件)
  • 传输方式:流方式(模式选择,文件以字节流方式传输,对于文件结构,发方在文件尾提示关闭数据连接,对于记录结构,有专用的两字节序列码记录结束和文件结束)/ 块方式(文件以一系列块来传送,每块前面有一个或多个首部字节)/ 压缩方式

1.2 FTP命令和应答

  命令和应答在客户和服务器的控制连接上以 NVT ASCII码形式传送。这就要求在每行结尾都要返回C R、 L F对(也就是每个命令或每个应答)。这些命令都是3或4个字节的大写ASCII字符,其中一些带选项参数。从客户向服务器发送的FTP命令超过30种。下图是比较常用的几种命令:

  应答都是A S C I I码形式的3位数字,并跟有报文选项。其原因是软件系统需要根据数字代码来决定如何应答,而选项串是面向人工处理的。由于客户通常都要输出数字应答和报文串,一个可交互的用户可以通过阅读报文串(而不必记忆所有数字回答代码的含义)来确定应答的含义。

2 FTP工作模式

  FTP有两种工作模式,分别是主动模式(PORT)和被动模式(PASV)两种模式,这两种模式是按照FTP服务器的“角度”来说的,更通俗一点说就是:在传输数据时,如果是服务器主动连接客户端,那就是主动模式;如果是客户端主动连接服务器,那就是被动模式。关于主动模式和被动模式更具体的讲解请点击:图解FTP的主动模式与被动模式以及客户端设置

3 关于FTP经典的问题

3.1 如何知道FTP传送一个文件结束?

  这个问题比较经典,也是一次面试被问到的问题。前面说过,通用传输方式是流方式,并且文件的结尾是以关闭数据连接为标志,这意味着对每一个文件传输或目录列表来说都要建立一个全新的数据连接。其一般过程如下:

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

  图27- 4给出了第 3步执行时的连接状态。假设客户用于控制连接的临时端口是 11 7 3,客户用于数据连接的临时端口是 11 7 4。客户发出的命令是PORT命令,其参数是6个ASCII中的十进制数字,它们之间由逗点隔开。前面 4个数字指明客户上的 I P地址,服务器将向它发出主动打开(20)(本例中是 140.252.13.34),而后两位指明16 bit端口地址。由于16 bit端口地址是从这两个数字中得来,所以其值在本例中就是 4×256+150=1174
  图27-5给出了服务器向客户所在数据连接端发布主动打开时的连接状态。服务器的端点是端口2 0

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

 

参考资料:

  1、《计算机网络》FTP协议章节

  2、《TCP/IP协议详解》FTP协议章节

图解FTP的主动模式与被动模式以及客户端设置

主动模式(PORT)

如下图所示,用户主机直接暴露在互联网中,用户连接FTP SERVER使用主动模式遵循以下一个过程:

ftp主动连接

  • 用户主机一个随机端口连接FTP SERVER的TCP21端口进行协商;
  • 用户主机告诉FTP SERVER,我的XXXX端口已经打开,你可以放心大胆的连过来;
  • 然后FTP SERVER就用TCP20端口连接用户主机的XXXX端口,数据传输开始。

被动模式(PASV)

当用户主机前端多了一道防火墙(客户机使用地址转换接入互联网),事情就变的复杂了,首先,主动模式是FTP SERVER连接客户机,防火墙肯定不干;即便乐意干客户机与服务器协商的XXXX端口也是随机端口,你让迷茫的防火墙情何以堪,这时就需要客户端软件使用被动模式主动连接防火墙,这么一来正合防火墙的胃口。

客户端使用被动模式遵循以下过程:

ftp被动连接

  • 首先用户使用随机端口连接FTP SERVER的TCP 21端口进行协商;
  • FTP SERVER告诉客户机:我的XXXX端口开放了,你连过来吧;
  • 客户机使用一个随机端口连接FTP SERVER的XXXX端口传输数据。

可以看出,当不存在防火墙的情况下,主动模式和被动模式均适用,但就服务器安全方面考虑,使用主动模式为佳,因为多一个被动连接服务器就要打多开一个端口,开放的端口越多,就意味着服务器面临的危险越大。

FTP客户端设置

这里向大家推荐FlashFXP,非常专业的客户端,尤其是支持UTF8编码(CuteFTP不支持),在WEB开发中非常具有优势,建立一个连接非常简单,可以利用会话-快速连接(缺点就是不能保存这个连接,下次再用需再次设置);也可以使用站点-站点管理器来建立连接,这里推荐后者,打开站点管理器,点击下方的新建站点,为站点起一个易于区分的名称,这里以www.today-wx.com为例,填上后边的地址、用户名、密码,其他保持默认,点击下边的应用,这个连接就保存下来了,点击连接登陆FTP SERVER。

flashfxp客户端设置

在选项中,可以设置一些非常重要的参数:

flashfxp选项

  • 数据连接模式:这里保持默认的使用全局设置,客户端会优先使用被动模式连接(可以在全局设置中修改),如果被动传输失败,会自动尝试使用主动模式。
  • 续传支持:就是所谓的断点续传,这个需要服务器端支持。
  • 字符编码:可以选择以二进制或者ASCII的方式,一般来说图片,压缩文件与应用程序文件使用二进制;文本文件,如html、php、js等文件使用ASCII方式。这个地方保持默认就行,FTP客户端会自动判断。

使用FlashFXP可以关联文件,比如将HTML文件与DW(dreamweaver)关联,将CSS文件与记事本关联等等:

选项-文件关联设置关联,点击红框的部分添加一个关联。

关联文件

添加文件的时候可以使用通配符的形式,这里使用*.html表示所有的html文件,右边的打开以选择本地程序,这里选择安装于C盘的dreamweaver,然后勾选下边的用来查看和编辑,保存时执行上传的动作,点击保存。

关联html文件

连接FTP之后,右键点击html文件进行查看或编辑的时候,系统会自动启动DW进行查看和编辑,在DW中保存文件的时候,会自动上传到FTP服务器上,很惬意吧。

关联文件完成

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值