一.作用与功能
- 作用:用于文件的上传和下载
- 功能:(1)连接到FTP服务并操纵数据和数据的上传下载以及备份,其FTP服务器就是支持FTP协议的服务器;
(2)可以访问物理远程服务器。
二.报文格式
- FTP指令
(1)连接成功:220 Welcome to XFtpServer(libevent)\r\n
(2)USER用户登录:a.USER root\r\n b. 230 Login successful.\r\n
(3)PWD获取当前目录:a. PWD\r\n b. 257 “/” is current directory
(4)CWD进入目录:a. CWD test\r\n b. 250 Directory success changed
(5)CDUP返回上传目录:a. CDUP\r\n b. 250 Directory success changed
(6)PORT客户端发送数据传送地址和端口:a. PORT 127.0.0.1.70.96\r\n b. 200 PORT command successful.\r\n c.端口计算方法(PORT n1,n2,n3,n4,n5,n6\r\n;port = n5*256+n6)
(7)LIST获取目录:a. LIST\r\n b. 150 Here comes the directory listing.\r\n 450 file open failed. c.数据通道连接,传送文件数据给客户端
d. 226 Transfer complete\r\n e. 关闭数据通道
(8)RETR下载文件:a. RETR filepath\r\n b. 150 Transfer start.\r\n 450 file open failed c. 数据通道,读取上传文件,客户端发送结束会主动关闭数据通道
d. 226 Transfer complete\r\n
三.工作原理
FTP是使用C/S架构在基于TCP的一种文件传输服务协议
- FTP服务器工作流程
- (1)建立TCP连接
- (2)打开21端口(协议控制端口),让客户端能连接起来
- (3)等待客户端进程发送链接请求
- (4)启动从属进程来处理客户端发来的请求;主进程与从属进程并发执行,从属进程对
客户端的请求处理完毕后即终止。 - (5)回到等待状态,继续接受其他客户端的请求。
这里得提一下,建立得TCP连接是有两个:一个是协议控制连接,一个是数据传输连接。
-
FTP的工作模式:(命令通道和数据通道)
(1)主动模式PORT
a.客户端首先和服务器的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令
b.PORT命令包括了客户端用什么端口去接受数据
(2)被动模式PASV
FTP服务器收到Pasv命令后,随机打开一个临时端口用于传送数据 -
使用区别
在实际得使用中,它们之间得联系是这样得:FTP Server <=> 防火墙 <=> FTP Client
(1)主动模式PORT一般是用于FTP服务器在公网,客户端需要用snat转换去访问(snat是原地址转换)
(2)被动模式PASV一般是用于FTP服务器在私网,客户端需要用dnat转换去访问(DNAT是目标地址转换)
四.再次顺便说一下HTTP与FTP得区别
- HTTP是面向网页的,FTP是面向文件的。
- 它们相同的地方在于都是应用层上的协议,都是在TCP的基础上运行的
- 端口不一样:HTTP默认端口一般是80;而FTP服务器端口是21
- HTTP只建立一个TCP连接;而FTP是建立连个TCP连接,一个用于协议控制,一个用于数据传输
- HTTP是无状态的,而FTP服务器在整个连接期间都是保存用户状态的