FTP 协议

FTP文件传输协议简介

FTP的必要性

在互联网时代,若是您要将文件传输给朋友,您能够将其附加到电子邮件中并将其发送出去。若是您须要当即将文件传输给某人,该怎么办?没有延迟,它必须很快,且你传输的文件可能很是大。在这种状况下,电子邮件极可能不够用。这是由于大多数电子邮件提供商限制了服务器上的邮箱大小,您没法上传大型邮件,而且没法保证您在发送电子邮件时收件人接收邮件须要多长时间,或者甚至是到达那里,这就是FTP的用武之地。web

什么是FTP?

FTP表明文件传输协议,用于在FTP服务器和另外一台计算机之间传输文件。在过去,FTP比如今更常见,而且是互联网上主要的文件传输机制。若是您须要在两台计算机之间传输文件,则可使用FTP执行此操做。数据库

文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,它工做在 OSI 模型的第七层, TCP 模型的第四层, 即应用层。其主要做用是在服务器和客户端之间实现文件的传输和共享。windows

文件传输协议(FTP)使得主机间能够共享文件。FTP容许用户以文件操做的方式(如文件的增、删、改、查、传送等)与另外一主机相互通讯。 FTP 使用 TCP 生成一个虚拟链接用于控制命令交互,而后再生成一个单独的 TCP 链接用于数据传输。使用 TCP 传输而不是 UDP, 客户在和服务器创建链接前要通过一个“三次握手”的过程, 保证客户与服务器之间的链接是可靠的, 并且是面向链接, 为数据传输提供可靠保证。 (运行在UDP协议上的是TFTP协议)浏览器

然而, 用户并不真正登陆到本身想要存取的计算机上面而成为彻底用户, 可用FTP程序访问远程资源, 实现用户往返传输文件、目录管理以及访问电子邮件等等,提升文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。即便双方计算机可能配有不一样的操做系统和文件存储方式,可是它不须要进一步处理,就像MIME或Unicode同样。缓存

FTP的限制

对于FTP服务器来说,他必须在整个会话期间保持用户的状态(state),特别是,服务器必须把特定的用户帐户与控制联系起来,用户在远程目录树上不断跳转时,服务器必须追踪到用户在远程树上的当前位置,换句话说,当客户端用户数量不断增多,FTP服务器所要维持的会话总数,也会迅速增加。就会大大限制FTP服务器的性能。安全

与Http协议区别

Http和FTP都是文件传输协议,都是运行在tcp上面,可是他们也有一些重要的区别:服务器

1.FTP使用了两个并行的tcp来传输文件:一个是控制链接(port:21),一个是数据链接(port:20);网络

  • 控制链接用于在两个主机之间传输控制信息,如口令,用户标识,存放、获取文件等命令。
  • 数据链接用于实际发送一个文件,发送完文件以后数据链接后会关闭。

由于ftp协议使用一个独立的控制链接,因此,也称ftp的控制信息是带外(out-of-band)传送的。数据结构

2.Http协议是在传输文件的同一个tcp链接中发送请求和相应首部行的。所以,Http也能够说是带内(in-band)发送控制信息。并发

FTP协议的组成及怎么链接到FTP服务器

一.FTP是基于客户机/服务器模式的服务系统,它由客户软件、服务器软件和FTP通讯协议3个部分组成。以下所示:

  1. FTP客户机:Web浏览器或FTP客户端(如FileZilla)
  2. FTP通讯协议
  3. FTP服务器

二.FTP中的客户端-服务器模型:

FTP客户端与服务器之间要创建双重链接,一个是控制链接,一个是数据链接。
控制链接:NVT ASCII
数据链接:文件类型、数据结构、传输方式
在这里插入图片描述
创建双重链接的缘由是:FTP是一个交互式会话系统,某客户每次调用FTP,便与服务器创建一次会话,会话以控制链接来维持。

