负载均衡器 TCP 重置和空闲超时

可以使用标准负载均衡器,通过为给定规则启用“空闲时执行 TCP 重置”,为方案创建可预测度更高的应用程序行为。 负载均衡器的默认行为是当达到流的空闲超时的情况下,以静默方式删除流。 启用 TCP 重置会导致负载均衡器在出现空闲超时情况时发送双向 TCP 重置(TCP 重置数据包),以通知应用程序终结点该连接超时且不再可用。 终结点可以视需要立即建立新连接。

显示网络节点默认 TCP 重置行为的示意图。

TCP 重置

你可以更改此默认行为,并启用根据入站 NAT 规则、负载均衡规则和出站规则在空闲超时情况下发送 TCP 重置。 根据规则启用时,负载均衡器将在所有匹配流出现空闲超时情况时向客户端和服务器终结点发送双向 TCP 重置(TCP RST 数据包)。

接收 TCP 重置数据包的终结点会立即关闭相应的套接字。 这会立即通知终结点该连接已释放,并且同一 TCP 连接上的任何后续通信都将失败。 应用程序可以在套接字关闭时清除连接,并根据需要重新建立连接,而无需等待 TCP 连接最终超时。

对于许多场景,TCP 重置可以减少发送 TCP(或应用层)保持连接以刷新流空闲超时的需要。

如果空闲持续时间超过配置限制,或者你的应用程序显示启用了 TCP 重置的不良行为,则可能仍需要使用 TCP 保持连接(或应用层保持连接)来监视 TCP 连接的活跃性。 此外,当路径中某处的连接已经过代理时,保持连接(特别是应用层保持连接)也仍然有用。

通过仔细检查整个端到端方案,可以发现启用 TCP 重置和调整空闲超时的好处。 然后,确定是否需要执行更多步骤,以确保所需的应用程序行为。

可配置的 TCP 空闲超时

Azure 负载均衡器标准版的负载均衡器规则、出站规则和入站 NAT 规则的超时范围为 4 分钟到 100 分钟。 默认值为 4 分钟。 如果处于非活动状态的时间超过超时值,则不能保证在客户端和云服务之间保持 TCP 或 HTTP 会话。 Azure 负载均衡器基本版的超时范围最多为 30 分钟。

当连接关闭时,客户端应用程序可能收到以下错误消息:“基础连接已关闭: 应保持连接状态的连接已由服务器关闭”。

如果启用了 TCP 重置,但由于某些原因而错过了相应数据包,则会针对任何后续数据包进行重置。 如果未启用 TCP 重置选项,则会以无提示方式删除数据包。

常见的做法是使用 TCP 保持连接状态。 这种做法可以使连接状态保持更长时间。 有关详细信息,请参阅 .NET 示例。 在启用保持连接状态的情况下,在连接处于非活动状态时发送数据包。 用于保持连接状态的数据包将确保不会达到空闲超时值,并且连接会维持很长时间。

此设置仅适用于入站连接。 为了避免断开连接,请将 TCP 保持连接的时间间隔配置为小于空闲超时设置,或者提高空闲超时值。 为了针对这些场景提供支持,我们支持可配置的空闲超时。

TCP 保持连接状态适用于电池续航时间不受限制的情况。 不建议将其用于移动应用程序。 在移动应用程序中使用 TCP 保持连接状态可能会加快设备电池的耗尽速度。

优先级顺序

请务必考虑为不同 IP 设置的空闲超时值可能如何交互。

入站

  • 如果存在空闲超时值设置不同于其引用的前端 IP 空闲超时的(入站)负载均衡器规则,将优先采用负载均衡器前端 IP 空闲超时。
  • 如果入站 NAT 规则的空闲超时值设置与它引用的前端 IP 的空闲超时不同,则优先采用负载均衡器前端 IP 空闲超时。

出站

  • 如果有出站规则的空闲超时值不是 4 分钟(即公共 IP 出站空闲超时锁定值),则优先采用出站规则的空闲超时。
  • 由于 NAT 网关始终优先于负载均衡器出站规则(并且优先于直接分配至 VM 的公共 IP 地址),因此将使用分配至 NAT 网关的空闲超时值。 (同样,不会考虑分配至 NAT GW 的任何 IP 的锁定公共 IP 出站空闲超时 [即 4 分钟]。)

限制

  • TCP 重置仅在 TCP 连接处于已建立状态时发送。
  • TCP 空闲超时不影响 UDP 协议的负载均衡规则。
  • 当网络虚拟设备位于路径中时,内部负载均衡器 HA 端口不支持 TCP 重置。 这种情况下,可以从网络虚拟设备将出站规则与 TCP 重置配合使用。

后续步骤