概述
FTP底层通过TCP实现。
FTP采用两个TCP连接,一个作为命令通道(端口号一般是21,用于登陆,删除文件,改变目录操作),一个作为数据通道(用于目录列出,上传下载文件)。
以下实验,通过FileZilla Server和TCP工具,实现FTP文件传输。
FileZilla Server环境搭建
下载FileZilla Server并安装。
下载地址:https://download.csdn.net/download/fengweibo112/11501901
配置Server
选择Edit->Setting,设置如下:
增加登陆用户和共享目录,选择Edit->User
登陆测试,在浏览器中输入本机IP,可以看到共享目录下的文件。
使用TCP工具上传和下载FTP服务器上的文件
操作FTP的步骤如下。
1.客户端和 FTP 服务器建立 Socket 连接。
2.向服务器发送 USER、PASS 命令登录 FTP 服务器。
3.使用 PASV 命令得到服务器监听的端口号,建立数据连接。
4.使用 RETR/STOR 命令下载/上传文件。
5.在下载完毕后断开数据连接并发送 QUIT 命令退出。
详细步骤如下
(一)输入FTP服务器的IP和命令端口号,即21,进行TCP连接
(二)登陆服务器。(FTP常用的命令见下文,注意发送的命令都需要换行)
(三)设置成被动模式
主动模式:客服端告诉服务器自己数据通道的端口和IP,让服务端来连接,这种方式可能被防火墙拦截。
被动模式:服务端返回数据通道的端口和IP,由客服端连接。下图中的IP是返回内容中的括号内容的前4个数字,端口号是第五个数字乘以256,再加上第六个数字.
(四)TCP连接到数据通道
根据返回的数据通道的IP和端口号,可以重新开启一个TCP连接至FTP的数据通道服务器.
(五)进入工作目录
在命令通道中,发送”CMD /\r\n”命令,进入到根目录下的工作目录.
(六)下载文件
在命令通道中输入”RETR test.c\r\n”,则可以下载FTP服务器中的/test.c文件.在数据通道中,可以看到具体下载下来的文件内容.
(七)上传文件
与下载文件相同,使用” STOR
file.txt\r\n”命令实现.
主要用到的 FTP 命令
FTP 每个命令都有 3 到 4 个字母组成,命令后面跟参数,用空格分开。每个命令都以 "\r\n"结束。
要下载或上传一个文件,首先要登入 FTP 服务器,然后发送命令,最后退出。这个过程中,主要用到的命令有 USER、PASS、SIZE、REST、CWD、RETR、PASV、PORT、QUIT。
USER: 指定用户名。通常是控制连接后第一个发出的命令。“USER
gaoleyi\r\n”: 用户名为gaoleyi 登录。
PASS: 指定用户密码。该命令紧跟 USER 命令后。“PASS gaoleyi\r\n”:密码为 gaoleyi。
SIZE: 从服务器上返回指定文件的大小。“SIZE file.txt\r\n”:如果 file.txt 文件存在,则返回该文件的大小。
CWD: 改变工作目录。如:“CWD dirname\r\n”。
PASV: 让服务器在数据端口监听,进入被动模式。如:“PASV\r\n”。
PORT: 告诉 FTP 服务器客户端监听的端口号,让 FTP 服务器采用主动模式连接客户端。如:“PORT
h1,h2,h3,h4,p1,p2”。
RETR: 下载文件。“RETR file.txt \r\n”:下载文件 file.txt。
STOR: 上传文件。“STOR file.txt\r\n”:上传文件 file.txt。
REST: 该命令并不传送文件,而是略过指定点后的数据。此命令后应该跟其它要求文件传输的 FTP 命令。“REST
100\r\n”:重新指定文件传送的偏移量为
100 字节。
QUIT: 关闭与服务器的连接。