FTP'ing大文件时如何防止TCP连接超时?

Ale*_*x R 9 networking linux ftp vmware-player

我无法将大文件从 Internet FTP(检索)到我的 Linux VM。过一会就超时了。

实际错误是“无法从控制连接读取回复——超时。 ”此错误发生在几分钟后,在文件的大部分已经传输之后。

设置是:

FTP 客户端:ncftpget 运行在 Linux 上的 VMWare Player 3.0
FTP 服务器:别人的机器在 Internet 上,配置未知
来宾操作系统:Ubuntu 8.10 Linux 32 位,安装了 vmxnet 和 vmware 工具。
主机操作系统:Vista 64 位
网络:Linux VM 通过桥接 NIC 连接到 Internet(也尝试过 NAT)
FTP模式:PASV
我确实发现一些论坛帖子提到了某处的 2 分钟超时。但究竟在哪里以及如何修复它并不清楚。已经尝试了一些故障排除步骤:

  • 我已从 VMWare Player 3.0 切换到 VirtualBox 3.0.x,但没有成功。
  • 我也从 NAT 改为桥接虚拟网卡,但没有运气

Linux VM 上的更新Netstat 和 DIR-655 路由器上的等效管理页面都显示连接处于活动状态且良好(tcp 'ESTABLISHED' 状态)。Vista 根本看不到连接,如果仅在 VM 内管理连接状态,我猜这是正常的。

这是netsh interface tcp show global在 Vista上的输出,以防万一:

C:\Users\alex>netsh interface tcp show global
正在查询活动状态...

TCP 全局参数
----------------------------------------------
接收端缩放状态:启用
烟囱卸载状态:禁用
接收窗口自动调整级别:高度限制
附加拥塞控制提供程序:无
ECN 功能:禁用
RFC 1323 时间戳:禁用
** 以上 autotuninglevel 设置是 Windows Scaling 启发式的结果
覆盖任何本地/策略配置。

Mic*_*aff 6

如果您正在通过 NAT,则 NAT 计时器可能会断开您的连接。我从酒店房间看到这一点,在那里我 ssh 到一台机器上,但在一段时间内无法做某事(有时只有 5 分钟!)

# echo 60 > /proc/sys/net/ipv4/tcp_keepalive_time
# echo 60 > /proc/sys/net/ipv4/tcp_keepalive_intvl
# echo 20 > /proc/sys/net/ipv4/tcp_keepalive_probes
Run Code Online (Sandbox Code Playgroud)

试试那些。这将导致每分钟在所有 TCP 流上发送一次 keepalive,而不管套接字上的活动如何。

请注意,ftp 客户端实际上可能不会使用 keepalive。这是应用程序必须请求的东西。如果失败,也许安装另一个 FTP 客户端会更好。NetBSD FTP 客户端 (lukemftp) 可能可用,它是迄今为止我见过的最好的命令行 FTP 客户端。

远程端也可能因不活动而关闭连接。如果是这样,它对现实有一个相当破碎的想法。如果上面的这些 TCP keepalive hacks 没有修复它,客户端将不得不定期发送一些命令(NOOP 等),或者 FTP 服务器的管理员将不得不更改他们的结束。


Jos*_*osh 2

wget为了进行故障排除,请尝试通过或下载相同的文件curl。我怀疑 PEra 是正确的,NOOP 命令会阻止这种情况,并且可能 wget 或 curl 会发送它们。