(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(Network Address Translation),通过NAT可以将内网私有IP地址转换为公网IP地址。一定程度上解决了公网地址不足的问题。
总结为:从内到外发起数据连接请求,可以连接成功;从外到内发起数据连接,连接不成功。