Linux网络编程综合运用之MiniFtp实现(二)

由于新工作的原因,好一阵子都没有写博文了,从今开始,继续发扬学习精神,上一次了解了FTP的一些概念,这次继续对其它的概念进行理解,下面开始:

FTP两种工作模式

上次我们说过,FTP是由两种类型的连接构成的,一种是控制连接【主要是接收FTP客户端发来的命令请求,并且对这些命令进行应答】,一种是数据连接【双方之间进行数据的传输,包括目录列表的传输以及文件的传输】,其中控制连接总是由客户端向服务器发起,而数据连接则不同了,它有两种工作模式:主动模式【由服务器向客户端发起连接而建立数据连接通道】和被动模式【由客户端向服务器发起连接而建立数据连接通道】。下面来看一下这两个工作模式的工作过程:

主动模式

FTP客户端首先向服务器端的21端口发起连接,经过三次握手建设立控制连接通道,客户端本地也会选择一个动态的端口号AA,一旦控制连接通道建立之后,双方就可以交换信息了:客户端可以通过控制连接通道发起命令请求,服务器也可以通过它向客户端对这些命令请求进行应答。

接下来,如果要涉及到数据的传输,势必要创建一个数据连接:

在创建数据连接之前,要选择工作模式,如果是PORT模式,客户端会上服务器端发送PORT命令,这也是通过控制连接通道完成的,向服务器的21端口传送一个PORT命令,并且告知客户端的一个端口号BB,因为这个信息服务器端才知道要连接客户端的哪个端口号,服务器端得到了这个信息,最后就向BB端口号发起了一个请求,建立了一个数据连接通道,数据连接通道一旦建立完毕,就可以进行数据的传输了,包含目录列表、文件的传输,一旦数据传输完毕,数据连接通道就会关闭掉,它是临时的。

这里需要注意一点:

接下来用实验来说明一下双方建立的详细命令,这边通过登录一个客户端来看一下双方之间所交换的命令:

接下来进行数据传输,假设要传输一个列表,刷新一下:

在获得列表之前需要创建一个数据连接,而在创建数据连接时需要根据模式来创建数据连接,这里面采用的是PORT模式:

其整个的工作过程如下:

被动模式

在了解了主动模式之后,被动模式就比较好理解了,如下:

从中可以发现,主被动模式只是连接建立的方向不同而已,同样的,也通过实验来查看一下PASV模式所要交换的FTP命令:

这时同样请求列表:

其整个的工作过程如下:

以上就是FTP的两种工作模式,那为什么要有这两种模式呢?这实际上是跟NAT或防火墙对主被动模式有关系,下面就来了解下:

NAT或防火墙对主被动模式的影响

什么是NAT

NAT的全称是(Network Address Translation),通过NAT可以将内网私有IP地址转换为公网IP地址。一定程度上解决了公网地址不足的问题。

其地址映射关系可以如下:

192.168.1.100:5678【内网IP】 -> 120.35.3.193:5678【NAT转换IP】 -> 50.118.99.200:80【外网IP】

从而就建立了一个连接,而连接的建立是通过NAT服务器进行地址转换完成的。

FTP客户端处于NAT或防火墙之后的主动模式

建立控制连接通道

    因为NAT会主动记录由内部发送外部[相反则无法记录]的连接信息,而控制连接通道的建立是由客户向服务器端连接的,因此这一条接可以顺利地建立起来。

客户端与服务器端数据连接建立时的通知

    客户端先启用PORT BB端口,并通过命令通道告知FTP服务器,且等待服务器端的主动连接。

服务器主动连接客户端

    由于通过NAT转换之后,服务器只能得知NAT的地址并不知道客户端的IP地址,因此FTP服务器会以20端口主动地向NAT的PORT BB端口发送主动连接请求,但NAT并没有启用PORT BB端口,因而连接被拒绝

FTP客户端处于NAT或防火墙之后的被动模式

FTP服务器处于NAT或防火墙之后的被动模式

FTP服务器处于NAT或防火墙之后的主动模式

关于这些模式,需要重点理解下,为什么会有两种工作模式的存在。

 

posted on 2015-04-09 07:40  cexo  阅读(478)  评论(0)    收藏  举报

导航