我们有一个正在运行的 FTPS(FileZilla)服务器,大约有 100 个客户端每晚连接并上传 20-100MB 的文件。但是,有 1 或 2 个客户端似乎能够连接,上传整个文件,然后客户端报告失败(winsock 10038 错误)。文件实际上已成功上传。我编写了一个简单的 FTP 测试客户端,看起来小文件(10MB)工作正常。一旦达到 20MB 左右,它就会开始失败。我尝试增加客户端的超时时间,但这似乎没有任何作用,只是增加了报告失败所需的时间。
我们让他们重置了路由器,并在他们所在地的几台机器上进行了测试,发现问题出现在所有机器上(因此问题似乎与机器无关)。我们还检查了他们是否没有运行任何防病毒/防火墙软件。
更奇怪的是,它偶尔会成功——他们能够上传文件并且成功完成。
再次,客户端连接成功,可以成功上传整个文件,然后失败。
他们似乎正在运行 Netgear 路由器(尚未知道型号)。
对于可能造成这种情况的原因有什么想法吗?
答案1
首先,filezilla 服务器无法提供 SFTP,你这里可能指的是 FTPS。其次,调试此问题的最简单方法是在服务器和客户端上运行 tcpdump,重现问题,然后跟踪事务以查看问题
答案2
这可能比看起来更棘手。事实上,正如您在 MS 的官方文档中看到的,winsock 错误 10038 意味着“尝试对非套接字执行操作。套接字句柄参数未引用有效套接字,或者对于 select,fd_set 的成员无效”。
您可能希望使用 WireShark 转储 TCP 流量,并查看大文件传输结束时实际发生的情况。顺便说一句,20MB 不应被视为“大文件传输”,事实上 - 取决于您更喜欢哪个“流派”,大文件要么是大于 2GB 的文件,要么是大于 4GB 的文件。
最后一个细节:FileZilla 没有实现 SFTP 协议,您可能指的是 FTPS(SSL/TLS 上的 FTP)。
答案3
确定这是否是 Filezilla 的问题的一个快速方法是免费试用另一个 FTP 服务器,看看客户端是否可以连接到该服务器。信誉良好的选项包括 Ipswitch、Titan、Globalscape 或 Cerberus 的产品。然后,您可以轻松查看这是否是 Filezilla 的问题。