图3.6 代码为331的用户名正确并要求口令报文
图3.7 代码为230的登陆成功报文
登陆成功后,服务器发送一个命令,如图3.8所示,可以看到,这个命令为Entering Passive Mode (192,168,8,32,8,82) 代码为227。这个,命令包含了两部分,一个部分为服务器的IP地址,即192.168.8.32,另一个部分即为服务器打开数据连接时使用的端口,数据连接端口号为8*256+82=2130 。
图3.8 进入被动模式的数据包
当客户端向服务器发送一个如图3.9的LIST请求命令后,就开始数据连接了。
3.3 数据连接
通过 上面的控制连接我们可以得知,服务器通过被动打开模式将进行数据传输的临时端口号发送给客户端,通过图3.9中的三个数据包我们可以得知,FTP用于传输数据的连接同样是通过TCP的三次握手建立的,我们每次传送文件,客户端与服务器之间就会建立一条临时的数据连接,用于传输数据。
图3.9 建立数据连接的三次握手
当我们在端口3938与端口2130间的数据连接上传输完数据之后,服务器和客户端通过TCP的4次握手关闭数据连接。数据传输完毕之后,当客户端发送一个如图3.10的 QUIT请求命令,服务器发送一个如图3.11的回应报文,告诉客户端断开连接。接着,通过TCP 的
四次握手,结束整个FTP回话,FTP协议的回话过程就到此结束了。
3.4主动模式与被动模式的区别
在FTP建立数据连接是,有两种模式,一种主动模式,一种被动模式。我们上面所描述的是被动模式,它与主动模式的区别在于,主动模式时,客户端发送的为PORT命令给服务器端,服务器依据命令中制定的端口与客户端建立数据连接,在被动模式下,客户端发送PASV命令给服务器端,进入被动模式。服务器应答时,包括IP地址和一个用于建立数据连接的端口。而不是使用我们熟知的20号端口,客户端的端口为自己选择的一个端口。
4 FTP的通信问题
我们知道在不同的计算机上运行FTP客户端,我们必须保证客户端和服务器能进行通信,FTP需要解决的是使不同的操作系统、不同的字符集、不同的文件结构以及不同的文件格式得到兼容的问题。
在FTP的控制连接上,它使用NVT ASCII字符集。通过命令与响应来完成通信。FTP每次只发送一条命令或者响应,每一条都是一个短行,因此我们不必担心它的文件格式或文件结构。
在FTP的数据连接上,可以传送的文件类型有:
ASCII文件 这是传送文本文件的默认格式。每一个字符使用NVT ASCII进行编码。 EBCDIC文件 如果连接的两端使用EBCDIC编码,则可以使用EBCDIC编码传送。
图像文件 这是传送二进制文件的默认格式,这种文件作为连续的比特流传送而没有任何编码或解释。 5 FTP的命令及响应 5.1 命令处理
命令由FTP客户控制进程发送的命令形式是ASCII大写字符,后面的变量可以有,也可以没有。我们可以将命令粗略地分为6组:接入命令、文件管理命令、数据格式化命令、端口定义命令、文件传送命令以及杂项命令,如表5.1 是常用的接入命令。 表5.1 常用的接入命令
5.2 响应
每一个FTP命令产生至少一个响应。3位数字的数以及跟随在后面的文本。数字代表定义代码,文本部分定义所需的参数或额外的解释。常见的响应代码如表5.2所示。
表5.2 常见的响应
相关推荐: