文中有不对或者有不清楚的地方,请大家告诉我,谢谢!
 
被动模式下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协议的要求)
 
本文档使用的图例:
11 
图一:客户端发送查询系统类型的指令
 
13
图二:服务器响应客户端系统类型为UNIX
 
14
图三:客户端请求服务器列出它的所有扩展命令和扩展功能
 
15
图四:服务器响应客户端的FEAT请求
 
16
图五:服务器响应客户端有EPSV(扩展PASV,支持非IPV4)的扩展功能
 
18
图六:服务器响应客户端自己支持的其他特性
 
20
图七:服务器响应客户端进入到用户家目录
 
22
图八:客户端向服务器询问文件传输的模式
 
23
图九:服务器响应客户端使用Binary模式
 
24
图十:客户端向服务器询问.bashrc文件的大小
 
25
图十一:服务器回应客户端.bashrc文件的大小为124字节
 
26
图十二:客户端向服务器发送PASV指令
 
27
图十三:服务器响应客户端使用PASV模式,并且商量数据传输端口用59543
 
28
图十四:第一次数据传输连接之第一次握手
 
29
图十五:第一次数据传输连接之第二次握手
 
30
图十六:第一次数据传输连接之第三次握手
 
31
图十七:客户端向服务器发送查看.bashrc文件的指令
 
32
图十八:服务器响应客户端使用Binary数据传输模式来连接.bashrc文件
 
34
图十九:服务器发送FIN和ACK请求断开本次数据连接(第1次断开)
 
35
图二十:客户端发送ACK答应服务器的请求(第2次断开)
 
36
图二十一:服务器响应客户端文件发送完毕的信息
 
38
图二十二:客户端向服务器发送含有FIN和ACK的数据段请求断开数据连接(第3次断开)
 
39
图二十三:服务器向客户端发送含有ACK的数据段确认断开连接(第4次断开)
 
56
图二十四:客户端向服务器发出退出的指令
 
57
图二十五:服务器响应客户端的退出请求
 
58
图二十六:服务器向客户端发送FIN和ACK请求断开控制连接(第1次断开)
 
59
图二十七:客户端向服务器发送ACK答应服务器请求(第2次断开)
 
60
图二十八:客户端向服务器发送FIN和ACK请求断开控制连接(第3次断开)
 
61
图二十九:服务器向客户端发送ACK答应断开控制连接(第4次断开)
 
62
图三十:本次示例全部过程
 
本文档完整的图例,请见附件。