客户端每提出一个请求,服务器与客户端创建一个数据链接,进行实际的数据(好比文件)传输,一旦数据传输结束,数据链接相继撤销,但控制链接依然存在,客户端能够继续发出命令。

客户能够撤销控制链接(close命令),也能够退出FTP会话(quit命令)。

三.如何链接到FTP服务器?

链接到FTP服务器有两种方法。首先是让全部人均可以匿名登陆,也称为匿名FTP,或者您能够将用户名和密码分配给他们必须用来登陆服务器的人。

  • 链接到FTP服务器的两种最经常使用方法是使用Web浏览器或FTP客户端(如FileZilla)。要使用浏览器链接到FTP服务器,用FTP协议容许的FTP命令对文件操做, 可使用ftp://协议语句为要链接的主机名添加前缀。例如,ftp://www.simcf.cc。而后它会尝试匿名链接。若是您尝试链接的服务器须要用户名和密码,您须要输入用户名和密码。

小编之前工做的时候深入的体会到FTP的便利,公司有两种网络,一个是内网,一个是外网,公司那时候内外网不能同时使用,公司技术部也一直没有解决这个问题,这个问题就一直存在。我记得当时要经过公司内部内网OA系统下载东西到本地,OA系统当时没有关联C盘之外的任何硬盘,并且C盘是没有读写权限的,我当时还不懂怎么操做,因此当时采用了一种最笨的方法,经过内网OA系统发送到任意邮箱,而后切断内网,再登陆外网,经过外网登录邮箱下载东西到本地。有一段时间都是这么过来的,非常憋屈,很累。当时不知道FTP的存在及如何操做。后来咱们学计算机专业的部门经理是给我安利了FTP这样一种便利的传输方式,至此之后,必要时候,这个方法方便了许多,给我提供了不少便利。

  • 另外一种方法是使用专门设计用于链接FTP服务器的FTP客户端。(如FileZilla)这些类型的软件一般是最好的,由于它们已经简化了速度并支持许多高级功能,如自动恢复。您应该浏览FTP客户端列表并找到您喜欢的。

小编最近也发现了一个好东西,了解到了一个经过FTP和HTTP协议实现的无限传输神器「FV文件管理」。这个的特别之处就是能够经过FTP和HTTP协议实现电脑与手机无线传输文档、图片、文件、甚至是一部4K电影,并且传输大小不受限。干净无广告无推送。很好用,里面好多便利你们能够本身详细了解一下,如须要资源,评论里私信我,我会第一时间分享给你。

FTP协议涉及到的相关术语,服务器怎么实现的,怎么传输的?

1.服务器如何实现?

FTP服务器的实现是由一组FTP进程完成的。

服务器FTP进程:由协议解释器PI和数据传输过程DTP组成。
客户端FTP进程:由PI、DTP和用户接口组成。

2.涉及到的相关术语有哪些?

  • PI(protocol interpreter):协议解析器。用户和服务器用其来解析协议,它们的具体实现分别称为用户 PI (USER-PI)和服务器PI(SERVER-PI)。
  • 服务器PI(server-PI):服务器 PI 在 L 端口“监听”用户协议解析器的链接请求并创建控制链接。它从用户 PI接收标准的 FTP 命令,发送响应,并管理服务器 DTP。
  • 服务器DTP(server-DTP):数据传输过程,在一般的“主动”状态下是用“监听”的数据端口创建数据链接。它创建传输和存储参数,并在服务器端 PI 的命令下传输数据。服务器端 DTP 也能够用于“被动”模式,而不是主动在数据端口创建链接。
  • 用户PI(user-PI):用户协议解析器用 U 端口创建到服务器 FTP 过程的控制链接,并在文件传输时管理用户 DTP。
  • 用户DTP(user-DTP):数据传输过程在数据端口“监听”服务器 FTP 过程的链接。

控制链接:用户PI 与服务器PI 用来交换命令和响应的信息传输通道。
数据链接:经过控制链接协商的模式和类型进行数据传输。

3.FTP如何传输?

