1.在FTP 会话过程中存在两个独立的TCP 连接
在FTP 会话过程中,存在两个独立的TCP 连接: 控制连接(control connection)和数据连接(data connection)。这两个连接可以选择不同的合适服务质量。例如,对控制连接而言,需要更短的延迟时间;对数据连接而言,需要更大的数据吞吐量。
1)控制连接
控制连接主要用来传送在实际通信过程中需要执行的FTP 命令以及命令的响应,只需要很小的网络带宽。FTP 服务器监听端口号21 来等待控制连接建立请求,建立以后并不立即建立数据连接,而是服务器通过一定的方式来验证客户的身份,以决定是否可以建立数据连接。
2)数据连接
在需要文件夹列表、需要传输文件时,数据连接才临时建立,一旦数据传输完毕,这条临时的数据连接就中断。
在FTP 连接期间,控制连接始终保持通畅的连接状态。在数据连接存在期间内,控制连接是肯定存在的;一旦控制连接断开,数据连接就会自动关闭。
2.FTP 的两种连接模式
FTP 的连接模式有两种: PORT 和PASV。PORT 模式是主动模式;PASV 是被动模式。二者都是相对于服务器而言的。
1)PORT 模式
当用户要列出服务器上的文件夹结构时,就要建立一个数据通道,此时客户机会发出PORT 指令告诉服务器自己的什么端口打开了,可以来建立一条数据通道(这个命令由控制信道发送给服务器),当服务器接到这一指令时,服务器会使用20 端口来连接用户在PORT指令中指定的端口号,以发送文件夹结构。
例如,PORT 192,168,10,111,28,37 告诉服务器,当收到这个PORT 指令后,连接FTP客户机的端口7205 (即28 ×256 +37 =7205)。由于客户机打开某一端口,等待服务器端主动建立数据连接,因此PORT 模式为主动模式。
2)PASV 模式
当用户需要建立一个数据通道时,FTP 客户机发送一个PASV 的指令,FTP 服务器端应答返回一个已经打开的端口让FTP 客户机连接上,开始数据传输。
例如,FTP 服务器应答为227 Entering Passive Mode (200,10,211,111,13,113),则表明服务器已打开端口3441 (即13 ×256 +113 =3441),客户机可以连接这个端口。由于服务器端打开某一端口,等待客户机来建立数据连接,所以PASV 模式称为被动模式。
3.FTP 内部命令
在客户机和服务器端交换数据时,使用FTP 协议所规定的一系列FTP 命令。具体而言:客户机发出FTP 命令,服务器端对每个FTP 命令至少返回一个响应。这样,既能实现数据传输请求和传输过程的同步,又能让用户了解服务器的状态。
客户机发出的FTP 内部命令简介如下:
(1)USER name: 以name 为用户名访问FTP 服务器。
(2)PASS password: 发送口令。
(3)PWD: 显示服务器当前文件夹的名称。
(4)LIST [pathname]: 显示服务器指定(或当前)文件夹中的文件和文件夹列表。
(5)CWD pathname: 进入服务器的pathname 文件夹。
(6)MKD dirname: 在服务器当前文件夹下建立新目录dirname。
(7)RETR filename: 下载文件filename 到本地硬盘的当前文件夹。
(8)STOR filename: 上传文件filename 到服务器的当前文件夹。
(9)DELE filename: 删除服务器中的文件filename。
(10)RMD pathname: 删除服务器中的文件夹pathname。
(11)PORT h1,h2,h3,h4,p1,p2: 指定用于建立数据连接的主机地址和端口号。
(12)PASV: 请求服务器进入被动连接状态。
(13)QUIT: 断开连接,退出登录。
4.FTP 应答
FTP 应答由3 个数字开始,后面是一些文本。不同的应答码有不同的意义。简介如下:
(1)220: 服务器准备好了。
(2)331: 用户名正确,需要口令。
(3)230: 用户口令正确,登录成功。
(4)200: 命令成功。
(5)125: 打开数据连接。
(6)226: 关闭数据连接,请求文件的操作成功。
(7)221: 关闭控制连接,可以退出登录。
5.协议实例分析
客户机的IP 地址是172.22.97.20,服务器端的IP 地址是172.22.97.19,操作内容是以匿名方式登录FTP 服务器,发送dir 命令查看服务器当前文件夹中的文件清单,发送get 命令下载一个文件test.txt,最后发送quit 命令断开和FTP 服务器的连接。操作过程如图3-4-13所示。
图3-4-13 从FTP 服务器下载文件的操作过程
先开启Wireshark 抓包工具,再完成上述操作,最后关闭抓包,抓包数据如图3-4-14。(www.xing528.com)
图3-4-14 从FTP 服务器下载文件的抓包数据
图3-4-14 从FTP 服务器下载文件的抓包数据(续)
当客户机发出命令“ftp 172.22.97.19”时,第3、4 帧数据是ARP 数据报,后面发起了和目标主机的建立控制连接的请求,对应图3-4-14 中第5 ~7 帧数据,完成和服务器的三次握手过程。
第8 帧数据是建立控制连接后,服务器发来的220 应答,告之服务器是Windows 操作系统及其主机名等信息。
客户机发送用户名及口令,服务器给出相应回答,对应图3-4-14 的第9 ~14 帧数据。可以看到,在抓包数据中,FTP 命令是USER 和PASS,FTP 应答是331 和230;还可以看到,用户名和口令是明文传递的。
客户机发送dir 命令,服务器返回其当前文件夹的文件清单,这一过程对应图3-4-14中第12 ~26 帧数据。分析这些数据如下:
(1)第16 ~21 帧: 数据通过控制连接交互,客户机发送一个PORT 命令,告诉服务器,客户机的49315 号端口做好了建立连接的准备。服务器发送200 应答,告之收到且同意。由第17 帧的PORT 172,22,97,20,192,163 可知,其端口为49315 (即192×256 +163 =49315)。
(2)第22 帧: 客户机 (172.22.97.20)发送LIST 命令,请求得到服务器 (172.22.97.19)。
(3)第23 帧: 服务器(172.22.97.19)发送125 应答,告诉客户机,端口49315 已经连接,开始传输数据。
(4)第24 帧: 服务器向客户机传送了263 字节的数据,其内容如图3-4-15 所示。和图3-4-13 比较可以看出,263 字节的数据就是文件清单。
(5)第25 帧: 服务器告诉客户机,数据传输完毕,准备断开TCP 连接。
(6)第26 帧: 226 服务器告诉客户机,FTP 数据传输完毕。
(7)第27 ~30 帧: 关闭49315 端口,断开客户机49315 端口和服务器上20 端口FTP 连接。(TCP 四次挥手)
(8)第31 帧: 客户机发送一个PORT 命令,告诉服务器,客户机的49318 号端口做好了建立连接的准备。由PORT 172,22,97,20,192,166 可知,其端口是49318 (即192 ×256 +166 =49318)。
(9)第32、33 帧: 服务器发送200 应答,告之收到且同意。
(10)第34、35 帧: 同步和确认信息。
(11)第36 帧: 客户机告诉服务器下载文件test.txt 到本地机。
图3-4-15 FTP 传输的数据
(12)第37、38 帧: 服务器发送125 应答,告诉客户机,数据链路已经打开,开始传输。客户机确认。
(13)第39 帧: 服务器172.22.97.19 向客户机172.22.97.20 传送23 字节数据。第39帧数据报内容如图3-4-16 所示。文件test.txt 的内容如图3-4-17 所示。
图3-4-16 第39 帧数据报
图3-4-17 文件tset.txt 的内容
(14)第40 帧: 客户机确认收到23 字节的数据。
(15)第41 帧: 服务器确认从20 号端口传送到客户机上49318 号端口的数据传输完毕。
(16)第42 帧: 服务器响应数据传输完毕,发送226 应答,表示传输完成。
(17)第43 ~46 帧: 关闭服务器上20 端口,同时关闭客户机上49318 号端口。(TCP 四次挥手)
(18)第47 帧: 客户机告诉服务器,希望结束FTP 连接。
(19)第48 帧: 服务器响应客户机,结束FTP 连接的请求。应答221 表示关闭连接退出登录。
(20)第49 ~52 帧: 关闭服务器上21 端口,同时关闭客户机上49312 号端口。(TCP 四次挥手)
【小结】
当用户发送dir 命令请求得到服务器文件清单时,FTP 协议实际上完成了以下4 个步骤:
第1 步,通过控制连接,协商数据连接的端口号并告之一些准备工作已做好。
第2 步,建立数据连接。
第3 步,通过数据连接传送请求的文件清单数据。
第4 步,关闭新建立的数据连接。
在客户机使用dir 命令就是下载服务器端的文件目录,此时客户机和服务器连接的端口是49315 号和20 号端口,要建立一次连接、传送数据和断开连接。
客户机发送命令 “get test.txt”,服务器将该文件传送到客户机,这一过程对应图3-4-14中的第33 ~46 帧数据。此时,客户机和服务器连接的端口是49318 号和20 号,要建立一次连接、传送数据和断开连接。
在客户机和服务器建立FTP 连接时,使用49312 号和21 号端口;在传送数据时,建立新的端口连接。
通过以上数据报可以看到,FTP 在传输账号、密码和数据时使用明码传送,这对安全构成一定隐患,所以在使用FTP 传输文件时,要考虑安全因素。和Telnet 不同的是,FTP 只限于文件,它不涉及系统环境和计算机的基本配置。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。