作为下载管理器,我使用wget.使用curl和其他下载管理器时会发生相同的行为.该错误与我下载的服务器无关.我也在网络中的其他Linux计算机上发现了这个错误.我网络上的所有计算机都在x86上运行Gentoo Linux.
我网络上的所有互联网连接都通过网络上的服务器运行,该服务器在端口80上运行透明的Squid代理.该服务器连接到路由器,这是德国电信公司的Speedport W 700V.该路由器使用ADSL连接到互联网,速度为448 kbit / s,速度为96 kbit / s.
我几乎可以肯定我的透明代理不是问题所在.我没有解决问题就关掉了.我也直接通过WLAN连接到路由器而不解决问题.我还尝试通过HTTP下载另一个端口.此外,我尝试使用IPv6从我的计算机下载带有gateway6隧道的文件,这导致了完全相同的问题.
现在奇怪的是,使用FTP和HTTPS(在同一台计算机上也使用wget)一切正常.更奇怪的是:当我恢复使用FTP或HTTPS通过HTTP挂起的下载时,以这种方式下载几个字节,停止wget然后使用HTTP再次恢复,它再次加载数据!但在几MB之后,它可能会再次停止.不幸的是,以这种方式下载的文件总是被破坏(MD5总和不正确),因此在某些时候,必定存在虚假数据.我尝试在下载的文件中搜索HTML错误消息,但grep -i html没有找到任何内容. (我想不出在文件中搜索GZIP压缩的HTML错误消息的方法,所以我没试过.)
我尝试在wget上使用strace时无法恢复下载,你可以找到整个输出on pastebin.重要的行每秒重复一次:
clock_gettime(CLOCK_MONOTONIC,{326102,62176435}) = 0 ) = 1 write(2,"78% [++++++++++++++++++++++++++++"...,19578% [+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ] 110,683,685 --.-K/s ) = 195 select(4,[3],NULL,{0,949999}) = 0 (Timeout)
我完全不知道这个问题可能是什么原因.似乎无论什么原因导致问题都说HTTP.似乎智能地说HTTP甚至可以在IPv6-over-IPv4隧道中对其进行认证.但那可能是什么呢?为什么它有时会发生呢?另一种可能性是我的计算机上存在问题,在其他Gentoo Linux计算机上也是如此.
有没有人遇到过这样的问题?可能是什么原因,我在哪里继续调查以了解更多有关该问题的信息?
更新:
我刚刚遇到问题并尝试通过路由器的WLAN恢复下载,这次它起作用了.也许在我上次使用WLAN进行测试时我做错了什么.现在也许我的透明代理服务器实际上是问题所在.它是一个非常基本的Squid代理服务器,不会缓存任何东西.也许有趣的是,第二个Squid代理在另一个端口上的同一台计算机上运行.
更新:
下载再次挂起,这次我关闭了所有防火墙设置并停止了所有代理服务器.我无法从直接连接到路由器的网络服务器恢复下载.所以我的代理服务器肯定不是导致问题的原因.我现在会尝试升级我的路由器的固件,虽然我没有管理员访问权限.我会看到我能做什么.
更新:
升级到我的路由器的最新固件没有帮助.我认为没有其他可能性,这是我的ISP的错.我的“解决方案”现在通过其他地方的SSH服务器隧道传输所有流量.
解决方法
Even more strange: when I resume the
download that hanged over HTTP using
FTP or HTTPS,download a few bytes
that way,stop wget and then resume
again using HTTP,it loads data again!
But after a few MB,it may stop again.
Unfortunately,files downloaded that
way are always broken (the MD5 sum is
not correct)
这会尖叫“破解代理”恢复HTTP下载的协议并不复杂(它只是一个额外的标题),但这正是破坏代理会弄乱的事情.
我打赌如果你尝试使用wget下载一个大文件,等待它失败,然后运行wget -c将http更改为https,它将恢复正常.