文件传输协议(FTP)使得主机间能够共享文件。 FTP 使用 TCP 生成一个虚拟链接用于控制命令交互,而后再生成一个单独的 TCP 链接用于数据传输。

在这里插入图片描述

图片中,控制链接由用户PI 发起。首先由用户PI 产生标准FTP 命令经过控制链接传输到服务器过程。标准响应由服务器端PI 经过控制链接发送到用户PI 做为命令的回应。

FTP 命令指定数据链接参数(端口,传输模式,表示类型,以及结构)和文件系统操做种类(store,retrieve,append,delete 等)。用户DTP 则应在指定的数据端口“监听”,服务器用相应的参数发起数据链接并传送数据。

用户分类

  • Real账户
    这类用户是指在FTP服务上拥有账号。当这类用户登陆FTP服务器的时候,其默认的主目录就是其账号命名的目录。可是,其还能够变动到其余目录中去。如系统的主目录等等。

  • Guest用户
    在FTP服务器中,咱们每每会给不一样的部门或者某个特定的用户设置一个账户。可是,这个帐户有个特色,就是其只可以访问本身的主目录。服务器经过这种方式来保障FTP服务上其余文件的安全性。这类账户,在Vsftpd软件中就叫作Guest用户。拥有这类用户的账户,只可以访问其主目录下的目录,而不得访问主目录之外的文件。

  • Anonymous用户
    这也是咱们一般所说的匿名访问。这类用户是指在FTP服务器中没有指定账户,可是其仍然能够进行匿名访问某些公开的资源。
    在组建FTP服务器的时候,咱们就须要根据用户的类型,对用户进行归类。默认状况下,Vsftpd服务器会把创建的全部账户都归属为Real用户。可是,这每每不符合企业安全的须要。由于这类用户不只能够访问本身的主目录,并且,还能够访问其余用户的目录。这就给其余用户所在的空间带来必定的安全隐患。因此,企业要根据实际状况,修改用户所在的类别。

传输方式

FTP的传输有两种方式:ASCII、二进制。

  • ASCII传输方式

假定用户正在拷贝的文件包含的简单ASCII码文本,若是在远程机器上运行的不是UNIX,当文件传输时ftp一般会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。
可是经常有这样的状况,用户正在传输的文件包含的不是文本文件,它们多是程序,数据库,字处理文件或者压缩文件。在拷贝任何非文本文件以前,用binary 命令告诉ftp逐字拷贝。

  • 二进制传输模式

在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即便目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。
如在ASCII方式下传输二进制文件,即便不须要也仍会转译。这会损坏数据。(ASCII方式通常假设每一字符的第一有效位无心义,由于ASCII字符组合不使用它。若是传输二进制文件,全部的位都是重要的。)

支持模式

FTP支持两种模式:Standard (PORT方式,主动方式),Passive (PASV,被动方式)。因为主动模式存在着安全问题,最近几年,大部分的TFP客户端开始默认使用被动模式。

  • Port模式

主动模式的核心是TFP客户端告诉服务端本身开发那个端口做为数据端口,而后让服务端来链接本身。

主动模式的链接创建通常是经过一些几个步骤:

  1. 客户端随机打开一个本地大于1024的端口P1
  2. 客户端经过端口P1向服务器控制端口(端口21)发起链接请求
  3. 服务器进行认证成功,请求创建
  4. 客户端对本地端口P2进行监听并向服务器发送“Port P1+1”告诉服务器,客户端的数据监听端口。
  5. 服务器收到端口后,从本身的数据端口(端口20)发起链接,链接到客户端指定的数据端口P1+1.
  • Passive模式

