当我尝试通过HTTP下载文件时,下载有时在大约30 MB之后停止。 下载速率下降到0 B / s,没有数据继续。 当我停止下载并再次恢复时,下载仍然挂起。 但是当我再次从字节0重新下载它,一切再次停止时,一切正常工作到30 MB。 有时候,几个小时后,它再次没有问题的工作。 下载停止时文件中的位置是可变的,但大部分时间大约是30-35 MB。
作为一个下载pipe理器,我使用wget。 使用curl和其他下载pipe理器也会发生同样的行为。 错误发生独立于我从下载的服务器。 我在networking中的其他Linux计算机上也观察到这个错误。 我的networking上的所有计算机都在x86上运行Gentoo Linux。
我networking上的所有互联网连接都通过我的networking上的一台服务器运行,该服务器在端口80上运行透明的Squid代理。该服务器连接到由Deutsche Telekom AG公司的Speedport W 700V的路由器。 该路由器使用ADSL连接到互联网,具有448 kbit / s的下行速度和96 kbit / s的上行速度。
我几乎可以肯定,我的透明代理不是问题。 我没有解决这个问题就关掉了。 我也直接通过WLAN连接到路由器而不解决问题。 我也尝试通过HTTP下载另一个端口。 此外,我试图用我的电脑上的gateway6隧道下载IPv6文件,导致完全相同的问题。
现在奇怪的是,一切工作正常使用FTP和HTTPS(也在同一台计算机上的wget)。 更奇怪的是,当我使用FTP或HTTPS恢复挂载HTTP的下载时,以这种方式下载几个字节,停止wget,然后使用HTTP再次恢复,它会再次加载数据! 但几MB后,它可能会再次停止。 不幸的是,以这种方式下载的文件总是被破坏(MD5总和不正确),所以在某些时候,一定有假的数据。 我试图在下载的文件中searchHTML错误消息,但是grep -i html没有find任何东西。 (我想不出在文件中searchGZIP压缩的HTML错误消息的方法,所以我没有尝试。)
我尝试在wget上使用strace时,无法恢复下载,您可以在pastebin上find整个输出。 重要的路线每秒重复一次:
clock_gettime(CLOCK_MONOTONIC, {326102, 62176435}) = 0 ) = 1 write(2, "78% [++++++++++++++++++++++++++++"..., 19578% [+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ] 110,683,685 --.-K/s ) = 195 select(4, [3], NULL, NULL, {0, 949999}) = 0 (Timeout)
我完全不知道这个问题的原因是什么。 这似乎是什么原因的问题说HTTP。 它似乎智能地说HTTP,甚至在IPv6-over-IPv4隧道中重新识别它。 但是,这可能是什么,为什么有时呢? 另外一种可能是我的电脑出现问题,在其他Gentoo Linux电脑上也是如此。
有没有人有这样的问题? 可能是什么原因,我需要继续调查才能find更多的问题?
更新:
我刚刚遇到了这个问题,并试图通过路由器的WLAN恢复下载,这一次它的工作。 也许我在使用WLAN的最后一次testing中做了错误的事情。 现在,也许我的透明代理服务器实际上是问题。 这是一个非常基本的Squid代理服务器,不caching任何东西。 也许有趣的是,另一个Squid代理运行在另一个端口上的同一台计算机上。
更新:
一次下载又挂了,这次我closures了所有的防火墙设置,并停止了所有的代理服务器。 我无法从直接连接到路由器的networking服务器恢复下载。 所以我的代理服务器肯定不是问题的原因。 我会尝试升级我的路由器的固件,虽然我没有pipe理员访问它。 我会看看我能做什么。
更新:
升级到我的路由器的最新固件没有帮助。 我看不出有任何其他的可能性,这是我的ISP的错。 我的“解决scheme”现在是通过其他地方的SSH服务器隧道的所有stream量。
更奇怪的是,当我使用FTP或HTTPS恢复挂载HTTP的下载时,以这种方式下载几个字节,停止wget,然后使用HTTP再次恢复,它会再次加载数据! 但几MB后,它可能会再次停止。 不幸的是,以这种方式下载的文件总是被破坏(MD5总和不正确)
这尖叫“断代理”恢复HTTP下载的协议并不复杂(这只是一个额外的头),但这正是一个破碎的代理会搞砸的事情。
我敢打赌,如果您尝试使用wget下载一个大文件,等待它失败,然后运行wget -c将http更改为https,它将恢复正常。
这个post真的很老了,所有的networking基础设施都被replace了,但是我仍然想要发布解决scheme,我当天没有发布。
问题是由将networking服务器连接到路由器的网卡引起的。 更换卡解决了问题。 我不知道究竟是什么问题,它一定是由某些特定的字节序列或某些其他条件引起的固件错误。