一、配置FTP服务
配置FTP服务,内容不难,本地虚拟机上自带FTP服务程序,自己下载即可。
二、理解FTP的主动模式和被动模式原理
1 主动模式
客户端先开启一个大于1024的随机端口,用来与服务器的21号端口建立控制连接;当用户需要传输数据时,在控制通道中通过使用PORT命令向服务器发送本地IP地址以及端口号,服务器会主动用20号端口去连接客户端发送过来的指定端口,实现数据传输,然后再这条连接上面进行文件的上传或下载。
FTP主动传输方式具体步骤如下:
-
客户端与服务器的21号端口建立TCP连接,即控制连接。
-
当用户需要获取目录列表或传输文件的时候,客户端通过使用PORT命令向服务器发送本地IP之地以及端口号,期望服务器与该端口建立数据连接。
-
服务器(20号端口)与客户端该端口建立第二条TCP连接,即数据连接。
-
客户端与服务器通过该数据连接进行文件的发送和接收。
在主动模式下,ftp请求是由客户端TCP连接的;传输数据的时候,TCP连接却是由服务端发起的。主动模式只能用于内网,客户端服务端互相访问;如果不在同一网络中,如客户端是本地虚拟机,服务端是云服务器,本地虚拟机可以访问云服务器21端口,但是云服务器访问不了本地虚拟机(由于防火墙或者是网络路由原因导致无法访问)。
2 被动模式
建立控制连接的过程与主动方式基本一致(向服务器21号端口建立控制连接);但是在建立数据连接的过程中,客户端通过控制连接发送PASV命令,随后服务器开启一个大于1024的随机端口,将IP地址和此端口号发送给客户端,然后客户端去连接服务器的该端口,从而建立数据传输链路。
FTP被动传输方式具体步骤如下:
-
客户端与服务器的21号端口建立TCP连接,即控制连接。
-
当用户需要获取目录列表或传输文件的时候,客户端通过控制连接向服务器发送PASV命令通知服务器采用被动传输方式。服务器收到PASC命令后随机开启一个大于1024的端口,然后将该端口号和IP地址通过控制连接发给客户端。
-
客户端与服务器该端口建立第二条TCP连接,即数据连接。
-
客户端与服务器通过该数据连接进行文件的发送和接收。
在被动模式下,不管是执行ftp命令,还是传输数据,都是由客户端向服务端发起TCP连接的。
3 从主动模式到被动模式
在很久以前每台电脑都有一个ip地址,ftp只有主动模式,后来出现了共享上网技术,所以也就有了下面的问题。
共享上网就是多台电脑共享一个公网ip去使用internet,例如某个局域网出口的公网ip是210.33.25.108,当内网用户(192.168.1.100)访问外网的ftp服务器时,如果采用主动模式,192.168.1.100告诉了ftp服务器我需要某个文件和我打开了20端口之后,由于共享上网的原因,192.168.1.100在出网关的时候ip已经被转换成了210.33.25.108,所以ftp服务器端收到的消息是210.33.25.108需要某个文件并打开了20端口,ftp服务器就会尝试连接210.33.25.108的20端口,这样当然不会成功。
在主动模式中,ftp的两个端口是相对固定的,如果命令端口是n的话,那数据端口就是n-1,也就是说默认情况下,命令端口是21,数据端口就是20,如果你把ftp服务的端口改成了521,那么数据端口就是520,这样配置防火墙很方便,只需要开通两个端口就可以了。但是,在共享上网的环境中无法使用主动模式。
在被动模式中,默认情况下命令端口是21,数据端口是随机分配的。但是,被动模式中数据端口的范围可以配置,防火墙也可以配置端口范围。
注意:FTP底层是TCP协议,SFTP底层是SSH协议。
三、手工执行FTP的一些命令(客户端的使用)
1 登录服务器:ftp 192.168.192.136:21
2 切换工作目录
-
查看服务器工作目录:pwd
-
切换服务器工作目录:cd 目录名
-
切换本地工作目录:lcd 目录名
3 查看服务器上的目录和文件
-
列出目录或文件名的详细信息
-
ls 目录或文件名
-
dir 目录或文件名
-
-
仅列出目录和文件名
🔴nlist 目录或文件名 [本地文件名]
1)列出/project/public目录下的匹配*.h的文件名信息。
nlist /project/public/*.h
2)列出/freecplus目录下的匹配*.h的文件名信息,结果输出到本地的/tmp/public.list文件中。(一般程序中用)
nlist /project/public/*.h /tmp/public.list
4 下载/上传文件
🔴1、文件传输的模式
ftp传输文件的模式分二进制和ASCII码两种模式,二进制模式可以传输任何文件,包括压缩包、可执行程序、图片、视频、音频等,而ASCII模式只能传输.txt、.htm等ascii码文件(文本文件)。在实际开发中,不管什么文件,都用二进制方式传输。
1)查看当前的传输模式。
type
2)设定传输模式为二进制。
bin
3)设定传输模式为ASCII。
ascii
🔴2、下载文件
1)下载单个文件
get 服务端文件名 [本地文件名]
2)下载多个文件
mget 服务端文件1 服务端文件2 服务端文件3 …… 服务端文件n
-
下载文件时,会一一提示,如果想关闭提示信息,先输入prompt命令。
prompt
🔴3、上传文件
1)上传单个文件
put本地文件名 [服务端文件名]
2)上传多个文件
mput 本地文件1 本地文件2 本地文件3 …… 本地文件n
-
上传文件时,会一一提示,如果想关闭都显示信息,先输入prompt命令。
prompt
5 其它ftp命令
1)重命名ftp服务端的文件
rename 旧文件名 新文件名
2)删除ftp服务端上单个文件
delete 文件名
3)删除ftp服务端的多个文件。
mdelete 文件名1 文件名2 文件名3 …… 文件名n
4)在ftp服务端上创建目录。
mkdir pathname
5)删除ftp服务端上的目录。
rmdir pathname
6)切换传输模式。
passive
7)显示帮助信息。
help [命令名]
显示ftp命令的帮助信息,如果不输入命令名,则显示全ftp命令的帮助信息。
8)退出ftp。
bye