FTP 协议

目录

  • FTP文件传输协议简介
    • FTP的必要性
    • 什么是FTP?
    • FTP的限制
    • 与Http协议区别
  • FTP协议的组成及怎么连接到FTP服务器
  • FTP协议涉及到的相关术语,服务器怎么实现的,怎么传输的?
  • 用户分类
  • 传输方式
  • 支持模式
  • 数据结构和传输方式
  • 命令和应答
  • 匿名FTP
  • 几个注意的点
  • FTP协议抓包分析
    • FTP协议分析1:
    • FTP协议分析2:

FTP文件传输协议简介

FTP的必要性

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

什么是FTP?

FTP代表文件传输协议,用于在FTP服务器和另一台计算机之间传输文件。在过去,FTP比现在更常见,并且是互联网上主要的文件传输机制。如果您需要在两台计算机之间传输文件,则可以使用FTP执行此操作。

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

文件传输协议(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 协议_第1张图片
建立双重连接的原因是: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 连接用于数据传输。

FTP 协议_第2张图片

图片中,控制连接由用户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 协议_第3张图片
FTP 协议_第4张图片
FTP响应都是ASCII码形式的3位数字,响应也是以NVT ASCII码形式传送,要求在每行结尾都要返回CR、LF对。

FTP 协议_第5张图片
原图作者: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:

FTP 协议_第6张图片

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是不区分大小写的)

FTP 协议_第7张图片

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号包)

FTP 协议_第8张图片
21-161是传输IcY.asp文件的过程
可见,服务器每发两个包,客户端ack一次
162-165:数据连接关闭,文件传输完成(注意只是关闭了数据连接)
166-168:服务器通过控制连接告诉客户端,我传完了
169-170:此时我输入了quit命令,退出ftp客户端
171-174:四次挥手,断开控制 连接,至此,ftp连接完全关闭(控制连接+数据连接)

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

注:其实小编的部分原创文章,并不是真正意义上的原创,小编是跟据自己的理解,然后把自己理解的,想告诉各位的一些 关键点,选择性的摘抄,有效整合到一起的,有好多雷同地方,如后期原创大大看到,希望理解。大家的初衷都是资源共享,共赢,所以就当我是您的搬运工,求放过。所以不忘初心,您这神手可得好好招摇。至于原创作者,我就不一一例举了。

你可能感兴趣的:(网络协议)