因为主动方式中,服务端须要主动连客户端,对于客户端的防火墙来讲,属于外部链接内部,会出现被阻塞的状况。被动方式解决了这个问题。被动链接的核心是控制链接请求和数据链接请求都是由客户端发起。被动方式的步骤以下:

  1. 客户端任意打开大约1024的两个本地端口(P1和P1+1)
  2. P1端口发送请求链接服务器的21端口(控制链接端口)同时提交PASV命令。
  3. 服务器收到请求后,会开启任意一个大约1024的端口P2,而后返回以下格式内容: 227 entering passive mode(h1,h2,h3,h4,p1,p2)
  4. 客户端收到服务端返回的内容后,计算出服务端开放的数据链接端口
  5. 客户端经过P1+1端口向服务端的发送链接请求。进行数据传输。

关于服务端返回的报文格式(h1,h2,h3,h4,p1,p2)具体含义以下:

  • h1,h2,h3,h4表明服务器的ip地址;
  • p1,p2表明服务器监听的数据链接端口地址。计算方法为P1*256+P2

数据结构和传输方式

数据结构:

1.文件结构(File Structure)字节流,无结构;

2.记录结构(Record Structure)文件被划分为记录,用于文本文件;

3.页结构(Page Structure)文件被划分为页,每页有页号和页头。能够进行随机存取或顺序存取。

传输方式:

FTP的传输模式有流模式、块模式和压缩模式;

1.流模式:数据以字节流的形式传送

-记录结构

-文件结构

2.块模式:文件以块的形式传送,块带有本身的头部分。头字节包括16位计数域和8位描述子代码

3.压缩模式:压缩模式中,由于数据是压缩过的,对于增长带宽有不少好处。

块模式头字节的结构:

8位描述子代码 16为字节计数

描述子代码在描述子字节中的位标记说明:

代码 意义
128 数据块结束是因为记录结束(EOR)(此数据块文件具备记录结构)
64 数据块结束是因为文件结束(EOF)
32 数据块内有怀疑错误
16 数据块是从新开始标记

命令和应答

简介
1.FTP服务器的登录
匿名用户:FTP 口令:FTP
用户:ANONYMOUS 口令:任何电子邮件
2.显示文件信息:DIR/LS
3.下载文件:GET 文件名(下载到当前目录)
4.上传文件:PUT 文件名
5.多文件下载:MGET
6.多文件上传:MPUT
7.退出:BYE
8.帮助:HELP

用途
在本地主机和远程主机之间传送文件。

语法
ftp [ -d] [ -g ] [ -i ] [ -n ] [ -v] [ -f ] [ -k realm] [-q[-C]][ HostName [ Port ] ]

语法描述:
-C:容许用户指定:经过 send_file 命令发出的文件必须在网络高速缓冲区(NBC)中通过缓存处理。此标志必须在指定了-q 标志的状况下使用。只有当文件在无保护的状况下以二进制方式发送时此标志才适用。
-d:将有关 ftp 命令操做的调试信息发送给 syslogd 守护进程。若是您指定-d 标志,您必须编辑/etc/syslog.conf 文件并添加下列中的一项:
OR
user.debug FileName
请注意: syslogd 守护进程调试级别包含信息级别消息。
若是不编辑/etc/syslog.conf 文件,则不会产生消息。变动了/etc/syslog.conf 文件以后,请运行 refresh -s syslogd 或 kill -1 SyslogdPID 命令,以通知 syslogd 守护进程其配置文件的变动。关于调试级别的更多信息,请参考/etc/syslog.conf 文件。也请参考 debug 子命令。
-g:禁用文件名中的元字符拓展。解释元字符可参考为扩展(有时叫作文件名匹配替换)文件名。请参考 glob 子命令。
-i:关闭多文件传送中的交互式提示。请参考 prompt、mget、mput 和 mdelete 子命令,以取得多文件传送中的提示的描述。
-n:防止在起始链接中的自动登陆。不然, ftp 命令会搜索$HOME/.netrc 登陆项,该登陆项描述了远程主机的登陆和初始化过程。请参考 user 子命令。
-q:容许用户指定: send_file 子例程必须用于在网络上发送文件。只有当文件在无保护的状况下以二进制方式发送时此标志才适用。
-v:显示远程服务器的所有响应,并提供数据传输的统计信息。当 ftp 命令的输出是到终端(如控制台或显示)时,此显示方式是缺省方式。
若是 stdin 不是终端,除非用户调用带有-v 标志的 ftp 命令,或发送 verbose 子命令,不然 ftp 详细方式将禁用。
-f:致使转发凭证。若是Kerberos 5 不是当前认证方法,则此标志将被忽略。
-k:realm 若是远程站的域不一样于本地系统的域,系统将容许用户指定远程站的域。所以,域和DCE 单元是同义的。若是Kerberos 5 不是当前认证方法,则此标志将被忽略。

