TCP TSVal 在活动连接重启 5 分钟后重置

TCP TSVal 在活动连接重启 5 分钟后重置

我在与位于 Cisco ASA 防火墙后面的中央服务器通信的 RHEL7 盒子上遇到了一个问题。

这些机器启动并启动一个代理,该代理建立并保持与中央服务器的连接。然后,中央服务器定期通过该隧道将流量发送到客户端。在第 5 分钟,我们看到代理断开连接,并且无法通过连接发送流量,除非我们重新启动连接,此后它工作正常。

进一步的研究表明,问题不仅仅出在这个应用程序/代理上,事实上,我们可以使用“nc”毫无差错地复制它。我们进行了数据包捕获,发现在 5 分钟时,ASA 丢弃了从客户端服务器发送的 ACK 数据包。中央服务器看不到任何数据包,并继续尝试重新传输。客户端将收到重新传输,发送 ACK,ASA 将丢弃它 - 重复上述操作。

在调查捕获时,我们发现在 5 分钟时,客户端服务器将 ACK 数据包上的 TSVal 重置为某个较低的数字。

您可以在下面的数据包捕获中看到,对于数据包 101,客户端发送了一个 TSVal 为 4294962488 的 ACK。然后,服务器推送更多数据(数据包 102),但在数据包 103 上,客户端现在以 TSVal 设置为 196 的 ACK 进行响应。

No.     Time                          Timestamp          Source                Destination           Protocol Length Info
     96 2017-07-11 15:16:04.717785    22:16:04.717785    10.158.35.162         10.153.195.227        TCP      101    4506 → 38208 [PSH, ACK] Seq=3089107029 Ack=2031069343 Win=29056 Len=35 TSval=1400815609 TSecr=4294947477
     97 2017-07-11 15:16:04.717802    22:16:04.717802    10.153.195.227        10.158.35.162         TCP      66     38208 → 4506 [ACK] Seq=2031069343 Ack=3089107064 Win=29312 Len=0 TSval=4294952481 TSecr=1400815609
     98 2017-07-11 15:16:09.721130    22:16:09.721130    10.158.35.162         10.153.195.227        TCP      101    4506 → 38208 [PSH, ACK] Seq=3089107064 Ack=2031069343 Win=29056 Len=35 TSval=1400820612 TSecr=4294952481
     99 2017-07-11 15:16:09.721152    22:16:09.721152    10.153.195.227        10.158.35.162         TCP      66     38208 → 4506 [ACK] Seq=2031069343 Ack=3089107099 Win=29312 Len=0 TSval=4294957485 TSecr=1400820612
    100 2017-07-11 15:16:14.724742    22:16:14.724742    10.158.35.162         10.153.195.227        TCP      101    4506 → 38208 [PSH, ACK] Seq=3089107099 Ack=2031069343 Win=29056 Len=35 TSval=1400825616 TSecr=4294957485
    101 2017-07-11 15:16:14.724757    22:16:14.724757    10.153.195.227        10.158.35.162         TCP      66     38208 → 4506 [ACK] Seq=2031069343 Ack=3089107134 Win=29312 Len=0 TSval=4294962488 TSecr=1400825616
    102 2017-07-11 15:16:19.728187    22:16:19.728187    10.158.35.162         10.153.195.227        TCP      101    4506 → 38208 [PSH, ACK] Seq=3089107134 Ack=2031069343 Win=29056 Len=35 TSval=1400830619 TSecr=4294962488
    103 2017-07-11 15:16:19.728207    22:16:19.728207    10.153.195.227        10.158.35.162         TCP      66     38208 → 4506 [ACK] Seq=2031069343 Ack=3089107169 Win=29312 Len=0 TSval=196 TSecr=1400830619
    104 2017-07-11 15:16:19.728556    22:16:19.728556    10.158.35.162         10.153.195.227        TCP      66     [TCP Dup ACK 2#1] 4506 → 38208 [PSH, ACK] Seq=3089107169 Ack=2031069343 Win=29056 Len=0 TSval=1400830619 TSecr=4294962488
    105 2017-07-11 15:16:19.928307    22:16:19.928307    10.158.35.162         10.153.195.227        TCP      101    [TCP Spurious Retransmission] 4506 → 38208 [PSH, ACK] Seq=3089107134 Ack=2031069343 Win=29056 Len=35 TSval=1400830820 TSecr=4294962488
    106 2017-07-11 15:16:19.928319    22:16:19.928319    10.153.195.227        10.158.35.162         TCP      78     [TCP Dup ACK 103#1] 38208 → 4506 [ACK] Seq=2031069343 Ack=3089107169 Win=29312 Len=0 TSval=396 TSecr=1400830820 SLE=3089107134 SRE=3089107169
    107 2017-07-11 15:16:19.928702    22:16:19.928702    10.158.35.162         10.153.195.227        TCP      66     [TCP Dup ACK 2#2] 4506 → 38208 [PSH, ACK] Seq=3089107169 Ack=2031069343 Win=29056 Len=0 TSval=1400830820 TSecr=4294962488

然后,ASA 认为其格式不正确并将其丢弃,因为 TSVal 不应该减少。

我们尝试通过 /proc/sys/net/ipv4/tcp_timestamps 禁用 tcp_timestamps。此方法有效,问题消失,但禁用时间戳可能会对其他应用程序流量产生其他影响。

此外,问题仍然存在,为什么主机在线 5 分钟后 TSVal 会重置为如此低的数字?这只发生在我们的 RHEL7u2 系统上 - 我们的 RHEL6 系统没有遇到此问题。

任何想法/帮助都将不胜感激。

答案1

我不认为防火墙应该丢弃这些,它应该查看两个序列号时间戳在一起...我猜测发生的事情是,RHEL 7 现在出于安全原因随机化时间戳,但也许防火墙已经很旧了?”

相关内容