我的几台服务器都出现了一个很奇怪的问题。似乎这些服务器上的用户无论何时通过 FTP (proftpd) 还是 HTTP (apache2) 下载大文件(超过 1GB),下载连接都会在下载数据达到 1GB 时断开。
这个问题不是随机的,它每次都会发生,所有账户都会发生,而且正好在 1GB 左右。我不知道是什么原因造成的。
服务器运行的是 Ubuntu Linux Oneiric Ocelot
答案1
我曾通过 ftp、ssh、http 下载过远大于 1 GB(甚至超过 100 GB)的文件,从未遇到过如此一致的问题。但我观察到并一直在排除其他情况下偶尔出现的可疑 tcp-rst 数据包的故障。tcp-rst 不应该在正常情况下发生,它几乎总是一个值得引起怀疑的异常事件。
事实上,这种情况如此频繁,而且连接被重置,而不是正确关闭,在我看来,这表明有些事情很可疑。防火墙和路由器(配置不当或损坏)可能会发生这种事情。您可以在下载过程中运行 tcpdump 并研究输出。
我猜测这可能是由你的 ISP 造成的,也许是由于路由器或防火墙损坏而导致的。
有时我会尝试自己找出一些神秘的 tcp 重置,并使用 tcpdump 来做到这一点:
我想说,大约 980 MB 标记,将所有内容 tcpdump 到一个文件中:
tcpdump -w name.dump -i any -nnvvXSs 65535 tcp port XXX
然后使用 tcpdump 查找重置数据包:
tcpdump -nnvvXSs 65535 -r name.dump 'tcp[tcpflags] & tcp-rst != 0 and tcp[tcpflags] & tcp-ack != 0' and tcp port XXX
然后再次使用 tcpdump 和 grep 查看时间戳,看看是否有任何可能提供线索的事情发生。-A 和 -B 选项将输出 grep 行之前和之后的 200 行。
tcpdump -nnvvXSs 65535 -r name.dump | grep -A 200 -B 200 "timestamp of tcp-rst packet"
发生这种情况的服务器是否使用了不同的 ISP?或者使用了单独的路由器或防火墙?您能否验证在使用相同 ISP、路由器和防火墙的其他服务器上不会发生这种情况?
答案2
检查防火墙。在某些情况下,协议超时是问题所在……