我无法从互联网FTP(检索)一个大文件到我的Linux VM。 它过了一段时间。
实际的错误是“ 无法读取来自控制连接的回复 – 超时 ” 。几分钟后,在文件的一大块已经被传输之后,会发生此错误。
设置是:
FTP客户端:ncftpget在VMWare Player 3.0的Linux上运行 FTP服务器:在互联网上的其他人的机器,configuration未知 客户操作系统:Ubuntu 8.10 Linux 32位,安装了vmxnet和vmware工具。 主机操作系统:Vista 64位 networking:Linux VM通过桥接NIC连接到Internet(也尝试NAT) FTP模式:PASV
我确实发现了一些论坛post,提到了2分钟的超时时间。 但究竟在哪里以及如何解决这个问题还不清楚。 一些故障排除步骤已经尝试
更新 Linux虚拟机上的Netstat和DIR-655路由器上的等效pipe理页面都显示连接是活着的(tcp'ESTABLISHED'状态)。 Vista根本没有看到连接,如果连接状态只在虚拟机内pipe理,我想这是正常的。
下面是Vista上的netsh interface tcp show global的输出,以防万一:
C:\ Users \ alex> netsh interface tcp show global 查询活动状态... TCP全局参数 ---------------------------------------------- 接收方缩放状态:启用 烟囱卸载状态:禁用 接收窗口自动调节级别:高度限制 附加拥塞控制提供程序:无 ECNfunction:禁用 RFC 1323时间戳:已禁用 **上面的autotuninglevel设置是Windows Scaling启发式的结果 覆盖任何本地/策略configuration。
为了排除故障,请尝试通过wget或curl下载相同的文件。 我怀疑PEra是正确的,NOOP命令会阻止这个,可能wget或curl会发送它们。
如果你正在经历NAT,NAT定时器很可能会断开你的连接。 我从酒店的房间看到这个东西,在那里我呆了一会儿,却没有做点什么(有时候只有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
试试这些。 这将导致每隔一分钟在所有TCPstream上发送一个保持连接,而不pipe套接字上的活动。
请注意,ftp客户端实际上可能不会使用keepalive。 这是应用程序必须要求的东西。 如果失败了,安装另一个FTP客户端可能会更好。 NetBSD的FTP客户端(lukemftp)可能是可用的,并且是我见过的最好的命令行FTP客户端。
远程端也可能由于不活动而closures连接。 如果是这样,它对现实有一个相当破碎的想法。 如果上面这些TCP keepalive攻击没有解决,客户端将不得不定期发送一些命令(NOOP等),否则FTP服务器的pipe理员将不得不改变它们的结束。
它可能是您的虚拟机和FTP服务器之间的任何过滤设备。 大多数防火墙(包括家庭路由器)都有一个状态表,空闲的TCP会话在某个超时后被重置。
您可以将虚拟机网卡更改为桥接模式(而不是NAT)来整理主机操作系统。 然后, 确保您的FTP客户端定期发送NOOP命令以保持命令通道的打开。 如果发现命令会话已closures,则会有closures数据连接的防火墙。 无论数据连接是闲置还是stream量
HTH,
PERA
如果你是从命令行执行此操作,请尝试启用“哈希”(“二进制”是我总是打开的另一个)。 这可能会在控制端口上产生足够的stream量以防止超时。
FTP使用两个套接字 – 一个用于控制,一个用于数据。
这很可能是因为该套接字上处于非活动状态而导致控制连接超时的VM上的NAT状态表。
您可以通过在虚拟机系统上启用“主动FTP”来解决这个问题,希望这将导致VMware主动监视FTP会话,并且只要数据仍在stream动,就保持控制套接字处于活动状态。
如果FTP服务器是Vista,则转到FTP站点属性,并将超时从15分钟(默认)增加。 您尝试传输的文件有多大?