Windows Server TCP 套接字随机断开连接:如何重现?

Windows Server TCP 套接字随机断开连接:如何重现?

我们从欧洲一家大型供应商那里租用了 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 卸载?

相关内容