在网上查询了不少的资料,现在将自己对 ftp 的主动模式和被动模式的理解写下来,一个是为了记录方便以后查看和加深理解,另一个原因是希望能够与各位大牛交流一下,对我写的不好的地方希望大家可以不吝指教。
ftp 的主动模式:我们都知道,ftp在工作的时候无论是客户端还是服务端都会开启两个端口,一个是命令端口(21端口),用于客户端和服务端之间的"命令"通信;一个是数据端口(一般为20端口),该端口用于客户端与服务端之间数据的传输;在主动模式下,客户端创建了两个端口(非特权端口):n 端口 和 n+1 端口,客户端的 n 端口主动与服务端的21端口通过 tcp 著名的“三次握手”建立了连接,此后,ftp 客户端会通过建立起来的“命令通道”告诉服务器想通过“主动模式”进行连接,并把自己的 n+1 端口设置为监听状态,服务器则将自己的20端口也是通过著名的“三次握手”与客户端的 n+1 端口连接起来。概括起来说,就是客户端主动连接服务端的命令端口,然后通知服务器来回连自己的数据端口。
ftp 的被动模式:同样的,ftp 客户端开启一个端口主动与 ftp 服务器 的命令端口(21端口)连接,然后通过建立起来的命令通道通知服务器当前要使用“被动模式”,服务器则会开启一个端口(用于数据传输),监听该端口并且将该端口的信息(端口号)告诉客户端,客户端则开启另一个端口并连接到服务端的数据端口。
可见,所谓的主动和被动,可以理解成是服务器“主动”连接客户端的“数据端口”,还是服务器“被动”地接受客户端对其“数据端口”的连接。但,启动“主动”模式或者是“被动”模式的决定权则在于客户端。
谢谢阅读,如有意见和建议,欢迎交流!