我正在开发一个 FTP 客户端,并试图了解数据连接的工作流程。
据我了解,最初的(command
)连接是永久的,直到您退出为止。但是,我不确定数据连接 - 是否按命令重新启动?所以你打电话PORT ...
or PASV
,获得第二个连接,执行LIST
,得到结果,连接关闭,重新开始?
另外,需要打电话吗PASV
(or PORT ...
)在每个连接关闭后再次?似乎当我尝试使用被动连接测试某些内容时,在第一个命令返回结果并关闭数据连接后,我无法重新连接到同一端口。我可以继续打电话PASV
-> 数据连接 -> 运行命令 -> 获取结果 -> 数据连接关闭 ->PASV
,但似乎这不是它应该如何运行?
另外,如果有人在 FTP 上有比 RFC 更简洁的好材料,我真的很感激。
您每次都必须打开一个新连接。这只是连接的关闭,您(或服务器)如何知道传输已完成(至少在常见的“流模式”下)。
您甚至不能重复使用本地/远程端口号组合,因为当 TCP 连接关闭时,它会进入 TIME_WAIT 模式,并且端口号组合在一段时间内无法使用。因此,对于两个立即连续的传输,您无论如何都必须使用不同的端口号组合。
参考RFC 959 https://datatracker.ietf.org/doc/html/rfc959,第 3.3 节。数据管理:
数据连接的复用:使用数据流模式时
传输文件的结尾必须通过关闭来指示
联系。如果要处理多个文件,这会导致问题
在会话中传输,由于 TCP 需要保存
超时期间连接记录,保证可靠
沟通。因此无法立即重新打开连接。
这个问题有两种解决方案。第一个是
协商非默认端口。第二种是使用另一个
传输模式。
对传输模式的评论。流传输模式为
本质上是不可靠的,因为人们无法确定
连接是否提前关闭。其他传输方式
(块,压缩)不关闭连接以指示
文件末尾。他们有足够的 FTP 编码来传输数据
可以解析连接以确定文件结尾。
因此,使用这些模式可以使数据连接保持打开状态
用于多个文件传输。
也可以看看:
- 为什么 FTP 被动模式需要一个端口范围而不是仅一个端口? https://serverfault.com/q/270745/168875#793283
- 在 NAT 后面运行的 FTPS 服务器需要多少个数据通道端口? https://serverfault.com/q/709984/168875
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)