FTP数据连接重用

Chr*_* P. 4 ftp passive-mode

我正在开发一个FTP客户端,我正在努力了解数据连接的工作流程.

据我所知,initial(command)连接是永久性的,直到你退出.但是,我不确定数据连接 - 是否重新启动了每个命令?所以你打电话PORT ...或者PASV,得到第二个连接,做一个LIST,得到结果,连接关闭,重新开始?

此外,您是否需要在每次连接关闭后再次致电PASV(或PORT ...)?似乎当我尝试使用被动连接测试一些东西时,在第一个命令返回结果并关闭数据连接后,我无法重新连接到同一个端口.我可以继续调用PASV- >数据连接 - >运行命令 - >获取结果 - >数据连接关闭 - > PASV,但似乎不是它的运行方式?

此外,如果有人在FTP上有一个比RFC更简洁的材料,我真的很感激.

Mar*_*ryl 8

您必须每次都打开一个新连接.它只是关闭连接,你(或服务器)如​​何判断传输完成(至少在公共"流模式").

您甚至无法重用本地/远程端口号组合,因为当TCP连接关闭时,它进入TIME_WAIT模式并且端口号组合不能使用一段时间.因此,对于两个立即连续的传输,您无论如何都必须使用不同的端口号组合.

请参阅RFC 959,第3.3节.数据管理:

重用数据连接:使用数据传输的流模式时,必须通过关闭连接来指示文件的末尾.如果要在会话中传输多个文件,则会导致问题,因为需要TCP将连接记录保持一段时间以保证可靠的通信.因此,连接不能立即重新打开.

这个问题有两种解决方案.第一种是协商非默认端口.第二种是使用另一种传输模式.

关于转移模式的评论.流传输模式本质上是不可靠的,因为无法确定连接是否过早关闭.其他传输模式(Block,Compressed)不会关闭连接以指示文件结束.它们具有足够的FTP编码,可以解析数据连接以确定文件的结尾.因此,使用这些模式可以使数据连接保持打开以进行多个文件传输.


也可以看看: