ftp协议的工作过程
FTP(FileTransferProtocol)协议的工作过程主要分为以下几个阶段:
连接建立阶段
1.客户端与服务器的通信初始化
客户端首先会启动一个FTP客户端程序,该程序会随机选择一个本地端口(通常是1024以上的端口)作为源端口,然后向服务器的FTP控制端口(默认是21)发起TCP连接请求。这个连接用于在客户端和服务器之间传输控制信息,例如用户登录命令、文件操作命令等。
2.TCP三次握手
-客户端向服务器发送SYN包,请求建立连接,其中包含客户端初始的序列号(ISN)。
-服务器收到SYN包后,向客户端发送SYN+ACK包,确认客户端的请求,并包含服务器自己的初始序列号。
-客户端收到SYN+ACK包后,向服务器发送ACK包,完成三次握手,此时控制连接建立成功。
用户认证阶段
1.用户名和密码传输
控制连接建立后,客户端通过控制连接向服务器发送用户名(USER命令)。服务器收到用户名后,会提示客户端发送密码(PASS命令)。客户端接着发送密码,服务器对用户名和密码进行验证。
2.认证结果反馈
如果用户名和密码正确,服务器会返回一个成功的响应码,允许客户端进行后续操作;如果认证失败,服务器会返回相应的错误码,提示客户端认证不通过。
数据传输阶段
1.数据连接建立方式
-主动模式(PORT模式)
-客户端通过控制连接向服务器发送PORT命令,该命令包含客户端用于数据传输的IP地址和端口号(通常是一个1024以上的端口)。
-服务器收到PORT命令后,使用自己的20号端口(默认数据端口)向客户端指定的IP地址和端口发起TCP连接请求。经过TCP三次握手后,数据连接建立。
-被动模式(PASV模式)
-客户端通过控制连接向服务器发送PASV命令,请求服务器进入被动模式。
-服务器收到PASV命令后,会在自己的高端端口(通常是1024以上的端口)监听数据连接,并通过控制连接将该端口号和服务器的IP地址返回给客户端。
-客户端收到服务器的响应后,使用自己的一个随机端口向服务器指定的IP地址和端口发起TCP连接请求,完成数据连接的建立。
2.数据传输操作
数据连接建立后,客户端和服务器可以进行数据传输。例如,客户端执行下载文件操作时,服务器会从存储设备读取文件数据,并通过数据连接发送给客户端;若执行上传文件操作,客户端则将本地文件数据通过数据连接发送给服务器。
3.数据连接关闭
数据传输完成后,无论是上传还是下载操作结束,客户端和服务器会关闭数据连接。通常是一方发送FIN包,另一方响应ACK包,然后另一方再发送FIN包,最后双方都发送ACK包,完成数据连接的四次挥手关闭过程。
会话结束阶段
1.控制连接关闭请求
当客户端完成所有的文件传输操作后,会通过控制连接向服务器发送QUIT命令,表示会话结束。
2.控制连接关闭过程
服务器收到QUIT命令后,会返回一个确认响应,并关闭控制连接。与数据连接关闭类似,也是通过TCP的四次挥手过程,即一方发送FIN包,另一方响应ACK包,然后另一方再发送FIN包,最后双方都发送ACK包,彻底关闭控制连接,整个FTP会话结束。