目录
【摘要】FTP(File Transfer Protocal,文件传输协议)用于建立两台主机间的数据文件传输下载。使用客户/服务器(Client/Server)架构,基于TCP协议,服务端口为21。
【关键词】FTP;PORT;PASV;主动模式;被动模式;TFTP
【编辑/整理】网洞
1 FTP工作机制
1.1 FTP数据传输
1.1.1 FTP数据编码
FTP支持两种编码方式传输数据,ASCII方式和Binary方式。
-
ASCII方式:用以传输文本文件(TXT、LOG、CFG )。发送端的字符在发送前被转换成ASCII码格式之后进行传输,接收端收到之后再将其转换成字符。
-
Binary方式(二进制):用以传输图像、声音、压缩文件等非文本文件(cc、BIN、EXE、PNG)。发送端在发送这些文件时无需转换格式,即可传输。
FTP链接格式
ftp://用户名:密码@IP或域名:端口号/文件路径/文件名
如:ftp://h:h@piaohua668.com:12311/国产电影/西游记之女儿国HD高清过于中英双字.mp4
1.1.2 FTP数据结构
FTP支持的文件结构如下:
-
字节流(常用):也称为文件结构。文件被认为是一个连续的字节流。
-
记录结构:该结构只用于ASCII或EBCDIC类型的文本文件。文件由连续的记录构成。
-
页结构:发送单位为页,每页发送时都带有页号,以便接收方可以随机存储页。
1.1.3 FTP传输模式
FTP支持以下三种传输模式:
-
流模式(常用):文件以字节流的形式传输。对于文件结构,发送方在文件结尾提示关闭数据连接;对于记录结构,有专用的两字节序列码标识记录结束和文件结束。
-
块模式:文件以一系列块来传输,每块前面都带有一个或多个首部字节。每个首部字节包含一个计数字段和一个描述码。计数字段用来指明数据的总长度,以字节为单位。描述码可用来定义文件的最后一块(EOF)或者记录的最后一块(EOR),或作为重启标记(识别错误恢复和重启状)或标记可疑数据。
-
压缩模式:即压缩连续出现的相同字节。
1.2 FTP连接模式
FTP需要建立两次连接才能完成一次完整的文件传输服务。使用两个并行TCP连接,第一次连接我们称之为控制连接,第二次连接称为数据连接。 FTP也有其专属的知名端口,默认情况下,FTP使用20
和21
这两个端口,其中20
用于数据连接(传递数据),21
用于控制连接(传递控制信息)。
-
控制连接:建立会话,用于传输请求与应答信息(均由客户端发起,服务端使用21端口)
-
数据连接:建立传输,用于传输文件(可由服务器或客户端任意一方发起)
根据FTP服务器发起数据连接的方式,分为主动模式和被动模式。
-
主动模式: 服务器主动连接客户端的数据端口(21端口)。
-
被动模式: 服务器被动地等待客户端连接自己的数据端口(一个大于1024的端口)。
-
多数防火墙都不允许接受外部发起的连接,所以 FTP 的主动模式通过防火墙通常都会受到限制。如果有防火墙,最好是采用被动模式,但是如果对安全的需求很高,则建议采用主动模式。
1.2.1 主动模式(PORT)
主动模式:客户端发送PORT命令到服务器。客户端开启数据端口,由服务器连接到客户端。
-
建立控制连接:在主动模式下,
FTP
客户端随机开启一个大于1024
的端口N
(如图为1026)向服务器的21
号端口发起连接,发送FTP
用户名和密码 -
建立数据连接(主动模式):客户端开放
N+1
号端口(如图为1027)进行监听,并向服务器发出PORT N+1
命令,告诉服务端客户端采用主动模式并开放了端口。 -
FTP服务器接收到
PORT
命令后,返回确认。 -
服务器使用其本地的
FTP
数据端口(通常是20
)来连接客户端指定的端口N+1
,进行数据传输。 -
客户端给服务器的数据端口返回一个"ACK"响应。
1.2.2 被动模式(PASV)
被动模式:客户端发送PASV命令到服务器。服务端开启数据端口,由客户端连接到服务器。
-
建立控制连接:在被动模式下,FTP客户端随机开启一个大于
1024
的端口N
(如图为1026)向服务器的21
号端口发起连接,发送用户名和密码进行登陆 -
建立数据连接(被动模式):客户端开启
N+1
(如图为1027)端口。然后向服务器发送PASV
命令,通知服务器自己处于被动模式。 -
服务器收到命令后,会开放一个大于
1024
的端口P
(端口P的范围是可以设置的)进行监听,然后用PORT P
命令通知客户端,自己的数据端口是P
。 -
客户端收到命令后,会通过
N+1
号端口连接服务器的端口P
,然后在两个端口之间进行数据传输。 -
服务器给客户端的数据端口返回一个"ACK"响应。
1.3 FTP命令/响应
对于控制通信,FTP使用与TELNET相同的方法。它与TELNET一样使用NVT ASCII字符集。通信是通过命令和响应来完成的。这种简单方法适合控制连接。因为我们一次发送一条命令 (或响应)。每一条命令或响应都是一个短行, 因此不必担心它的文件格式或文件结构,每一行结束处是两个字符( 回车和换行)的行结束标记。
1.3.1 FTP命令
在控制连接期间,命令从客户端发送到服务器并且响应从服务器发送到客户端。从FTP客户控制进程发送的命令是ASCII大写字母形式的,可能带有也可能不带有参数。些常见命令如下表所示。
1.3.2 FTP响应
每个FTP命令至少产生一个响应。一个响应有两部分:跟随在文本后的-一个三位数字,数字部分定义了编码。 第一个数字定义了命令状态,第二个数字定义了状态应用的区域,第三个数字提供了额外信息。
2 TFTP工作机制
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。
相较于FTP,TFTP的设计就是以传输小文件为目标,协议实现简单很多。FTP是一个传输文件的简单协议,它基于UDP协议而实现。它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输8位数据。TFTP代码所占的内存较小,广泛应用于没有硬盘的嵌入式设备。
2.1 TFTP报文格式
TFTP共定义了5种类型的包,包的类型由数据包前两个字节确定,我们称之为Opcode(操作码)字段。
TFTP报文类型 | 英文名称 | Opcode值 |
---|---|---|
读文件请求包 | RRQ(Read request) | 1 |
写文件请求包 | WRQ(Write requst) | 2 |
文件数据包 | DATA | 3 |
回应包 | ACK(Acknowledgement) | 4 |
错误信息包 | ERROR | 5 |
若为错误信息包,会包含差错码,TFTP包括以下7中差错码。
差错码 | 说明 |
---|---|
0 | 不识别 |
1 | 无法找到文件 |
2 | 访问无效 |
3 | 磁盘空间已满 |
4 | 无效的TFTP操作 |
5 | 不识别的端口 |
6 | 文件已存在 |
7 | 没有此用户 |
2.2 TFTP数据传输
TFTP的传输模式与FTP相同,支持二进制和ASCII码两种模式。
-
二进制模式:用于传输程序文件。是TFTP默认传输模式,在二进制传输模式下,TFTP协议不会对数据进行任何转换,直接将数据块传输给对方。
-
ASCII码模式:用于传输文本文件。在ASCII码传输模式下,TFTP协议会将数据块中的换行符转换为本地的换行符,并将文件末尾的空格去掉。
2.3 TFTP交互流程
2.3.1 读文件流程
-
客户端发送一个数据包给服务器,其中包含了要读取的文件名。
-
服务器发回第一个512字节数据块,并对其标号为1
-
客户端返回服务器一个标号为1的确认数据包
-
服务器发送标号为2包含512字节的数据块
-
客户端收到2号数据块后发生确认数据包
-
服务器发送标号为3的包含176字节的数据块
-
客户端收到后回发标号为3的确认数据包
-
服务器收到确认数据包后,确认文件发送完毕
2.3.2 写文件流程
-
客户端发送一个写请求数据包,里面包含了要写的文件名称
-
服务器发送确认数据包,在数据包中它使用编号0
-
客户端发送一个含有512字节,编号为1的数据包
-
服务器返回编号为1的确认数据包
-
客户端发送编号为2,包含512字节的数据包
-
服务器返回编号为2的确认数据包
-
客户端发送编号为3,包含176字节的数据包,等待服务器返回确认数据包。
-
服务器接受3号数据包后,返回确认数据包,由于该数据包数据少于512字节,服务器知道这是最后一个数据包。
-
客户端收到3号确认数据包后,知道文件传输完毕,中断连接。
3 FTPS工作机制
FTPS(也称为FTP安全,FTP-ES,FTP-SSL)是对常用文件传输协议(FTP)的扩展,增加了对传输层安全性(TLS,Transport Layer Security)和安全套接字层(SSL,Secure Sockets Layer)加密协议的支持。
3.1 FTPS工作模式
FPTS 有 FTPS 隐式 SSL 和 FTPS 显示 SSL 两种模式。
-
FTPS 隐式 SSL:该模式通常在端口 990 上运行。在这个模式下全部数据的交换都需要在客户端和服务器之间建立 SSL 会话,并且服务器会拒绝任何不使用 SSL 进行的连接尝试。
-
FTPS 显式 SSL:显示 SSL 下服务器可以同时支持 FTP 和 FTPS 会话。开始会话前客户端需要先建立与 FTP 服务器的未加密连接,并在发送用户凭证前先发送 AUTH TLS 或 AUTH SSL 命令来请求服务器将命令通道切换到 SSL 加密通道,成功建立通道后再将用户凭证发送到 FTP 服务器,从而保证在会话期间的任何命令都可以通过 SSL 通道自动加密。
3.2 FTPS工作方式
FTPS 协议的工作方式包括两个阶段:握手阶段和数据传输阶段。
握手阶段
在握手阶段,客户端与服务器之间建立安全连接。具体步骤如下:
① 客户端连接到服务器的默认 FTP 端口( 21 端口)。
② 服务器返回一个欢迎消息,并要求客户端协商使用 TLS/SSL 。
③ 客户端发起 TLS/SSL 握手请求。
④ 服务器验证客户端的身份,并发送证书给客户端。
⑤ 客户端验证服务器的证书,并生成一个用于加密通信的密钥。
⑥ 握手完成后,客户端与服务器之间的通信将采用 TLS/SSL 加密。
数据传输阶段
握手阶段完成后,客户端与服务器之间的数据传输将通过 TLS/SSL 加密进行保护。具体步骤如下:
① 客户端发送命令请求到服务器,如上传、下载文件等。
② 服务器响应客户端的命令请求,并准备进行数据传输。
③ 客户端与服务器建立一个新的数据连接。
④ 数据连接通过 TLS/SSL 加密进行保护。
⑤ 客户端与服务器之间传输数据。
⑥ 数据传输完成后,数据连接被关闭。
4 SFTP工作机制
一种替代FTPS的协议是安全文件传输协议(SFTP)。这个协议使用SSH文件传输协议加密从客户机到服务器的FTP连接。
SSH File Transfer Protocol(SFTP)是建立在SSH(Secure Shell,安全外壳)协议之上的安全文件传输协议。相比于FTP和TFTP,SFTP提供了加密的通信通道,更适用于对安全性有较高要求的文件传输场景。
SFTP
客户端与 SFTP
服务器之间的所有数据传输都通过 SSH
连接实现。当一个 SFTP
客户端程序连接到服务器时,首先建立一个 SSH
连接。在此基础上,传输的所有数据都会被 SSH
加密,保证了传输过程的机密性和完整性。
【FTP/SFTP/TFTP对比】
5 参考资料
计算机网络基础知识——【FTP协议】概述篇
https://zhuanlan.zhihu.com/p/337513218
基于RFC959的FTP协议梳理
https://www.cnblogs.com/northward/p/16521042.html
FTP的主动模式和被动模式
FTP的主动模式和被动模式_ftp主动连接和被动连接-CSDN博客
吃透FTP
https://zhuanlan.zhihu.com/p/99827735
详解 ➾【FTP服务工作原理及连接模式】
详解 ➾【FTP服务工作原理及连接模式】_ftp工作原理-CSDN博客
FTP协议详解
FTP协议详解
网络协议——FTP(文件传输协议)与TFTP(简单文件传输协议)原理及搭建使用
网络协议——FTP(文件传输协议)与TFTP(简单文件传输协议)原理及搭建使用_tftp ftp-CSDN博客
TFTP协议详解
FTP、SFTP、TFTP文件传输协议之间的主要区别
FTP、SFTP、TFTP文件传输协议之间的主要区别-电子发烧友网
【网络编程】tftp协议详解
TFTP方式传输文件
https://support.huawei.com/enterprise/zh/doc/EDOC1100334524?section=j00n
TFTP是什么,一文带你了解
FTP方式传输文件
https://support.huawei.com/enterprise/zh/doc/EDOC1100334524/8be4b698
TFTP,简单文本传输协议的基本原理
TFTP,简单文本传输协议的基本原理-腾讯云开发者社区-腾讯云
什么是 SFTP 协议
https://zhuanlan.zhihu.com/p/694877160
一文详解 FTP、FTPS 与 SFTP 的原理
FTP协议原理
https://wenku.baidu.com/view/177ea36d6f175f0e7cd184254b35eefdc9d3153e.html