FTP Port(主动)模式
- 客户端向服务器提出用TCP/21连接的请求,三次握手结束。到这里还只是建立了控制连接。
- 在控制连接上交换用户名和密码之后,客户端通过PORT命令发送用于数据连接的端口号要素值,该值以“PORT<IP地址>,x,y”的形式发送。用公式“256*x+y”算出来的值就是数据连接的目的端口号。(举个例,假设客户端己通过PORT命令发送了x=150,y=218这两个值,那么,即将建立的数据连接的目的端口号就是150x256+218=38618)。
- 客户端通过控制连接向服务器发送RETR(GET)命令。
- 服务器收到RETR命令之后,在源端口号中写入TCP/20,在目的端口号中写入通过PORT命令算出的值(256*x+y)并请求连接。这里的连接请求是关键所在,它是由服务器一方提出来的。TCP/20的三次握手结束之后,就能将应用数据发送出去了。
- 应用数据一经发送就执行TCP断开处理,关闭数据连接,但控制连接仍继续生效。
- 最后在用户登出系统的同时执行TCP/21断开处理,关闭控制连接。至此,所有的处理才宣告结束。
FTP PAVS(被动)模式
FTP的被动模式是指在控制连接中使用TCP/21、在数据连接中使用不特定端口的一种模式。被动模式仅当客户端通知服务器它处于被动模式(PASV命令)时才会启用。数据连接的连接请求(SYN)是从客户端发出的,从这一点来说,几乎所有的主从式(客户端—服务器)架构协议都是如此。被动模式的关键在于它的端口号,主动模式一定会用TCP/20,被动模式则会选择非特定的端口来使用。
- 客户端向服务器提出用TCP/21连接的请求,三次握手结束,到这里还只是建立了控制连接。
- 在控制连接上交换用户名和密码之后,客户端通过PASV命令提出使用被动模式的请求。针对该请求,服务器会返回一个Entering?Passive?mode的提示,同时发送用于数据连接的端口号要素值,该值以“Entering?passive?mode<IP地址>,x,y”的形式发送。用公式“256*x+y”算出来的值就是数据连接的目的端口号。(举个例,假设客户端己通过Entering?passive?mode命令发送了x=212,y=174这两个值,那么,即将建立的数据连接的目的端口号就是212x256+174=54446)。
- 客户端使用控制连接向服务器发送RETR命令。然后在目的端口号中写入前面通过Entering?passive?mode命令计算出来的端口号,提出连接请求并生成数据连接。顺便提一句,这个时候的源端口号是随机的。三次握手结束之后数据连接得以建立,这样就能在数据连接上发送应用数据了。
- 数据一经发送就执行TCP断开处理,关闭数据连接,但控制连接仍继续生效。
- 最后在用户登出系统的同时执行TCP/21断开处理,关闭控制连接。至此,所有的处理才宣告结束。
两种模式的比较
- 主动模式数据传输是“服务器”连接到“客户端”的端口;
- 被动模式数据传输是“客户端”连接到“服务器”的端口。