![TCP 健康检查中是否需要 RST、ACK](https://linux22.com/image/713928/TCP%20%E5%81%A5%E5%BA%B7%E6%A3%80%E6%9F%A5%E4%B8%AD%E6%98%AF%E5%90%A6%E9%9C%80%E8%A6%81%20RST%E3%80%81ACK.png)
我的 VPS 托管提供商的两台服务器出现了一些问题,出现了间歇性的连接错误。
我已经从服务器完成了 LAN 跟踪,并且发现了我认为是负载平衡器(由托管服务提供商提供)连接到服务器之间的问题。
在跟踪中,我看到负载均衡器发送了一个 SYN,服务器以 SYN ACK 进行响应,然后负载均衡器发回 RST ACK,如下面的代码片段所示
192.168.255.20 是负载均衡器,192.168.173.16 是服务器。
根据我对 TCP 的理解,在跟踪中看到 RST 数据包是一件坏事,因为这意味着数据包无法识别、连接无效、套接字未打开等,并且由于问题而中止连接。
我向我的托管服务提供商询问了这个问题,他们说这是正常的,这只是负载均衡器和服务器之间的 TCP 健康检查的一部分。
这让我感到有点奇怪,我找不到任何关于 TCP 健康检查与普通 TCP 连接有何不同具体内容,但我认为健康检查就像打开与套接字的连接然后关闭一样简单。
我在从我的笔记本电脑到家里的 Linux 机器进行跟踪时测试了这一点,然后我看到笔记本电脑发送 SYN,接收 SYN ACK,笔记本电脑发回 ACK。当我断开连接时,我会从每个设备收到 FIN,然后是 FIN ACK 以关闭连接。这是我期望从负载平衡器中看到的。
我再次向我的托管服务提供商询问了这个问题,他们回复了以下声明:
TCP 健康检查中最重要的数据包是来自后端节点的“SYN ACK”。一旦后端节点证明 TCP 协议已启动并用“SYN ACK”数据包响应,“RST ACK”就会丢弃连接。
从本质上来说,它是一种健康检查,而不是一种连接。
这听起来正确吗,因为我看不到有关特定 TCP 健康检查的任何信息,并且在这种情况下会出现 RST 数据包。
谢谢