1. FTP协议
什么是FTP呢?FTP 是 TCP/IP 协议组中的协议之一,是英文File Transfer Protocol的缩写。
该协议是Internet文件传送的基础,它由一系列规格说明文档组成,目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。简单的说,FTP就是完成两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上,称之为“下载 (download)”文件。若将文件从自己计算机中拷贝至远程计算机上,则称之为“上载(upload)”文件。在TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20。
2. FTP服务器和客户端
同大多数Internet服务一样,FTP也是一个客户/服务器系统。用户通过一个客户机程序连接至在远程计算机上运行的服务器程序。依照 FTP 协议提供服务,进行文件传送的计算机就是 FTP 服务器,而连接FTP服务器,遵循FTP协议与服务器传送文件的电脑就是FTP客户端。用户要连上 FTP 服务器,就要用到 FPT 的客户端软件,通常 Windows自带“ftp”命令,这是一个命令行的 FTP 客户程序,另外常用的 FTP 客户程序还有 CuteFTP、Ws_FTP、Flashfxp、LeapFTP、流星雨-猫眼等。
3. FTP用户授权
(1)用户授权
要连上 FTP 服务器(即“登陆”),必须要有该 FTP 服务器授权的帐号,也就是说你只有在有了一个用户标识和一个口令后才能登陆FTP服务器,享受FTP服务器提供的服务。
(2)FTP地址格式
FTP地址如下: ftp://用户名:密码@FTP服务器IP或域名:FTP命令端口/路径/文件名
上面的参数除FTP服务器IP或域名为必要项外,其他都不是必须的。如以下地址都是有效FTP地址:
ftp://foolish.6600.org
ftp://list:list@foolish.6600.org
ftp://list:list@foolish.6600.org:2003
ftp://list:list@foolish.6600.org:2003/soft/list.txt
(3)匿名FTP
互连网中有很大一部分 FTP 服务器被称为“匿名”(Anonymous)FTP 服务器。这类服务器的目的是向公众提供文件拷贝服务,不要求用户事先在该服务器进行登记注册,也不用取得FTP服务器的授权。Anonymous(匿名文件传输)能够使用户与远程主机建立连接并以匿名身份从远程主机上拷贝文件,而不必是该远程主机的注册用户。用户使用特殊的用户名“anonymous”登陆FTP服务,就可访问远程主机上公开的文件。许多系统要求用户将Emai1地址作为口令,以便更好地对访问进行跟综。匿名FTP一直是Internet上获取信息资源的最主要方式,在Internet成千上万的匿名FTP主机中存储着无以计数的文件,这些文件包含了各种各样的信息,数据和软件。人们只要知道特定信息资源的主机地址,就可以用匿名FTP登录获取所需的信息资料。虽然目前使用WWW环境已取代匿名FTP成为最主要的信息查询方式,但是匿名FTP仍是 Internet上传输分发软件的一种基本方法。如red hat 、autodesk等公司的匿名站点。
4. FTP的传输模式
FTP协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位置、联接的方式、甚至是是否使用相同的操作系统无关。假设两台计算机通过ftp协议对话,并且能访问Internet,你可以用ftp命令来传输文件。每种操作系统使用上有某一些细微差别,但是每种协议基本的命令结构是相同的。
FTP的传输有两种方式:ASCII传输模式和二进制数据传输模式。
1.ASCII传输方式:假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件(尽管字处理文件包含的大部分是文本,其中也包含有指示页尺寸,字库等信息的非打印符)。在拷贝任何非文本文件之前,用binary 命令告诉ftp逐字拷贝,不要对这些文件进行处理,这也是下面要讲的二进制传输。
2.二进制传输模式:在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。如果你在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会使传输稍微变慢 ,也会损坏数据,使文件变得不能用。(在大多数计算机上,ASCII方式一般假设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果你传输二进制文件,所有的位都是重要的。)如果你知道这两台机器是同样的,则二进制方式对文本文件和数据文件都是有效的。
5. FTP的工作方式
FTP支持两种模式,一种方式叫做Standard (也就是 PORT方式,主动方式),一种是 Passive (也就是PASV,被动方式)。 Standard模式 FTP的客户端发送 PORT 命令到FTP服务器。Passive模式FTP的客户端发送 PASV命令到 FTP Server。
下面介绍一个这两种方式的工作原理:
Port模式FTP 客户端首先和FTP服务器的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。
Passive模式在建立控制通道的时候和Standard模式类似,但建立连接后发送的不是Port命令,而是Pasv命令。FTP服务器收到Pasv命令后,随机打开一个高端端口(端口号大于1024)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。
很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为客户端无法穿过防火墙打开FTP服务器的高端端口;而许多内网的客户端不能用PORT模式登陆FTP服务器,因为从服务器的TCP 20无法和内部网络的客户端建立一个新的连接,造成无法工作。
6.FXP
FXP说简单点就是一个FTP客户端控制两个FTP服务器,在两个FTP服务器之间传送文件。FXP的全称为File Exchange Protocol――文件交换协议,可以认为FXP本身其实就是FTP的一个子集,因为FXP方式实际上就是利用了FTP服务器的Proxy命令,不过它的前提条件是FTP服务器要支持PASV,且支持FXP方式。FXP传送时,文件并不下载至本地,本地只是发送控制命令,故FXP传送时的速度只与两个FTP服务器之间的网络速度有关,而与本地速度无关。因FXP方式本地只发送命令,故在开始传送后,只要本地不发送停止的命令,就算是本地关机了,FXP仍在传送,直至一个文件传送完成或文件传送出错后,FTP服务器等待本地发送命令时,才会因不能接收到命令而终止FXP传送。
因为上述的原因,FXP传送出错时,本地的用户进程还留在FTP服务器中,并没有退出,如此时再次连接FTP服务器,可能会因用户线程超过允许,FTP服务器提示客户已登陆并拒绝客户端的连接,直至服务器中的傀儡进程因超时或其他原因被FTP服务器杀死后,才能再次连接FTP服务器。
成功FXP有两个必要条件:①两个FTP服务器均支持FXP;②两个FTP服务器均支持PASV方式。但并不是说满足这两个条件的FTP服务器均经本地操作成功FXP,这还与本地与FTP服务器的网络状况有关。故有时会出现同样两个FTP,别人可以FXP,而你不可以的情况。
7. TFTP
TFTP(Trivial File Transfer Protocol)小文件传输协议
它是一个网络应用程序,它比FTP简单也比FTP功能少。它在不需要用户权限或目录可见的情况下使用,它使用UDP协议而不是TCP协议。
TFTP是一个传输文件的简单协议,它基于UDP协议而实现,但是我们也不能确定有些TFTP协议是基于其它传输协议完成的。此协议设计的时候是进行小文件传输的,因此它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输8位数据。传输中有三种模式:netascii,这是8位的ASCII码形式,另一种是octet,这是8位源数据类型;最后一种mail已经不再支持,它将返回的数据直接返回给用户而不是保存为文件。
任何传输起自一个读取或写入文件的请求,这个请求也是连接请求。如果服务器批准此请求,则服务器打开连接,数据以定长512字节传输。每个数据包包括一块数据,服务器发出下一个数据包以前必须得到客户对上一个数据包的确认。如果一个数据包的大小小于512字节,则表示传输结构。如果数据包在传输过程中丢失,发出方会在超时后重新传输最后一个未被确认的数据包。通信的双方都是数据的发出者与接收者,一方传输数据接收应答,另一方发出应答接收数据。大部分的错误会导致连接中断,错误由一个错误的数据包引起。这个包不会被确认,也不会被重新发送,因此另一方无法接收到。如果错误包丢失,则使用超时机制。错误主要是由下面三种情况引起的:不能满足请求,收到的数据包内容错误,而这种错误不能由延时或重发解释,对需要资源的访问丢失(如硬盘满)。TFTP只在一种情况下不中断连接,这种情况是源端口不正确,在这种情况下,指示错误的包会被发送到源机。这个协议限制很多,这是都是为了实现起来比较方便而进行的。
初始连接时候需要发出WRQ(请求写入远程系统)或RRQ(请求读取远程系统),收到一个确定应答,一个确定可以写出的包或应该读取的第一块数据。通常确认包包括要确认的包的包号,每个数据包都与一个块号相对应,块号从1开始而且是连续的。因此对于写入请求的确定是一个比较特殊的情况,因此它的包的包号是0。如果收到的包是一个错误的包,则这个请求被拒绝。创建连接时,通信双方随机选择一个TID,因此是随机选择的,因此两次选择同一个ID的可能性就很小了。每个包包括两个TID,发送者ID和接收者ID。这些ID用于在UDP通信时选择端口,请求主机选择ID的方法上面已经说过了,在第一次请求的时候它会将请求发到TID
69,也就是服务器的69端口上。应答时,服务器使用一个选择好的TID作为源TID,并用上一个包中的TID作为目的ID进行发送。这两个被选择的ID在随后的通信中会被一直使用。
主动模式下FTP的详细工作过程
PORT FTP是常用的FTP工作方式,当客户端的连接请求到来时,FTP服务器会利用默认的21端口与客户端建立连接,该连接属于命令通道,利用该通道来下达控制指令;接下来服务器便会在20端口接受客户端的数据传输连接请求,并建立数据传输通道,开始传输数据,数据传输完毕后,便会关闭该次的数据连接,接着又会在20端口等待接受新的数据连接。由此可见,基于端口的工作方式,服务器的数据端口始终使用20,建立FTP控制连接则使用标准的21端口。根据需要,可以在配置文件中重新设置所使用的端口。
本示例客户端IP是192.168.120.168,服务器IP是192.168.120.240,在客户端上通过命令行连接FTP服务器,并输入ls、pwd命令,然后退出(见图一)。通过抓包工具来查看用户从连接FTP服务器到退出FTP服务器经过的所有过程。
图一:示例
PORT FTP的详细工作过程:
1. 因为FTP使用的是TCP协议,所以客户端在通过ftp 192.168.120.240连接服务器时,首先会经历TCP的三次握手(见图二、图三、图四)来建立控制通道。客户端使用任意的端口N(N>1024)来连接FTP服务器默认的21端口。
2. 在TCP三次握手结束后,服务器端正式响应客户端的控制连接请求,控制通道建立(见图五)。
3. 客户端向服务器发送含有ACK的数据段来确认控制连接建立。
4. 客户端向服务器发送用户名(见图六)。
5. 服务器向客户端发送含有ACK的数据段来确认用户名。
6. 服务器向客户端询问密码(见图七)。
7. 客户端向服务器发送含有ACK的数据段来确认会发送密码。
8. 客户端向服务器发送密码,密码为明文(见图八)。
9. 服务器向客户端发送含有ACK的数据段来确认密码收到。
10. 服务器向客户端发送登陆成功的信息(见图九)。
11. 客户端向服务器发送含有ACK的数据段来确认收到登陆成功的信息。
12. 客户端向服务器发送PORT N+1指令,N+1是客户端想要的数据传输端口号(见图十)。port 192,168,120,168,200,100;192,168,120,168是客户端自己的IP地址;200,100部分的第一个阿拉伯数字乘以256,然后加上第2个阿拉伯数字就得到数据传输端口号,所以客户端指定的数据传输端口号为200*256+100=51300。
13. 服务器向客户端发送含有ACK的数据段来确认收到PORT N+1指令。
14. 服务器响应PORT指令成功,同意客户端使用PORT N+1为数据传输端口(见图十一)。
15. 客户端向服务器发送ls指令(见图十二)。
16. 服务器响应客户端的数据连接。服务器使用标准的数据端口20主动向客户端的N+1端口发起连接。因为FTP是TCP协议,并且FTP的控制连接和数据连接是分开的,所以FTP的每次数据连接都要经过TCP的三次握手来完成(见图十三、图十四、图十五)。
17. 因为ls命令可以显示文件,也可以显示目录,所以在三次握手完成后,服务器有一个响应列出目录的过程(见图十六、图十七)。
18. 服务器确定完成客户端ls指令后,服务器向客户端发送含有FIN和ACK的数据段请求断开本次数据连接(见图十八)。这是第一次断开本次数据连接。
19. 客户端向服务器发送含有ACK的数据段来应答服务器的断接请求(见图十九)。这是第二次断开本次数据连接。这样就完成了服务器到客户端的数据连接的半关闭。
20. 服务器告之客户端ls指令已完成(见图二十)。
21. 客户端向服务器发送含有ACK的数据段来确认收到服务器的信息。
22. 客户端向服务器发送含有FIN和ACK的数据段,请求断开到服务器之间的本次数据连接(见图二十一)。这是第三次断开本次数据连接。
23. 服务器向客户端发送含有ACK的数据段来确认客户端的断接请求(见图二十二)。这样本次数据连接完全断开,即第四次断开本次数据连接。
24. 客户端向服务器发送pwd指令(见图二十三)。
25. 服务器向客户端回应pwd指令的结果(见图二十四)。
26. 客户端向服务器发送含有ACK的数据段来确认收到服务器发送的结果。
27. 客户端向服务器发送quit指令(见图二十五)。
28. 服务器向客户端回应quit指令的结果(见图二十六)。
29. 服务器向客户端发送含有FIN和ACK的数据段,请求断开控制连接(见图二十七)。这是第一次断开控制连接。
30. 客户端向服务器发送含有ACK的数据段来应答服务器的断接请求(见图二十八)。这是第二次断开控制连接。
31. 客户端向服务器发送含有FIN和ACK的数据段,请求断开到服务器之间的控制连接(见图二十九)。这是第三次断开控制连接。
32. 服务器向客户端发送含有ACK的数据段,来确认客户端的断接请求(见图三十)。这样本次FTP控制连接完全断开。
通过查看本次示例(主动FTP)的详细过程,我们可以得到以下几点结果:
1. 服务器的控制连接端口为21,数据传输端口为20。端口可以在配置文件中修改。
2. 客户端的控制连接端口为N(N>1024),数据传输端口在第一次进行数据传输时为N+1,在第二次数据传输时为N+2,依次类推。(这点在本示例中未体现)
3. 数据传输连接建立后,服务器主动用20端口去连接客户端的N+x端口。
4. 在一次FTP连接的过程中,只有一次控制连接,却可以有多次数据传输连接。(多次数据传输连接在本示例中未体现)
5. 不管是控制连接还是数据传输连接,在每次从建立到完成都需要经过3次连接和4次断开的过程。(这符合TCP协议的要求)
6. FTP指令分为控制指令(如pwd、mkdir、rm、cd等)和数据请求指令(如ls、dir等)。
本文档使用的图例:
图二:建立控制连接之TCP第一次握手
图三:建立控制连接之TCP第二次握手
图四:建立控制连接之TCP第三次握手
图五:服务器响应客户端的控制连接请求
图六:客户端发送用户名
图七:服务器向客户端询问密码
图八:客户端发送密码,密码为明文
图九:服务器响应客户端登陆成功
图十:客户端发送PORT N+1指令
图十一:服务器响应PORT N+1指令成功
图十二:客户端向服务器发送ls指令
图十三:服务器响应客户端的ls指令进行TCP第一次握手
图十四:服务器响应客户端的ls指令进行TCP第二次握手
图十五:服务器响应客户端的ls指令进行TCP第三次握手
图十六:服务器响应客户端的ls指令来显示目录
图十七:服务器确认列出目录
图十八:服务器请求断开本次数据连接(TCP四次断开之第一次)
图十九:客户端确认(TCP四次断开之第二次,服务器到客户端的本次数据连接完成半关闭)
图二十:服务器告之客户端ls指令已完成
图二十一:客户端请求断开到服务器的本次数据连接(TCP四次断开之第三次)
图二十二:服务器确认客户端的请求,完全断开本次数据连接(TCP四次断开之第四次)
图二十三:客户端向服务器发送pwd指令
图二十四:服务器向客户端回应pwd指令的结果
图二十五:客户端向服务器发送quit指令
图二十六:服务器向客户端回应已退出
图二十七:FTP控制连接之第一次断开
图二十八:FTP控制连接之第二次断开
图二十九:FTP控制连接之第三次断开
图三十:FTP控制连接之第四次断开
图三十一:本次示例的完整过程
被动模式下FTP的详细工作过程
PASV FTP在工作的第一步,与PORT FTP一样,会首先使用21端口建立控制连接;但在第二步,由FTP客户端主动发起建立数据传输连接请求,服务器的数据传输端口为随机端口,因此,每次建立的数据传输连接通道,服务器所使用的端口都不相同。
本示例客户端IP是192.168.120.168,服务器IP是192.168.120.240,因为客户端的MS-DOS不支持PASV模式,所以使用FlashFXP软件来连接服务器。通过抓包工具来查看用户从连接FTP服务器到退出FTP服务器经过的所有过程。
使用FlashFXP所做的操作:1.输入FTP服务器的IP,要登入的用户名和密码。2.进入用户家目录,查看.bashrc和.bash_profile两个文件。3.退出FTP。
PASV FTP的详细工作过程:
1. 因为FTP使用的是TCP协议,所以客户端FlashFXP在连接服务器192.168.120.240时,首先会经历TCP的三次握手来建立控制通道。客户端使用任意的端口N(>1024)来连接FTP服务器默认的21端口。这和PORT模式一样。
2. 在TCP三次握手结束后,服务器端正式响应客户端的控制连接请求,控制通道建立。
3. 客户端向服务器发送含有ACK的数据段来确认控制连接建立并发送用户名。
4. 服务器向客户端发送含有ACK的数据段来确认用户名。
5. 服务器向客户端询问密码。
6. 客户端向服务器发送含有ACK的数据段来确认并发送密码,密码为明文。
7. 服务器向客户端发送含有ACK的数据段来确认密码收到。
8. 服务器向客户端发送登陆成功的信息。
9. 客户端向服务器发送含有ACK的数据段来确认并发送查询系统类型的指令(见图一)。
10. 服务器向客户端发送含有ACK的数据段来确认收到指令。
11. 服务器向客户端回应系统的类型为UNIX(见图二)。
12. 客户端向服务器发送列出服务器的所有扩展命令和扩展功能的指令(见图三)。
13. 服务器响应客户端的FEAT请求(见图四)。
14. 服务器响应客户端有EPSV(扩展PASV,支持非IPV4)的扩展功能(见图五)。
15. 客户端向服务器发送含有ACK的数据段来确认收到信息。
16. 服务器响应客户端自己的其他特性(见图六)。MDTM:保留下载文件的日期/时间;REST STREAM:重设文件传输方式为stream形式。
17. 客户端确认收到服务器的信息。
18. 服务器响应客户端进入到用户的家目录(见图七)。
19. 客户端确认收到服务器的信息。
20. 客户端向服务器发送文件传输使用何种模式(Binary、ASCII)的指令(见图八)。
21. 服务器回应客户端使用Binary模式(见图九)。
22. 客户端向服务器询问.bashrc文件的大小(见图十)。
23. 服务器回应客户端.bashrc文件的大小为124字节(见图十一)。
24. 客户端向服务器发出PASV的指令(用来进行数据传输)(见图十二)。
25. 服务器回应客户端使用PASV模式,并且商量数据传输端口用232x256+151=59543(见图十三)。
26. 客户端主动使用N+1端口来连接服务器的59543端口,并且向服务器发送含有SYN的数据段来开始进行数据传输连接的第1次握手(见图十四)。
27. 服务器向客户端发送含有SYN和ACK的数据段来进行第2次握手(见图十五)。
28. 客户端向服务器发送含有ACK的数据段来进行第3次握手(见图十六)。
29. 3次握手过程完成,客户端向服务器发送查看.bashrc文件的指令(见图十七)。
30. 服务器回应客户端使用Binary数据传输模式连接.bashrc文件(见图十八)。
31. 服务器开始进行数据传输。
32. 服务器确定数据传输完毕,然后向客户端发送含有FIN和ACK的数据段来请求断开本次数据连接,第1次断开(见图十九)。
33. 客户端向服务器发送含有ACK的数据段答应服务器的断接请求,第2次断开(见图二十)。
34. 服务器响应客户端文件发送完成的信息(见图二十一)。
35. 客户端向服务器发送含有ACK的数据段来确认收到信息。
36. 客户端向服务器发送含有FIN和ACK的数据段来请求断开客户端到服务器之间的数据连接,第3次断开(见图二十二)。
37. 服务器向客户端发送含有ACK的数据段确认断开连接,第4次断开(见图二十三)
38. 接下来是查看.bash_profile文件的过程。其过程和查看.bashrc文件的过程一样(在此不详述了),只是服务器和客户端的数据传输端口变了。服务器的数据传输端口是随机的;客户端的数据传输端口是N+2。
39. 客户端在查看完.bash_profile文件并彻底完成该次数据连接的4次断开后,向服务器发送退出的指令(见图二十四)。
40. 服务器响应客户端的退出请求(见图二十五)。
41. 服务器向客户端发送含有FIN和ACK的数据段,请求断开控制连接(见图二十六)。这是第一次断开控制连接。
42. 客户端向服务器发送含有ACK的数据段来应答服务器的断接请求(见图二十七)。这是第二次断开控制连接。
43. 客户端向服务器发送含有FIN和ACK的数据段,请求断开到服务器之间的控制连接(见图二十八)。这是第三次断开控制连接。
44. 服务器向客户端发送含有ACK的数据段,来确认客户端的断接请求(见图二十九)。这样本次FTP控制连接完全断开。
通过查看本次示例(被动FTP)的详细过程,我们可以得到以下几点结果:
1. 服务器的控制连接端口为21,数据传输端口随机(>1024)并且每次的数据传输端口都不一样。
2. 客户端的控制连接端口为N(>1024),数据传输端口在第一次进行数据传输时为N+1,在第二次数据传输时为N+2,依次类推。
3. 服务器主动告诉客户端自己的数据传输端口。
4. 客户端主动用数据传输端口N+x去连接服务器的随机数据传输端口。
5. 在一次FTP连接的过程中,只有一次控制连接,却可以有多次数据传输连接。
6. 不管是控制连接还是数据传输连接,在每次从建立到完成都需要经过3次连接和4次断开的过程。(这符合TCP协议的要求)
本文档使用的图例:
图一:客户端发送查询系统类型的指令
图二:服务器响应客户端系统类型为UNIX
图三:客户端请求服务器列出它的所有扩展命令和扩展功能
图四:服务器响应客户端的FEAT请求
图五:服务器响应客户端有EPSV(扩展PASV,支持非IPV4)的扩展功能
图六:服务器响应客户端自己支持的其他特性
图七:服务器响应客户端进入到用户家目录
图八:客户端向服务器询问文件传输的模式
图九:服务器响应客户端使用Binary模式
图十:客户端向服务器询问.bashrc文件的大小
图十一:服务器回应客户端.bashrc文件的大小为124字节
图十二:客户端向服务器发送PASV指令
图十三:服务器响应客户端使用PASV模式,并且商量数据传输端口用59543
图十四:第一次数据传输连接之第一次握手
图十五:第一次数据传输连接之第二次握手
图十六:第一次数据传输连接之第三次握手
图十七:客户端向服务器发送查看.bashrc文件的指令
图十八:服务器响应客户端使用Binary数据传输模式来连接.bashrc文件
图十九:服务器发送FIN和ACK请求断开本次数据连接(第1次断开)
图二十:客户端发送ACK答应服务器的请求(第2次断开)
图二十一:服务器响应客户端文件发送完毕的信息
图二十二:客户端向服务器发送含有FIN和ACK的数据段请求断开数据连接(第3次断开)
图二十三:服务器向客户端发送含有ACK的数据段确认断开连接(第4次断开)
图二十四:客户端向服务器发出退出的指令
图二十五:服务器响应客户端的退出请求
图二十六:服务器向客户端发送FIN和ACK请求断开控制连接(第1次断开)
图二十七:客户端向服务器发送ACK答应服务器请求(第2次断开)
图二十八:客户端向服务器发送FIN和ACK请求断开控制连接(第3次断开)
图二十九:服务器向客户端发送ACK答应断开控制连接(第4次断开)
图三十:本次示例全部过程