6.2.3 网络基本服务—文件传输协议(FTP)
FTP(File Transfer Protocol)是Internet上使用最为广泛的文件传送协议,FTP提供交互式的访问,允许客户上传文件到服务器或者从服务器下载文件,FTP屏蔽了各个计算机系统的差异,适合在异构计算机之间传送文件。文件传输协议FTP基于TCP,采用客户/服务器模式,提供文件传送基本网络服务。一个FTP服务器进程可同时为多个客户进程提供服务,FTP服务器包括两部分,一个主进程,负责接收新的请求;另外有若干个从属进程,负责处理单个请求。
FTP使用模型如图所示
用户端包括用户接口,用户协议解释器,用户数据传送进程以及客户端的额文件系统,FTP服务器端包括服务器协议解释器,服务器数据传送进程以及服务器端的文件系统
FTP模型中用户协议解释器初始化控制连接,控制连接遵循Telnet协议,在用户初始化时用户协议解释器产生标准的FTP命令,命令经过控制连接被传送到服务器进程,作为对命令的响应,服务器协议解释器会经过控制连接将标准的应答发送给用户的协议解释器。
FTP命令指定用于数据连接的参数和文件系统操作的种类,数据连接的参数有数据端口,传送模式,表示类型和结构等
文件系统操作种类有保存、检索、添加、删除等。
包含控制信息的FTP命令从用户的FTP进程发送给服务器FTP进程,用户DTP(用户数据传送进程)或者其选定的数据传送进程应该在指定的数据端口上监听,服务器会根据指定的参数,发起数据连接并进行数据传送,需要注意的是数据端口不一定是控制连接上发起FTP命令的用户主机上的TCP端口,但用户或用户FTP进程必须确保在指定的数据端口有监听,还需要注意的是数据连接可以同时用于发送和接收,一般情况下FTP模型,用户主机与FTP服务器之间建立控制连接和数据连接,数据连接是在服务器数据传送进程和用户数据传送进程之间的。
服务器DTP(服务器数据传送进程)处于标准的主动状态,与已在监听的数据端口建立数据连接,它建立用于传送和存储的参数,在得到来自协议解释器的命令时传送数据。
如图是一个FTP客户端上显示的内容,图中紫色部分表示用户输入的内容,蓝色表示控制连接上服务器返回的响应。
图中显示的操作顺序是:打开FTP服务器、登录FTP服务器,显示服务器目录,设置文件类型,改变客户端本地目录,获取服务器上的文件,关闭服务器。
FTP访问过程如下
-
打开FTP服务器,使用open命令,open命令会引发客户端与服务器段TCP的21号端口建立连接。服务器经由控制连接返回一个响应,图中响应码为220,220响应码表示服务器已经为新用户准备好。
-
FTP客户端提示输入用户名,密码,客户端输入用户名后会引发FTP用户在控制连接上发送访问控制请求命令。此时服务器会返回状态码331的响应,此时FTP客户端会提示输入密码,输入密码后就会引发FTP客户在控制连接上发送访问控制请求命令。服务器返回状态码230的响应。
-
输入ls命令,查看目录,该命令引发的内在操作如图所示
-
客户使用数据端口port命令向服务器传送参数,PORT 2.0.1.17 101201,其中2.0.1.17表示的是用户主机的IP地址,101和201是表示数据端口的,101对应的十六进制0X65,201所对应的十六进制是0XCB,PORT命令会告诉服务器端用户端已经在0X65C9端口监听了。
-
服务器收到数据端口信息后会返回200 PORT Commend successful的响应,其中200是响应码,表示命令执行正确。
-
客户向服务器发送服务命令namelist,表示要求服务器将当前目录列表发给用户端。为此服务器使用20端口主动与用户主机的0X65C9端口建立TCP连接,这里需要注意的是这是一个数据连接。同时服务器还通过控制连接返回150 Opening ASC mode data connection响应,其中响应码150表示的是文件状态ok。
数据连接建立好后服务器就会通过数据连接返回其当前目录的列表,然后关闭数据连接。再通过控制连接返回226 Transfer complete响应,响应码226表示正在关闭数据连接。此时的FTP客户端就会显示目录列表、响应码和消息。并统计收到的字节数,用时以及二者的比值。
-
-
输入binary命令,该命令是把数据表示类型变为二进制,这会引起客户向服务器发送传送参数表示类型命令。这个命令是要将表示类型设为图像类型,是为了有效存储和检索,传送二进制文件。FTP标准推荐都支持这种类型。
-
服务器成功设置类型后返回200 Type set to I响应
-
输入lcd e:\命令,该命令触发客户端改变当前目录到E盘根目录。这条命令不会引起网络流量。
-
输入get 计算机通信与网络.pdf,get命令表示取文件的意思。这条命令触发的响应如下图
-
客户先通过PORT命令向服务器传送参数,服务器收到数据端口信息后会返回200 PORT Commend successful的响应。
-
客服向服务器发送服务命令RETR,RETR是检索的意思,该命令会导致服务器端的数据传送进程向数据连接的另一端发送指定的文件。另一端在示例中是用户端数据传送进程。如果有其他情况也有可能是服务器端另一台服务器的数据传送进程。此时服务器会使用20号端口主动的与用户主机上的数据端口0X65CB建立一个新的TCP连接。
同时服务器通过控制连接返回150 Opening BINARY mode data connection for 计算机通信与网络.pdf (4549318 Bytes),响应码150表示文件状态ok
-
数据连接建立好后,服务器会通过数据连接返回该文件并关闭数据连接。同时通过控制连接返回226 Transfer complete响应,响应码226表示关闭数据连接的意思。FTP客户会统计收到的字节数,用时以及二者的比值。
-
-
输入close命令,该命令会引发客户向服务器发送访问控制命令。服务器会返回221 Goodbye!响应,221表示服务正在关闭