FTP数据连接重用

时间:2015-07-22 10:37:05

标签: ftp passive-mode

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

据我了解,初始(command)连接是永久性的,直到您退出为止。但是,我不确定数据连接 - 是否重新启动了每个命令?您拨打PORT ...PASV,获取第二个连接,执行LIST,获取结果,关闭连接,重新开始?

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

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

1 个答案:

答案 0 :(得分:7)

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

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

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

  

重用数据连接:使用数据流模式时         传输文件的结尾必须通过关闭来表示         连接。如果要有多个文件,这会导致问题         在会话中转移,由于需要TCP来持有         连接记录超时期限,以保证可靠         通讯。因此,连接不能立即重新打开。

     

这个问题有两个解决方案。首先是            协商非默认端口。第二是使用另一个            转移模式。

     

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

另见: