我们从欧洲一家大型供应商那里租用了 10 台 Windows 服务器。它们都运行正常。一台服务器突然崩溃,客服人员发现两个磁盘都坏了。他们更换了磁盘和内存(他们进行了测试,发现 DIMM 有故障)。
此后,服务器从头开始重新安装 Windows 2008 Server R2。
现在我们的软件(这是一个处理约 200 个实时 TCP 连接的服务器软件)中出现了随机 TCP 套接字断开的情况。我们进行了大量测试,但无法重现完全随机的问题。
有时,VNC、SSH、RDP 连接也会断开,所以这与我们的软件无关。
我再次重新安装了 Windows 2008,并且首先下载了 Firefox……由于断开连接,下载停止了。
这看起来肯定是硬件问题。
所有其他服务器都在相同的硬件上运行相同的 SO。我们从未遇到过问题。
我如何重现此问题以向提供商表明存在硬件问题?是否有针对网络问题的特定基于 Windows 的测试套件?
我愿意接受建议。
更新 1
Wireshark 抓包显示服务器突然发送 RST,ACK 包,有大量重传,在 RST 之前的一些包中有这样的包:
[TCP ACKed unseen segment] https > 60226 [ACK] Seq=42906 Ack=79 Win=253 Len=0 SLE=27 SRE=53 443 60226
更新 2
NIC 适配器是 Realtek PCIe GBE 系列控制器。驱动程序是 Realtek 的 rt64win7.sys,版本 7.065.1025.2012。它是每个客户预装的服务器附带的驱动程序。它可以与其他服务器上的相同驱动程序一起正常工作。
更新 3
我安装了最新版本的 Wireshark。我运行它wget -m --limit-rate 1000 somesite
来生成一些带有 TCP 流量的请求。
Wireshark 捕获中有很多警告。Window Full、ZeroWindow。我尝试使用 wget 访问不同的网站,但总是出现警告。这可能是我们的问题吗?
11 0.569100000 xx.xx.xxx.216 xx.xxx.xxx.80 TCP 554 [TCP segment of a reassembled PDU]
12 0.569356000 xx.xx.xxx.216 xx.xxx.xxx.80 TCP 554 [TCP Window Full] [TCP segment of a reassembled PDU]
13 0.569376000 xx.xxx.xxx.80 xx.xx.xxx.216 TCP 54 58572 > http [ACK] Seq=266 Ack=1828 Win=1000 Len=0
14 0.655205000 xx.xx.xxx.216 xx.xxx.xxx.80 TCP 554 [TCP segment of a reassembled PDU]
15 0.655443000 xx.xx.xxx.216 xx.xxx.xxx.80 TCP 554 [TCP Window Full] [TCP segment of a reassembled PDU]
16 0.655457000 xx.xxx.xxx.80 xx.xx.xxx.216 TCP 54 58572 > http [ACK] Seq=266 Ack=2828 Win=1000 Len=0
17 0.741237000 xx.xx.xxx.216 xx.xxx.xxx.80 TCP 554 [TCP segment of a reassembled PDU]
18 0.741498000 xx.xx.xxx.216 xx.xxx.xxx.80 TCP 554 [TCP Window Full] [TCP segment of a reassembled PDU]
19 0.741516000 xx.xxx.xxx.80 xx.xx.xxx.216 TCP 54 [TCP ZeroWindow] 58572 > http [ACK] Seq=266 Ack=3828 Win=0 Len=0
20 1.060906000 xx.xxx.xxx.80 xx.xx.xxx.216 TCP 54 [TCP Window Update] 58572 > http [ACK] Seq=266 Ack=3828 Win=1000 Len=0
21 1.146737000 xx.xx.xxx.216 xx.xxx.xxx.80 TCP 554 [TCP segment of a reassembled PDU]
22 1.146993000 xx.xx.xxx.216 xx.xxx.xxx.80 TCP 554 [TCP Window Full] [TCP segment of a reassembled PDU]
23 1.147007000 xx.xxx.xxx.80 xx.xx.xxx.216 TCP 54 [TCP ZeroWindow] 58572 > http [ACK] Seq=266 Ack=4828 Win=0 Len=0
24 1.634966000 xx.xx.xxx.216 xx.xxx.xxx.80 TCP 60 [TCP Keep-Alive] http > 58572 [ACK] Seq=4827 Ack=266 Win=15616 Len=0
25 1.634981000 xx.xxx.xxx.80 xx.xx.xxx.216 TCP 54 [TCP ZeroWindow] 58572 > http [ACK] Seq=266 Ack=4828 Win=0 Len=0
更新 4
我发现 Wireshark 捕获中存在一些奇怪的行为。
44176 1183.719018000 xx.xxx.xxx.80 xx.x.xxx.88 TCP 1506 [TCP segment of a reassembled PDU]
44177 1183.724259000 xx.x.xxx.88 xx.xxx.xxx.80 TCP 78 [TCP Dup ACK 44174#1] 57852 > http [ACK] Seq=94 Ack=868148 Win=175872 Len=0 TSval=190130437 TSecr=8617727 SLE=869588 SRE=871028
44178 1183.724297000 xx.xxx.xxx.80 xx.x.xxx.88 TCP 1506 [TCP segment of a reassembled PDU]
44179 1183.725337000 xx.x.xxx.88 xx.xxx.xxx.80 TCP 78 [TCP Dup ACK 44174#2] 57852 > http [ACK] Seq=94 Ack=868148 Win=175872 Len=0 TSval=190130437 TSecr=8617727 SLE=869588 SRE=872468
44180 1183.725353000 xx.xxx.xxx.80 xx.x.xxx.88 TCP 1506 [TCP segment of a reassembled PDU]
44181 1183.753811000 xx.x.xxx.88 xx.xxx.xxx.80 TCP 86 [TCP Dup ACK 44174#3] 57852 > http [ACK] Seq=94 Ack=868148 Win=175872 Len=0 TSval=190130445 TSecr=8617727 SLE=873908 SRE=875348 SLE=869588 SRE=872468
44182 1183.753838000 xx.xxx.xxx.80 xx.x.xxx.88 TCP 1506 [TCP Fast Retransmission] [TCP segment of a reassembled PDU]
44183 1183.758173000 xx.x.xxx.88 xx.xxx.xxx.80 TCP 86 [TCP Dup ACK 44174#4] 57852 > http [ACK] Seq=94 Ack=868148 Win=175872 Len=0 TSval=190130447 TSecr=8617727 SLE=873908 SRE=876788 SLE=869588 SRE=872468
44184 1183.768334000 xx.x.xxx.88 xx.xxx.xxx.80 TCP 86 [TCP Dup ACK 44174#5] 57852 > http [ACK] Seq=94 Ack=868148 Win=175872 Len=0 TSval=190130449 TSecr=8617727 SLE=873908 SRE=878228 SLE=869588 SRE=872468
44185 1183.770232000 xx.x.xxx.88 xx.xxx.xxx.80 TCP 86 [TCP Dup ACK 44174#6] 57852 > http [ACK] Seq=94 Ack=868148 Win=175872 Len=0 TSval=190130449 TSecr=8617727 SLE=873908 SRE=879668 SLE=869588 SRE=872468
44186 1183.773544000 xx.x.xxx.88 xx.xxx.xxx.80 TCP 86 [TCP Dup ACK 44174#7] 57852 > http [ACK] Seq=94 Ack=868148 Win=175872 Len=0 TSval=190130450 TSecr=8617727 SLE=873908 SRE=881108 SLE=869588 SRE=872468
44187 1183.784085000 xx.x.xxx.88 xx.xxx.xxx.80 TCP 86 [TCP Dup ACK 44174#8] 57852 > http [ACK] Seq=94 Ack=868148 Win=175872 Len=0 TSval=190130452 TSecr=8617727 SLE=873908 SRE=882548 SLE=869588 SRE=872468
44188 1183.784097000 xx.xxx.xxx.80 xx.x.xxx.88 TCP 101 [TCP Retransmission] [TCP segment of a reassembled PDU]
44189 1183.789043000 xx.x.xxx.88 xx.xxx.xxx.80 TCP 86 [TCP Dup ACK 44174#9] 57852 > http [ACK] Seq=94 Ack=868148 Win=175872 Len=0 TSval=190130453 TSecr=8617727 SLE=873908 SRE=883988 SLE=869588 SRE=872468
44190 1183.789056000 xx.xxx.xxx.80 xx.x.xxx.88 TCP 1471 [TCP Retransmission] [TCP segment of a reassembled PDU]
44191 1183.793926000 xx.x.xxx.88 xx.xxx.xxx.80 TCP 94 [TCP Dup ACK 44174#10] 57852 > http [ACK] Seq=94 Ack=868148 Win=175872 Len=0 TSval=190130454 TSecr=8617727 SLE=895508 SRE=896948 SLE=873908 SRE=883988 SLE=869588 SRE=872468
44192 1183.793939000 xx.xxx.xxx.80 xx.x.xxx.88 TCP 1506 [TCP segment of a reassembled PDU]
44193 1183.800204000 xx.x.xxx.88 xx.xxx.xxx.80 TCP 94 [TCP Dup ACK 44174#11] 57852 > http [ACK] Seq=94 Ack=868148 Win=175872 Len=0 TSval=190130457 TSecr=8617727 SLE=895508 SRE=898388 SLE=873908 SRE=883988 SLE=869588 SRE=872468
44194 1183.800217000 xx.xxx.xxx.80 xx.x.xxx.88 TCP 1506 [TCP segment of a reassembled PDU]
44195 1183.803615000 xx.x.xxx.88 xx.xxx.xxx.80 TCP 94 [TCP Dup ACK 44174#12] 57852 > http [ACK] Seq=94 Ack=868148 Win=175872 Len=0 TSval=190130457 TSecr=8617727 SLE=895508 SRE=899828 SLE=873908 SRE=883988 SLE=869588 SRE=872468
44196 1183.803640000 xx.xxx.xxx.80 xx.x.xxx.88 TCP 1506 [TCP Retransmission] [TCP segment of a reassembled PDU]
44197 1183.803654000 xx.xxx.xxx.80 xx.x.xxx.88 TCP 1506 [TCP Retransmission] [TCP segment of a reassembled PDU]
44198 1183.803660000 xx.xxx.xxx.80 xx.x.xxx.88 TCP 1506 [TCP Retransmission] [TCP segment of a reassembled PDU]
44199 1183.803665000 xx.xxx.xxx.80 xx.x.xxx.88 TCP 1506 [TCP Retransmission] [TCP segment of a reassembled PDU]
.. a lot of these
有 1 秒的错误。我有 2 个连接,但都没有中断。重新传输挽救了连接。
我会向提供商展示所有这些错误。我希望能说服他们。
答案1
我会做两件事:使用Realtek 诊断程序检查硬件问题。
以及:设置性能计数器日志记录在界面上——特别查看以下计数器:
网络接口\数据包出站错误
网络接口\数据包接收错误
TCPv4\连接失败
TCPv4\连接重置
这应该有助于记录您遇到的问题,并可以提供给您的主机以显示您遇到的问题。此外 - 在一些健康的服务器上设置相同的性能计数器日志记录以供比较。
答案2
您可以使用数据包捕获软件(例如 wireshark)来查看发生了什么。
答案3
也可能是其他原因,但这可能是 TCP 校验和的问题。此功能通常被卸载到硬件卡上,您甚至无法在同一台机器上使用 Wireshark 发现问题(尽管从防火墙转储中看到问题通常很明显)。
如果 TCP 数据包中的校验和不正确,则会导致重新请求数据包。如果经过一段时间后,连接方之一无法构建正确验证的窗口,它将认为连接已断开并发送 RSET 数据包。
那么,您是否尝试过禁用 NIC 上的 TCP 卸载?