FTP命令主要用于控制链接,能够直接采用Telnet协议实现,因此FTP命令同Telnet命令包括中断进程、Telnet的同步信号、查询服务器、带选项的Telnet命令等。
命令以NVT ASCII码形式传送,要求在每行结尾都要CR、LF对。

在这里插入图片描述
在这里插入图片描述
FTP响应都是ASCII码形式的3位数字,响应也是以NVT ASCII码形式传送,要求在每行结尾都要返回CR、LF对。


原图做者:Andrewniu

匿名FTP

默认状态下,FTP 站点容许匿名访问,FTP 服务器接受对该资源的全部请求,而且不提示用户输入用户名或密码。若是站点中存储有重要的或敏感的信息,只容许受权用户访问,应禁止匿名访问。

使用FTP时必须首先登陆,在远程主机上得到相应的权限之后,方可下载或上传文件。也就是说,要想同哪一台计算机传送文件,就必须具备哪一台计算机的适当受权。换言之,除非有用户ID和口令,不然便没法传送文件。这种状况违背了Internet的开放性,Internet上的FTP主机何止千万,不可能要求每一个用户在每一台主机上都拥有账号。匿名FTP就是为解决这个问题而产生的。

匿名FTP是这样一种机制,用户可经过它链接到远程主机上,并从其下载文件,而无需成为其注册用户。系统管理员创建了一个特殊的用户ID,名为anonymous, Internet上的任何人在任何地方均可使用该用户ID。

经过FTP程序链接匿名FTP主机的方式同链接普通FTP主机的方式差很少,只是在要求提供用户标识ID时必须输入anonymous,该用户ID的口令能够是任意的字符串。习惯上,用本身的E-mail地址做为口令,使系统维护程序可以记录下来谁在存取这些文件。

值得注意的是,匿名FTP不适用于全部Internet主机,它只适用于那些提供了这项服务的主机。

当远程主机提供匿名FTP服务时,会指定某些目录向公众开放,容许匿名存取。系统中的其他目录则处于隐匿状态。做为一种安全措施,大多数匿名FTP主机都容许用户从其下载文件,而不容许用户向其上传文件,也就是说,用户可将匿名FTP主机上的全部文件所有拷贝到本身的机器上,但不能将本身机器上的任何一个文件拷贝至匿名FTP主机上。即便有些匿名FTP主机确实容许用户上传文件,用户也只能将文件上传至某一指定上传目录中。随后,系统管理员会去检查这些文件,他会将这些文件移至另外一个公共下载目录中,供其余用户下载,利用这种方式,远程主机的用户获得了保护,避免了有人上传有问题的文件,如带病毒的文件。

几个注意的点

  • FTP提供交互式的访问

容许客户指明文件的类型和格式,并容许文件有存取权限

功能:
提供不一样种类主机系统之间的文件传输能力
以用户权限管理的方式提供用户对远程FTP服务器上的管理能力
以匿名FTP的方式提供公用文件共享的能力

主进程:负责接受新的请求
从属进程:负责处理单个请求

  • 工做步骤
  1. 打开熟知端口21,使客户进程能链接上
  2. 待客户进程发送链接请求
  3. 启动从属进程来处理客户进程发来的请求,主进程与从属进程并发执行,从属进程处理完毕后就关闭
  4. 回到等待状态,继续接收其余客户进程的请求

