在我的家用 Kubuntu 11.10 机器上,我发现无法通过 FTP 上传任何大于 5791 字节的单个文件。我尝试过使用 Konqueror、GFTP 和 Krusader 来连接两个不同的 FTP 服务器(不是匿名的,而是我雇主的 FTP 服务器)。此外,其他人也可以向这两个服务器上传更大的文件。我不知道问题是我的 Kubuntu 桌面还是我的路由器/ISP 阻塞。我尝试按照以下方式更改 MTU这个问题但它并没有解决问题。我该如何解决这个问题?我家里没有任何其他计算机可以进行 FTP 传输。
我在同一台机器上通过 SSH 上传较大的文件没有问题,问题仅在 FTP 上出现。另请注意,我只能使用被动模式(CLI 上的 -p)进行连接。
这是示例输出:
ftp> put smallFile.txt
local: smallFile.txt remote: smallFile.txt
227 Entering Passive Mode (50,63,78,1,198,219)
150 Accepted data connection
226-File successfully transferred
226 0.837 seconds (measured here), 48.98 bytes per second
41 bytes sent in 0.00 secs (494.3 kB/s)
ftp> put largeFile.txt
local: largeFile.txt remote: largeFile.txt
227 Entering Passive Mode (50,63,78,1,198,224)
150 Accepted data connection
421 Service not available, remote server has closed connection
7785 bytes sent in 0.00 secs (62315.9 kB/s)
ftp>
在线路上,150 Accepted data connection
我会等待相当长一段时间,421 Service not available
消息才会出现。
答案1
我以前在使用 vsftpd 作为服务器时见过这种情况(但这里是 pureftpd),当时服务器正在接受 DATA 连接但无法为上传的文件写入锁。客户端只能发送与其发送缓冲区+服务器接收窗口一样多的数据。我不记得细节了,但加起来会超过 5791 字节。
5791看起来更像是4个全尺寸数据包,这是初始TCP拥塞窗口。就好像 TCP ACK 数据包(SYN+ACK 除外)在传输过程中丢失了。我猜想是透明代理问题和/或防火墙问题。我们没有看到 FTP 握手的第一部分。您是否有机会使用 TLS(我可以看到服务器支持它)。
我会运行“tshark -i any host 50.63.78.1”,看看发生了什么。