学习miniftpd项目--02

FTP的两种工作模式是什么?

(1)主动模式

(2)被动模式

控制连接通道的建立(三次握手)总是由客户端向服务器端发起的,通常控制连接的port为21。那么如何区分主动模式和被动模式呢?数据连接通道的建立,如果数据连接是由服务器端发起的,则称为主动模式,若数据连接通道是由客户端发起的,则称为被动模式。下面详细介绍这两种模式的工作原理。

主动模式的工作原理(假设控制连接通道已经建立)

1客户端向服务器发送PORT命令

    客户端创建数据套接字

    客户端绑定一个临时端口号

    客户端在套接字上监听

    将IP与端口号格式化为h1,h2,h3,h4,p1,p2

2服务器端以200响应

    服务器端解析客户端发过来的IP与端口暂存起来,以便后续建立数据连接

3 客户端向服务器发送命令,如list

    服务器端检测在收到list命令之前是否接受过PORT(主动)或PASV(被动)命令

    如果没有接受过,则响应425 Use PORT or PASV first

    如果有接受过,并是PORT,则服务器端创建数据套接字(bind 20端口),调用connect主动连接客户端IP与端口,从而建立数据连接。

 4服务器发送150应答给客户端,表示准备就绪,可以开始传输了。

 5开始传输列表

 6服务器发送226应答给客户端,表示数据传输结束

    传输结束,服务器端主动关闭数据套接字

被动模式的工作原理(假设控制连接通道已经建立)

1客户端向服务器发送PASV命令

2服务器端以200响应

    服务器端创建数据套接字

   服务器端绑定一个临时端口号

    服务器端在套接字上监听

    将IP与端口号格式化为h1,h2,h3,h4,p1,p2响应给客户端,以便客户端发起数据连接

3 客户端向服务器发送命令,如list

    服务器端检测在收到list命令之前是否接受过PORT(主动)或PASV(被动)命令

    如果没有接受过,则响应425 Use PORT or PASV first

    如果有接受过,并是PASV,则调用accept被动接受客户端的连接,返回已连接套接字,从而建立数据连接。

 4服务器发送150应答给客户端,表示准备就绪,可以开始传输了。

 5开始传输列表

 6服务器发送226应答给客户端,表示数据传输结束

     传输结束,服务器端主动关闭数据套接字

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

什么是NAT?

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

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

由于客户端位于NAT之后,主动模式为:服务器端向客户端主动建立数据连接,故而只能连接到NAT,数据连接建立不成功。(除非NAT中有映射条目)

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

由于客户端位于NAT之后,被动模式为:客户端向服务器端主动建立数据连接,故而能连接到服务器端,数据连接建立成功。

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

由于服务器端位于NAT之后,主动模式为:服务器端向客户端主动建立数据连接,故而能连接到客户端,数据连接建立成功。

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

由于服务器端位于NAT之后,被动模式为:客户端向服务器端主动建立数据连接,故而只能连接到NAT,数据连接建立不成功。(除非NAT中有映射条目)

总结为:从内到外发起数据连接请求,可以连接成功;从外到内发起数据连接,连接不成功。

你可能感兴趣的:(学习miniftpd项目--02)