控制链接端口21,数据链接端口20

  • 控制链接

FTP客户发出传送请求,经过控制链接发送到服务器的控制进程。
控制链接并不用来传送文件,在传输文件时还可使用控制链接,所以控制链接在整个会话期间一直保持打开状态。

  • 数据链接

服务器端的控制进程收到文件传输请求后建立数据传输进程和数据链接。
数据链接:链接客户端和服务器端的数据传送进程
数据传输进程:完成文件的传输,传送完毕后关闭数据传送链接,并结束运行

  • 若须要修改服务器上的文件

先将此文件传送到本地主机,而后再将修改后的文件副本传送到原服务器

FTP协议抓包分析

FTP协议分析1:

在这里插入图片描述

1-3号包是tcp三次握手,创建链接,可见ftp是基于tcp的

4号包,服务器向客户端发送本身的相关信息,后面的状态码220表示服务准备就绪
在这里插入图片描述

5号包应该是编码相关内容,具体不知
6-13号包,登陆,8号包发送输入的用户名:ftp,11号包向服务端发送输入的密码:111111(明文传输->不安全),12号包提示,登陆成功(状态码230表示登陆成功)
14-16号包,期间去百度ftp相关知识,没有操做,能够看到大约两分钟后(13-14时间差),服务器提示超时,主动关闭了链接(状态码421表示服务关闭)
17-18号包,由于当时不知道ftp服务器会超时关闭链接,继续操做时提示链接已经关闭,看了数据包才知道(14-16),服务器已经关闭了链接,17-18是我刚才尝试继续操做的时候,被服务器拒绝(客户端没有自动提示链接超时关闭,当超时后再操做才提示链接已关闭,具体提示内容没有截图)

FTP协议分析2:

(本次操做是登陆后下载了IcY.asp文件,执行命令get IcY.ASP,顺便测试一下windows是不区分大小写的)

在这里插入图片描述

1-13号包是登陆过程,上面已经解释过了
下面主要解释ftp文件下载过程:get IcY.ASP(服务器上文件名是IcY.asp)
14号包:我想从Ip = 169.254.69.245(就是客户端本身的地址) 端口:59*256+77=15181链接你的数据端口(256是约定好的常数) 使用PORT 主动模式(对服务器来讲 :意思就是让服务器主动来链接客户端,从下面分析能够看到)
15号包,服务器赞成
16号包:我想下载IcY.ASP文件(服务器上该文件的命名是IcY.asp)
17号包:给你传了(这里过滤包时不要直接追踪1-17号包的TCP流,由于ftp的控制链接和数据链接是两个不一样的TCP链接,若是直接追踪,看不到数据链接,也就是看不到数据传输的过程)

18-20号包:TCP链接三次握手,能够看到ftp为数据传输又开辟了一个TCP链接(数据链接),服务器端口是20,常说的ftp21端口是ftp的控制链接(1-17号包)

在这里插入图片描述
21-161是传输IcY.asp文件的过程
可见,服务器每发两个包,客户端ack一次
162-165:数据链接关闭,文件传输完成(注意只是关闭了数据链接)
166-168:服务器经过控制链接告诉客户端,我传完了
169-170:此时我输入了quit命令,退出ftp客户端
171-174:四次挥手,断开控制 链接,至此,ftp链接彻底关闭(控制链接+数据链接)

文件下载后的名是IcY.ASP (是按照我请求的文件名,而不是服务器中的文件名IcY.asp)

注:其实小编的部分原创文章,并非真正意义上的原创,小编是跟据本身的理解,而后把本身理解的,想告诉各位的一些 关键点,选择性的摘抄,有效整合到一块儿的,有好多雷同地方,如后期原创大大看到,但愿理解。你们的初衷都是资源共享,双赢,因此就当我是您的搬运工,求放过。因此不忘初心,您这神手可得好好招摇。至于原创做者,我就不一一例举了。